我使用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))
答案 0 :(得分:1)
ssh -f
会分叉在后台运行的子ssh
进程(如daemon),父进程会立即退出。
对于pexpect.spawn('ssh -f ...')
,pexpect只能与parrent ssh进程交互,因此无法停止后台 tunnel ssh进程。
要终止隧道ssh进程,您需要找到其PID并执行os.system('kill ...')
或os.kill(pid, sig)
之类的操作。