我需要通過使用Python的SSH與其他服務器連接,執行很少的命令並將每個命令的結果分配給不同的變量。
最簡單的方法是什麼?
我試過SSHController,但我認爲,我用提示搞砸了一些東西,腳本無休止地等待着它。
我會很感激任何例子。在python中使用SSH
回答
有許多方法可以在Python中使用SSH。一般的方法是:使用subprocess.Popen()或相似(僅適用於收集在批次的結果)
ssh
二進制
- 呼叫本地
ssh
二進制)過程控制機構(以自動化方式產卵和在終端會話與過程交互) - 使用Python模塊/庫,像Paramiko或Twisted conch,它實現SSH協議(直接在機Python,或通過提供綁定到一些底層共享庫... .so或DLL)。
SSHController處於這些大類中的第二類。我自己的不起眼的實用程序,classh是第一類。
您的問題表明您可能最好通過探索Paramiko來提供服務,因爲它聽起來像您想要根據遠程流程執行的結果設置本地變量狀態。我猜測你不希望有任何機會將任何類型的本地終端輸出或錯誤消息與遠程命令的結果相混淆。
換句話說,它聽起來像你想使用SSH作爲API而不是ssh
作爲命令工具。這是一個重要的區別。
ssh
命令嘗試像UNIX(以及類似的MS Windows等)環境一樣透明。 ssh
打開到遠程系統的連接,並創建遠程作業執行通信的多個通道。所以當地ssh
標準輸出將從遠程命令標準輸出和本地ssh
stderr的將和遠程的stderr的的混合物任何ssh
命令自身的錯誤消息(和其他的輸出,如您將通過將-v,--verbose選項添加到您的調用中看到的調試信息)。同樣,ssh
命令的退出狀態通常會反映遠程shell的退出狀態。但它也可能是本地進程自己的退出代碼,從本地錯誤---在我的經驗中,它似乎始終是值255.我知道你無法區分遠程命令的退出值255與本地進程的「異常結束」(異常進程結束) - 我懷疑沒有任何可移植的標準方式來執行此操作)。
我的問題在於,在代碼中使用ssh
命令將必然會阻止您將輸出與本地進程(ssh
二進制文件本身,也可能取決於您如何執行本地進程)分離, shell)以及那些從遠程進程(也可能是運行預期的遠程進程的shell)發出的進程。ssh
不是API。另一方面,如果您使用類似Paramiko的東西,那麼您將通過SSH協議建立一個會話,您可以使用並重新使用來執行命令,傳輸文件,執行一些其他文件系統功能以及創建隧道。
在這種情況下,您將創建一個SSHClient
實例,併爲在遠程主機上執行的每個命令調用它的.exec_command()
方法。這在概念上類似於進行本地函數調用......如果由於某種原因無法執行該命令,它將引發異常......並且您從標準輸出或stderr得到的任何結果不能與可能從任何中間進程(例如ssh
二進制文件......在這種情況下根本不執行)輸出。
這就是爲什麼我推薦這種方法。這聽起來像是你想要在每個遠程目標上執行幾個單獨的命令,以避免在一次調用ssh
實用程序中運行它們所帶來的可能的複雜性,並且沒有複雜性和多次調用ssh
的性能開銷。這聽起來像你的代碼會更簡單和更健壯,如果你可以建立一個會話並將其用作API。
- 1. Python SSH使用Popen
- 2. 無法使用scp通過ssh在Python
- 3. 使用ssh,scp或sftp在jenkins管道中使用ssh憑證
- 4. 使用python獲取錯誤,而ssh使用python
- 5. 使用openssl(python)在ssl中包裝ssh隧道幾乎完成
- 6. 在python中使用ssh從遠程服務器運行腳本
- 7. 如何在python中使用ssh遠程執行腳本?
- 8. 在使用pxssh進行SSH時使用python代碼時出錯
- 9. 如何使用python建立ssh連接?
- 10. 如何使用python打開SSH隧道?
- 11. 使用Python連接到MySQL通過SSH
- 12. 使用Python的ssh restrict命令
- 13. 使用python socket的ssh客戶端
- 14. 純python ssh
- 15. SFTP與SSH ProxyCommand在python
- 16. 在ssh中運行Python Selenium webdriver
- 17. exec sudo在python中的ssh命令
- 18. 在ssh目錄中打印一切python
- 19. 以Python腳本在SSH中連接
- 20. 在使用python的aws上添加ssh用戶
- 21. 在C++中使用SSH隧道到MySQL
- 22. 在makefile中使用ssh和rsync
- 23. 如何在PhpStorm中使用ssh?
- 24. 在java中使用ssh的僞終端
- 25. 如何在Laravel中使用ssh連接?
- 26. 如何在Jenkins管道中使用SSH?
- 27. 在SL4A上使用SSH
- 28. 在Node.js上使用SSH
- 29. 使用ssh
我得到paramiko的問題,我得到folowing錯誤:從Crypto.Hash進口SHA256 ImportError:無法導入名稱SHA256。我該如何解決它?我沒有權利安裝的東西,只是將文件複製到我的家庭文件夾。 – Djent
@Djent:你可能可以建立一個虛擬環境(在「Python virtualenv」上搜索更多信息)。這可能有點複雜,但它將成爲您爲每個項目配置自己版本的Python和依賴關係的一種方式。 –