2015-11-06 225 views
1

我在远程服务器上运行dispynode。我试图从我的电脑(客户端)打开SSH隧道并配置dispyJobCluster以使用此隧道。但它不起作用。我没有配置这个权利?以下是我正在做的:使用通过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,并使用本地主机,导致其传送虽然隧道回到客户端

与此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隧道,但我不确定服务器端发生了什么。似乎dispynode什么都没收到。 与服务器上的TCPdump进行快速流量捕获,以确认它。对于一些未知的原因,端口更改为64027.


我也曾尝试同时打开2个SSH隧道:

  • 一个用于客户机到服务器的通信

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

  • 一个用于服务器到客户端的通信

    PLINK -v -ssh -R 20:本地主机:60 [email protected]

但没有运气。我甚至不能肯定它是否是最好用远程转发或本地转发


我试过这个解决方案的dispy开发者自己建议,但并没有为我工作:

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

我上面使用的配置是否错误?我应该使用远程还是本地转发?为什么端口会自动更改,是否可能是因为我公司的防火墙通过我尝试使用的端口阻止连接?有没有人设法通过SSH隧道运行dispy?

回答

0

这对我有效。它应该为你工作:

  • SSH隧道(我使用PuTTY的plink.exe创建隧道):

砰砰-v -ssh -R 51347:本地主机:51347 [服务器上的用户名] @ [服务器的公网IP或域名] -pw [在服务器用户密码] -N

  • dispynode(在服务器上运行 - 的Linux):

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

试试这段代码..确保允许使用所需端口