终止由 Python pexpect spawn 创建的 ssh 连接

terminating a ssh connection created by Python pexpect spawn

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

关于如何终止此 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))

ssh -f 会在后台派生一个子 ssh 进程 运行(类似于 daemon),父进程会立即退出。

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

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

的操作