通过ssh隧道使用dispy和端口转发

时间:2015-11-06 00:08:13

标签: ssh portforwarding ssh-tunnel dispy

我在远程服务器上运行dispynode。我试图从我的计算机(客户端)打开SSH隧道,并配置dispyJobCluster以使用此隧道。但它不起作用。我没有正确配置吗?以下是我如何做到这一点:

(ps。我不具备分布式和并行计算以及网络方面的深厚知识,我是土木工程师,所以如果我没有使用正确的技术,请原谅我有时单词

SSH隧道:

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

这会将端口61的连接转发到运行 dispynode 的服务器上的localhost:21

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隧道,但我不确定服务器端发生了什么。似乎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

但没有运气。我甚至不确定最好是使用远程转发还是本地转发

我尝试了这个解决方案,开发人员自己建议但是它对我不起作用:

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

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

1 个答案:

答案 0 :(得分:0)

这对我有用。它应该适合你:

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

plink -v -ssh -R 51347:localhost:51347 [服务器上的用户名] @ [服务器的公共IP或域名] -pw [服务器上的用户密码] -N - / p>

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

尝试这段代码。确保允许使用所需的端口