1

有一种方法可以使用 ssh-keygen 连接远程计算机而无需密码。(有关更多信息,请查看

在我的问题中,有两台计算机(假设计算机 A 和 B)并且计算机 A 可以在没有 ssh 密码的情况下连接计算机 B。当计算机B的IP地址发生变化时(但我不知道新IP是否真的属于它。),我正在编辑known_host文件,用新IP替换旧IP。如果新的ip确实属于B机,A机可以不用密码继续连接,所以没有问题。但是如果新 ip 不属于计算机 B,则 ssh 会询问密码以连接计算机 B。

由于上述所有进度都是由 python 代码执行的,SSH 正在等待密码,如果我尝试连接计算机 B,我的程序将停止运行。我要做的是检查 ssh 是否在不输入密码的情况下询问密码。

是否有任何 ssh 选项或任何其他方式可以做到这一点?

4

2 回答 2

2

您可以使用 python pexpect模块执行此操作。

例子:

import pexpect

ssh_new_key = "Are you sure you want to continue connecting"

cmd_connect = "ssh -p22 %s@%s" % (account_name, host)

try:

    p = pexpect.spawn(cmd_connect)

    i = p.expect([ssh_new_key, 'asswor'])

    if i == 0:
        p.send('yes\r')
        i = p.expect([ssh_newkey, 'assword:'])

    if i == 1:
        p.send(account_pwd)

except Exception, exp:  
    print = "Could not connect to %s with account %s" % (host, account_name)
于 2013-03-07T10:13:36.543 回答
1

阅读 ssh 手册页后,我发现了PasswordAuthentication选项。它是这样使用的

import commands
ret,out = commands.getstatusoutput("ssh -n -o PasswordAuthentication=no "+username+"@"+ip)
if ret == 0:
   #success
else:
   #fail

如果连接需要密码,则返回失败。

于 2012-09-10T09:22:12.257 回答