2015-07-22 58 views
0

我有許多測試服務器。這些測試服務器會經常重新映像,並且在重新映像後具有相同的用戶帳戶和密碼。我想編寫一個python腳本,通過這些服務器上的ssh遠程運行命令,而不會提示用戶輸入密碼,並收集命令的輸出。在某些情況下,我想運行一個命令,獲取輸出,分析輸出。在其他情況下,我想一次運行幾個命令(可能運行一個腳本文件)。我使用第三方軟件包(例如paramiko)遠程閱讀了許多有關運行命令的帖子。有沒有推薦的方式來實現這個任務,而不使用額外的軟件包?運行腳本的服務器可能沒有安裝該軟件包。通過ssh遠程運行通訊的選項

或者我應該使用pexpect

理想情況下,我想使用subprocess並捕獲輸出(提供密碼作爲參數)。當然,我的腳本必須處理客戶端首次登錄時的情況,並提示將ssh密鑰添加到.ssh/knownhosts文件中。

謝謝 艾哈邁德。

+0

我認爲使用命令行工具dsh是你想要的 – muddyfish

+0

這是一個有點意見的基礎。我嘗試了'paramiko',這是一個很好的Python的ssh支持。但是,它確實很慢(我的情況與你的情況相同,在40個不同的帳戶或服務器上運行的命令類似於100個命令)。 Paramiko真的很容易安裝(它只需要'python-dev'包)。沒有嘗試pexpect。 – FunkySayu

+0

當我創建我的程序時,我沒有找到任何好的方法來運行ssh命令而沒有任何額外的庫(除了通過使用'subprocess'對** ssh'命令進行系統調用,**這不是解決方案** )。 – FunkySayu

回答

0

如果主機密鑰安全性不是問題(您位於可信網絡等),則可以繞過主機檢查。如果您使用基於密鑰的認證沒有必要爲一個密碼提示:

ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oPasswordAuthentication=no \ 
    -n [email protected] some_cmd 

這樣,如果你執行some_cmd本地你可以只使用subprocess

+0

我認爲您建議的選項有助於避免回答「您確定要繼續連接(是/否)?」這個問題嗎?「但是,仍然需要密碼。建議的選項,我得到以下錯誤消息:權限被拒絕(公鑰,密碼)。 –

+0

您需要在目標機器的'〜/ .ssh/authorized_keys'中擁有您的公鑰('〜/ .ssh/id_dsa.pub')。 – Krumelur

+0

我瞭解你提出的解決方案。但是這些測試系統是我無法控制的,也無權告訴服務器的管理員在全新安裝完成時安裝這些密鑰。因此,我的帖子徵求了我的方法的想法。謝謝你。 –