我正在编写一个小脚本,可以从几十个中选择最好的机器来连接。它获取用户名和密码,然后选择最好的机器并获取主机名。现在所有脚本都打印主机名。我想要的是脚本找到一台好的机器,并用用户提供的凭据打开它的ssh连接。
所以我的问题是如何让脚本在退出时打开连接,这样当用户运行脚本时,它以一个打开的ssh连接结束。
我正在使用sshpass。
答案 0 :(得分:1)
您可以使用os.exec *函数将python进程替换为被调用者:
import os
os.execl("/usr/bin/ssh", "user@host", ...)
答案 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在连接关闭时退出。