我在远程服务器上运行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?
答案 0 :(得分:0)
这对我有用。它应该适合你:
plink -v -ssh -R 51347:localhost:51347 [服务器上的用户名] @ [服务器的公共IP或域名] -pw [服务器上的用户密码] -N - / p>
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))
尝试这段代码。确保允许使用所需的端口