通过 ssh 隧道使用带有端口转发的 dispy
Using dispy with port forwarding via ssh tunnel
我在远程服务器上安装了 dispynode 运行ning。我正在尝试从我的计算机(客户端)打开 SSH 隧道并配置 dispyJobCluster 以使用此隧道。但它不起作用。我没有正确配置吗?我是这样做的:
( p.s . 我对分布式和并行计算或网络没有深入的了解,我是一名土木工程师,所以如果我不使用有时正确的技术用语)
SSH隧道 :
plink -v -ssh -L 61:localhost:21 user@myserver.net
这会将端口 61 的连接转发到服务器上的 localhost:21,其中 dispynode 是 运行ning
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 隧道的命令提示符中收到以下错误:
Opening connection to localhost:21 for forwarding from 127.0.0.1:64027
Forwarded port closed
至少我猜这意味着 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 隧道(我正在使用 PuTTY 的 plink.exe 创建隧道):
plink -v -ssh -R 51347:localhost:51347 [username on server]@[server's Public IP or DomainName] -pw [USER PASSWORD on server] -N
- dispynode(服务器上的运行 - linux):
sudo dispynode.py -d --ext_ip_addr [public IP or domain name of server]
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))
尝试这段代码..确保允许使用所需的端口
我在远程服务器上安装了 dispynode 运行ning。我正在尝试从我的计算机(客户端)打开 SSH 隧道并配置 dispyJobCluster 以使用此隧道。但它不起作用。我没有正确配置吗?我是这样做的:
( p.s . 我对分布式和并行计算或网络没有深入的了解,我是一名土木工程师,所以如果我不使用有时正确的技术用语)
SSH隧道 :
plink -v -ssh -L 61:localhost:21 user@myserver.net
这会将端口 61 的连接转发到服务器上的 localhost:21,其中 dispynode 是 运行ning
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 隧道的命令提示符中收到以下错误:
Opening connection to localhost:21 for forwarding from 127.0.0.1:64027
Forwarded port closed
至少我猜这意味着 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 隧道(我正在使用 PuTTY 的 plink.exe 创建隧道):
plink -v -ssh -R 51347:localhost:51347 [username on server]@[server's Public IP or DomainName] -pw [USER PASSWORD on server] -N
- dispynode(服务器上的运行 - linux):
sudo dispynode.py -d --ext_ip_addr [public IP or domain name of server]
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))
尝试这段代码..确保允许使用所需的端口