Использование dispy с переадресацией портов через туннель ssh

У меня dispynode запущен на удаленном сервере. Я пытаюсь открыть SSH-туннель со своего компьютера (клиента) и настроить dispyJobCluster для использования этого туннеля. Но это не работает. Я не правильно настраиваю? Вот как я это делаю:

(p.s. у меня нет глубоких знаний в области распределенных и параллельных вычислений или сетей, я инженер-строитель, поэтому, пожалуйста, извините меня, если я иногда не использую правильные технические слова)

Туннель SSH:

plink -v -ssh -L 61:localhost:21 [email protected]

Это перенаправит соединения на порт 61 на localhost: 21 на сервере, где работает dispynode.

dispynode:

sudo dispynode.py -d --ext_ip_addr localhost -p 21 -i localhost

будет прослушивать порт 21 и передавать, используя localhost, который ведет его через туннель обратно к клиенту

с этим кодом dispyClient JobCluster:

cluster = dispy.JobCluster( runCasterDispyWorker,
                            nodes=[('localhost',61)], \
                            ip_addr='localhost', \
                            ext_ip_addr='localhost', \
                            port = 61, \
                            node_port = 21, \
                            recover_file='recover.rec', \
                            )

Когда я запускаю dispy.py, я получаю следующую ошибку в командной строке, из которой я открыл туннель SSH:

Открытие соединения с localhost: 21 для перенаправления с 127.0.0.1:64027
Перенаправленный порт закрыт

По крайней мере, я предполагаю, что это означает, что dipsy пытается получить доступ к открытому туннелю SSH, но я не уверен, что происходит на стороне сервера. Похоже, что диспинод ничего не получает. Быстрый захват трафика с помощью TCPdump на сервере подтверждает это. По неизвестной причине порт меняется на 64027.


Я также попытался открыть 2 туннеля SSH одновременно:

  • Один для связи клиент-сервер

    plink -v -ssh -L 61: локальный хост: 21 [email protected]

  • Один для связи между сервером и клиентом

    plink -v -ssh -R 20: локальный хост: 60 [email protected]

но безуспешно. Я даже не уверен, лучше ли использовать удаленную пересылку или локальную пересылку


Я попробовал это решение, которое предложил сам разработчик dispy, но у меня оно не сработало:

http://sourceforge.net/p/dispy/discussion/1771151/thread/bcad6eaa/

Неправильная ли конфигурация, которую я использовал выше? Что мне следует использовать: удаленную или локальную переадресацию? Почему порт изменяется автоматически, может ли это быть из-за того, что брандмауэр моей компании блокирует соединение через порты, которые я пытаюсь использовать? Кому-нибудь раньше удавалось запускать dispy через SSH-туннель?


person Joe S    schedule 06.11.2015    source источник


Ответы (1)


Это сработало для меня. Это должно сработать для вас:

  • SSH-туннель (я использую PuTTY plink.exe для создания туннеля):

plink -v -ssh -R 51347: localhost: 51347 [имя пользователя на сервере] @ [общедоступный IP-адрес сервера или имя домена] -pw [ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ на сервере] -N

  • dispynode (запущен на сервере - linux):

sudo dispynode.py -d --ext_ip_addr [общедоступный IP-адрес или доменное имя сервера]

  • JobCluster (dipsyClient):

    def Worker():
        os.system('echo hello') #prints hello on the server running dispynode
        return 0
    
    import os
    import dispy, logging
    
    cluster = dispy.JobCluster( \
        Worker, \
        nodes=['IP public or domain name of server'], \
        ext_ip_addr='localhost', \
        recover_file='recoverdispy.rec', \
        )
    
    job = cluster.submit()
    print "waiting for job completion"
    job()
    print('status: %s\nstdout: %s\nstderr: %s\nexception: %s' % (job.status, job.stdout, job.stderr, job.exception))
    

Попробуйте этот фрагмент кода. Убедитесь, что требуемые порты разрешены для использования.

person Joe S    schedule 18.11.2015