【问题标题】:Using dispy with port forwarding via ssh tunnel通过 ssh 隧道将 dispy 与端口转发一起使用
【发布时间】:2016-02-07 00:48:17
【问题描述】:

我在远程服务器上运行了 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

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


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

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

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

【问题讨论】:

    标签: ssh portforwarding ssh-tunnel dispy


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 2011-09-17
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      相关资源
      最近更新 更多