使用通过ssh隧道进行端口转发的缺陷
我在远程服务器上运行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?
这对我有效。它应该为你工作:
- 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))
试试这段代码..确保允许使用所需端口