2017-08-31 47 views
0

我需要計算遠程計算機中目錄中文件的數量。我需要ssh到那臺機器並執行目錄計數操作(-lR | grep^d | wc -l)。這需要在shell腳本中完成。如何ssh到遠程計算機並在shell腳本中執行文件計數並返回結果

我還需要通過傳遞一個變量來在shell腳本中調用這個shell腳本,並將結果返回給python程序。

涉及的組件:

  1. Python程序調用shell腳本(傳遞變量)

  2. 執行ssh來遠程計算機並執行目錄計數

  3. 結果返回到我原來的python program

+2

SO不是免費的編碼服務。你必須嘗試自己解決問題。如果無法正常工作,請發佈您嘗試的內容,我們會幫助您解決問題。嘗試分別處理每個組件,然後將它們放在一起。 – Barmar

回答

2

您可以使用subprocess.run函數執行SSH命令。 subprocess.run("ssh [email protected] 'grep ^d'"),但它涉及到傳遞密碼變得棘手。所以你有幾個選擇。

選項A: 使用SSH密鑰。 subprocess.run("ssh [email protected] -i /path/to/priv_key 'grep ^d'")。或者更好的是,add the SSH key to your SSH config file所以你可以簡單地做ssh some_identifier 'grep^d'。缺點是這種方法只適用於你的電腦。

選項B: 在Windows上,安裝Putty,並使用-pw開關傳遞密碼。 subprocess.run("putty -ssh [email protected] -pw your_password 'grep ^d'") 在Linux/Mac上,使用sshpasssubprocess.run("sshpass --password 'your_password' ssh -oStrictHostKeyChecking=no [email protected] 'grep -d'") 缺點是Windows用戶將不得不安裝Putty,並且由於您傳遞的是密碼而不是SSH密鑰,因此安全性會降低。

選項C: 使用Python庫Paramiko。有關如何執行此操作的信息,請參閱他們的文檔,但是,我發現他們的庫不是最直觀的。尤其是當涉及在stdin,stdout和stderr上傳遞和查看數據時。您還引入了第三方依賴項。 Paramiko可以使用密碼或SSH密鑰。

選項D: 如果尚未完成SSH腳本的創建和複製,您的腳本將處理該腳本。系統會提示用戶輸入一次SSH密碼,之後您可以使用選項A進行所有進一步通信。我從來沒有這樣做過,但它可以工作。缺點是將這個解決方案放在一起需要花費時間。

相關問題