终止Python pexpect spawn创建的ssh连接

时间:2017-09-28 19:33:06

标签: python pexpect

我使用python pexpect.spawn()命令创建了一个SSH隧道。我想在处理后关闭或终止此ssh连接。我尝试过提供<sshtunnel>.close() / <sshtunnel>.kill() / <sshtunnel>.terminate()命令。即使在给出<sshtunnel>.isalive()方法时,我得到一个值False,意味着子进程已经关闭,我仍然看到ssh隧道进程在我的linux ubuntu机器上运行。

有关如何终止此ssh隧道进程的任何输入? 这是简短的代码段。

    username="username"
    passwd="password"
    try:
        child=pexpect.spawn("ssh -C2qTnNf -D XXXX xxxx@qualifier1.qualifier2.net")
        i=child.expect('password:')
        print(i)
        if i==0:
            print(passwd)
            time.sleep (0.5)
            child.sendline(passwd)
            child.expect('$')
            time.sleep(2) 
            print(child)
            print(child.isalive())
            print('####')
            child.close(force=True)
           #child.terminate(force=True)
            time.sleep(5)
            print(child.isalive())
            print(child)
    except Exception as e:
        print(str(e))

1 个答案:

答案 0 :(得分:1)

ssh -f会分叉在后台运行的子ssh进程(如daemon),父进程会立即退出。

对于pexpect.spawn('ssh -f ...'),pexpect只能与parrent ssh进程交互,因此无法停止后台 tunnel ssh进程。

要终止隧道ssh进程,您需要找到其PID并执行os.system('kill ...')os.kill(pid, sig)之类的操作。