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

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

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

SSH туннель:

plink -v -ssh -L 61:localhost:21 user@myserver.net

Это будет перенаправлять соединения на порт 61 на localhost:21 на сервере, на котором работает dispynode

dispynode:

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

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

с этим дисплеем 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
Переадресованный порт закрыт

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


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

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

    plink -v -ssh -L 61:localhost:21 user@myserver.net

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

    plink -v -ssh -R 20:localhost:60 user@myserver.net

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


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

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

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

1 ответ

Решение

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

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

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))
    

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

Другие вопросы по тегам