2015-11-06 4 views
1

У меня есть диспетчер, работающий на удаленном сервере. Я пытаюсь открыть туннель SSH с моего компьютера (клиента) и настроить dispyJobCluster для использования этого туннеля. Но это не работает. Я не настраиваю это право? Вот как я это делаю:Использование dispy с переадресацией портов через туннель ssh

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

SSH туннель:

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

Это будет пересылать подключения к порту 61 для локального хоста 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 туннеля:

подключение к локальной машине открытия: 21 для пересылки из 127.0.0.1:64027
Пересылаемого порта закрыт

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


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

  • Один для клиент-сервер коммуникаций

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

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

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

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


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

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

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

ответ

0

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

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

палить -v -ssh -R 51347: локальный: 51347 [имя пользователь на сервере] @ [сервер Public IP или DomainName] -pw [USER PASSWORD на сервере] -N

  • dispynode (работает на сервере - линукс):

Судо dispynode.py -d --ext_ip_addr [Public 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)) 
    

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