Как закрыть SSH-туннель, открытый через Popen в Python - PullRequest
0 голосов
/ 09 июня 2011

Мне нужно создать туннель 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 Ответ

1 голос
/ 10 июня 2011

Часть проблемы заключается в том, что туннельный процесс является подпроцессом self.TunnelObj. Вы можете попытаться опустить флаг -f, чтобы напрямую удерживать процесс туннелирования.

Другой вариант - посмотреть на библиотеку paramiko и этот вопрос.

...