退出时打开 SSH 连接 Python
Open SSH connection on exit Python
我正在编写一个小脚本,它可以从几十台机器中挑选出最好的一台来连接。它获取用户名和密码,然后选择最好的机器并获取主机名。现在脚本所做的只是打印主机名。我想要的是让脚本找到一台好的机器,并使用用户提供的凭据打开一个到它的 ssh 连接。
所以我的问题是如何让脚本在退出时打开连接,以便当用户运行脚本时,它以打开的 ssh 连接结束。
我正在使用 sshpass。
有点老套,但有效:
#!/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 连接消失时,进程就结束了。
如果您希望 python 脚本退出,我认为您最好的选择是继续做与您正在做的事情类似的事情;以 ssh
命令和 运行 python myscript.py | xargs ssh
的参数形式打印凭据。但是,正如 tdelaney 指出的那样,subprocess.call(['ssh', args])
会让您 运行 ssh shell 作为 python 进程的子进程,导致 python 在连接时退出已关闭。
可以使用os.exec*函数将Python进程替换为被调用者:
import os
os.execl("/usr/bin/ssh", "user@host", ...)
我正在编写一个小脚本,它可以从几十台机器中挑选出最好的一台来连接。它获取用户名和密码,然后选择最好的机器并获取主机名。现在脚本所做的只是打印主机名。我想要的是让脚本找到一台好的机器,并使用用户提供的凭据打开一个到它的 ssh 连接。
所以我的问题是如何让脚本在退出时打开连接,以便当用户运行脚本时,它以打开的 ssh 连接结束。
我正在使用 sshpass。
有点老套,但有效:
#!/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 连接消失时,进程就结束了。
如果您希望 python 脚本退出,我认为您最好的选择是继续做与您正在做的事情类似的事情;以 ssh
命令和 运行 python myscript.py | xargs ssh
的参数形式打印凭据。但是,正如 tdelaney 指出的那样,subprocess.call(['ssh', args])
会让您 运行 ssh shell 作为 python 进程的子进程,导致 python 在连接时退出已关闭。
可以使用os.exec*函数将Python进程替换为被调用者:
import os
os.execl("/usr/bin/ssh", "user@host", ...)