查找使用子进程遍历主机时是否要求输入密码

时间:2018-08-09 08:56:02

标签: python ssh subprocess

我正在遍历许多主机(大约400台)以从系统中获取一些信息。他们中的大多数都有ssh键,所以在那里没有问题。只有极少数没有ssh密钥,并且会返回密码。现在,我想检测何时要求输入密码,终止ssh进程并继续到下一个主机。

这是ssh部分的代码

def get_os_info(hostname, command, user=None):
remote = "%s" % hostname if user is None else "%s@%s" %(user, hostname)
ssh = subprocess.Popen(["ssh", remote, command],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
    return None
else:
    return result

我无法使用paramiko。

1 个答案:

答案 0 :(得分:0)

而不是尝试尝试检测密码,而是避免提示输入密码,而是查看批处理模式(使用Open SSH):

ssh -oBatchMode=yes

这是为了防止从脚本调用时提示输入密码。现在,您只需要检测是否已连接。

(尽管,正如您在底部的评论所暗示的那样,使用paramiko可能在技术上是更好的解决方案)