2012-09-10 71 views
1

有,我们可以通过使用ssh-keygen连接远程计算机没有密码的方式。(更多信息看this如何检查ssh是否在python中输入密码?

在我的问题,有两台电脑(假设计算机A和B)和计算机A可以连接计算机B而不使用ssh密码。当计算机B的IP地址发生变化时(但我不知道新的IP是否属于它),我正在编辑known_host文件以替换旧的IP。如果新的IP实际上属于计算机B,则计算机A可以继续无需密码连接,因此没有问题。但是,如果新的ip不属于计算机B,ssh要求密码来连接计算机B.

由于上述所有进程均由python代码执行,因此SSH正在等待密码,如果我尝试连接计算机,则程序将停止运行B.我想要做的是检查ssh是否输入密码而不输入密码。

是否有任何SSH期权或任何其他方式做到这一点?

+1

使用的paramiko而不是通过'commands'调用SSH(已在任何情况下被废弃多年...) – geoffspear

回答

1

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

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

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

2

您可以使用Python pexpect模块做到这一点。

例子:

import pexpect 

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

cmd_connect = "ssh -p22 %[email protected]%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) 
相关问题