2016-02-29 20 views
0

我有一個要求,寫一個python腳本做一個ssh登錄從一個服務器到另一個。不幸的是,這些服務器沒有任何互聯網連接,我無法下載軟件包。 我已經寫了下面的代碼使用python子進程,但一旦執行ssh命令stdin.write劑量不輸入密碼。 我也試過p.communicate也無濟於事。 請不要使用paramiko或布料來幫助我在這個腳本上ssh。使用python(沒有paramiko和結構)的ssh

cmd = "ssh [email protected]" 
p = subprocess.Popen(cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, bufsize = 1,shell = True) 
p.stdin.write("Adm1Cmv4$") 
+0

你可以在另一臺計算機上下載'fabric'並將其安裝到你的服務器上嗎?我在工作中遇到同樣的問題,並以這種方式解決問題。 – kchomski

+0

我可以嘗試一下。我將如何在下載的文件上在Linux(紅帽)上安裝結構。謝謝 –

回答

2

我希望這不是您的問題真正的密碼!

ssh不會從stdin讀取密碼,所以使用p.communicate或各種寫入可悲不會奏效。

如果它總是這兩臺機器,你可以確保它們都有ssh身份,然後製作一個authorized_keys文件。如果創建與ssh-keygen一個SSH身份時沒有設置密碼,而且關鍵是在另一個用戶@主機的authorized_keys文件,那麼您會發現我們不使用密碼:

ssh-keygen -t rsa 
ssh-copy-id [email protected] 

如果沒有按ssh-copy-id」牛逼你的系統中存在,那麼你想放的$HOME/.ssh/id_rsa.pub內容到其他主機的$HOME/.ssh/authorized_keys文件(可以有多個條目)

還有ssh-askpass,如果是安裝在系統上。如果在沒有連接的終端的情況下運行ssh,則將SSH_ASKPASS環境變量設置爲腳本的名稱將運行該腳本以獲取要使用的密碼。因此,如果/path/to/myscript打印出mypassword,則當沒有終端可用時,export SSH_ASKPASS=/path/to/myscript將使用mypassword

這兩個選項都有他們的安全問題,所以它取決於你有的環境和你最擔心的。

+0

感謝您的回覆。可悲的是我沒有安裝SSH_ASKPASS。一旦啓動了ssh連接並輸入密碼,就會生成相應的日誌。這個日誌是我必須驗證的。因此輸入密碼是強制性的。而且IP也會因所使用的服務器而異。 –

+0

使用ssh身份信任的登錄仍會被記錄下來,如果這有任何用處的話。 –

相關問題