【问题标题】:terminating a ssh connection created by Python pexpect spawn终止由 Python pexpect spawn 创建的 ssh 连接
【发布时间】:2020-06-30 00:02:07
【问题描述】:

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

关于如何终止这个 ssh 隧道进程的任何输入? 这是简短的代码sn-p。

    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))

【问题讨论】:

  • 是的 pynexj,确实如此。谢谢一堆。抱歉回复晚了

标签: python pexpect


【解决方案1】:

ssh -f 会派生一个在后台运行的子ssh 进程(如daemon),并且父进程将立即退出。

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

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

【讨论】: