Использование диспута с переадресацией портов через туннель 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))
Попробуйте этот фрагмент кода. Убедитесь, что необходимые порты разрешено использовать