Using dispy with port forwarding via ssh tunnel

点点圈 提交于 2019-12-13 02:39:39

问题


I have dispynode running on a remote server. I'm trying to open an SSH tunnel from my computer (client) and configure dispyJobCluster to use this tunnel. But it's not working. Am I not configuring this right ? Here's how I'm doing this :

( p.s . i don't have a deep knowledge in distributed & parallel computing nor networking, I'm a civil engineer so please excuse me if I don't use the right technical words sometimes)

SSH tunnel​ :

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

This will forward connections to port 61 to localhost:21 on the server where dispynode is running

dispynode :

sudo dispynode.py -d --ext_ip_addr localhost -p 21 -i localhost

will listen on port 21 and transmit using localhost which leads it though the tunnel back to the client

with this dispyClient JobCluster code :

cluster = dispy.JobCluster( runCasterDispyWorker,
                            nodes=[('localhost',61)], \
                            ip_addr='localhost', \
                            ext_ip_addr='localhost', \
                            port = 61, \
                            node_port = 21, \
                            recover_file='recover.rec', \
                            )

When I launch the dispy.py I get the following error in the command prompt from which I opened the SSH tunnel :

Opening connection to localhost:21 for forwarding from 127.0.0.1:64027
Forwarded port closed

At least I guess this means that dipsy is trying to access the opened SSH tunnel but I'm not sure what's happening server side. It seems that dispynode receives nothing. Running a quick traffic capture with TCPdump on the server confirms it. For some unknown reason, the port changes to 64027.


I have also tried to open 2 SSH tunnels simultaneously :

  • One for client-to-server communications

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

  • One for server-to-client communications

    plink -v -ssh -R 20:localhost:60 user@myserver.net

but with no luck. I'm not even sure whether it is best to use remote forwarding or local forwarding


I tried this solution that the developer of dispy himself suggested but it didn't work for me :

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

Is the configuration i used above wrong ? Should I use remote or local forwarding ? Why does the port change automatically, can it be because of my company's firewall blocking the connection through the ports i'm trying to use ? Has anyone managed to run dispy through an SSH tunnel before ?


回答1:


This worked for me. It should work for you :

  • SSH tunnel ( i'm using PuTTY's plink.exe to create the tunnel ):

plink -v -ssh -R 51347:localhost:51347 [username on server]@[server's Public IP or DomainName] -pw [USER PASSWORD on server] -N

  • dispynode (running on the server - 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))
    

Try this piece of code .. Make sure the required ports are allowed to be used



来源:https://stackoverflow.com/questions/33557194/using-dispy-with-port-forwarding-via-ssh-tunnel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!