2011-06-09 129 views
0

我需要创建一个ssh隧道,然后执行某些操作,然后撕下隧道。如何关闭通过python打开Popen的ssh隧道

我一直在试图做这样的:

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

def openTunnel 
    cmd = 'ssh -f -N -L 1313:localhost:1313 [email protected]' 
    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

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

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

+0

这正是我的问题。 -f(将隧道发送到后台)使python不能杀死进程。 – 2011-06-10 11:42:36