2012-09-10 107 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) 
相關問題