1

我需要创建一个 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 会话仍然存在,并且端口仍然被分配。

我怎样才能关闭这个隧道?

4

1 回答 1

2

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

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

于 2011-06-09T21:38:25.340 回答