如何在python中关闭通过Popen打开的ssh隧道

时间:2011-06-09 19:56:08

标签: python popen ssh-tunnel

我需要创建一个ssh隧道,然后做一些事情,然后拆掉隧道。

我一直试图这样做:

def runCmd(self,cmd):
    args = shlex.split(cmd)
    return subprocess.Popen(args)

def openTunnel
    cmd = 'ssh -f -N -L 1313:localhost:1313 userid@server.com'
    self.TunnelObj = self.runCmd(cmd)

这创造了我的隧道。 然后我可以做我需要做的事情。现在我想拆掉隧道。

    def closeSocket(self):
        print '\nClosing Tunnel\n'
        if self.TunnelObj.returncode == None: 
            print '\nabout to kill\n'
            self.TunnelObj.kill()

但隧道仍然开放。 ssh会话仍然存在,并且仍然分配了端口。

如何关闭此隧道?

1 个答案:

答案 0 :(得分:1)

部分问题是隧道进程是self.TunnelObj的子进程。您可以尝试省略-f标志,以便直接保存隧道进程。

另一种选择是查看paramiko库和this问题。