退出Python时打开SSH连接

时间:2015-03-10 18:17:39

标签: python ssh

我正在编写一个小脚本,可以从几十个中选择最好的机器来连接。它获取用户名和密码,然后选择最好的机器并获取主机名。现在所有脚本都打印主机名。我想要的是脚本找到一台好的机器,并用用户提供的凭据打开它的ssh连接。

所以我的问题是如何让脚本在退出时打开连接,这样当用户运行脚本时,它以一个打开的ssh连接结束。

我正在使用sshpass。

3 个答案:

答案 0 :(得分:1)

您可以使用os.exec *函数将python进程替换为被调用者:

import os
os.execl("/usr/bin/ssh", "user@host", ...)

https://docs.python.org/2/library/os.html#os.execl

答案 1 :(得分:0)

有点hackish,但有效:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import subprocess

username = input('username: ')

cmd = ['ssh', '-oStrictHostKeyChecking=no', '%s@server.net' % username,]
subprocess.call(cmd)

在这个例子中,我没有使用sshpass,但sshpass的想法与使用ssh相同。使用subprocess.call来调用ssh部分。

编辑: 现在我意识到你想先退出python进程。在我的回答中,当ssh连接消失时,进程终止。

答案 2 :(得分:0)

如果你想让python脚本退出,我认为你最好的选择就是继续做你正在做的事情;以ssh命令的参数形式打印凭证并运行python myscript.py | xargs ssh。正如tdelaney指出的那样,subprocess.call(['ssh', args])将允许你作为python进程的子进程运行ssh shell,导致python在连接关闭时退出。