使用Python進行SSH和文件傳輸實現(xiàn)方法實例
引言
SSH 通常用于訪問遠程機器并運行命令、檢索文件或上傳文件。你可以使用 SFTP(安全文件傳輸協(xié)議)和 SCP(安全復制協(xié)議)將文件從遠程機器傳輸?shù)奖镜兀粗嗳弧?/p>
根據(jù) paramiko.org 的介紹,python paramiko 模型提供了 SSHv2 協(xié)議的抽象,包括客戶端和服務器端功能。作為客戶端,您可以使用密碼或密鑰進行身份驗證;作為服務器,您可以決定允許哪些用戶訪問以及允許訪問的通道。
在本文中,我將重點介紹客戶端。
使用Python進行SSH和文件傳輸
Paramiko.SSHClient 是 API 中記錄的 Paramiko 的主要客戶端,可用于與遠程服務器建立連接并傳輸文件。
建立連接
import paramiko ssh_client=paramiko.SSHClient() ssh_client.connect(hostname='hostname',username='admin',password='password')
當你首次連接的時候,可能會遇到以下問題:
missing_host_key raise SSHException('Server %r not found in known_hosts' % hostname) paramiko.ssh_exception.SSHException: Server 'hostname' not found in known_hosts之所以會出現(xiàn)這個錯誤,是因為你沒有告知你的機器,你 "信任 "你試圖訪問的遠程服務器。如果您在命令行或終端上首次嘗試連接服務器,您會收到類似下面的信息:
The authenticity of host 'hostname' can't be established.RSA key fingerprint is 'key'. Are you sure you want to continue connecting (yes/no)?
當您在這里選擇 "yes" 時,您就會讓您的機器知道它可以信任該機器,您現(xiàn)在就可以訪問它而無需提示,直到該機器的密鑰發(fā)生變化。同樣,Paramiko 還要求您驗證對機器的信任。這種驗證是通過調(diào)用 SSHClient 上的 set_missing_host_key_policy(),并在訪問新的遠程機器時傳遞你希望執(zhí)行的策略來完成的。默認情況下,paramiko.SSHclient 會將策略設置為 RejectPolicy。如上文所述,該策略無需驗證就會拒絕連接。不過,Paramiko 提供了一種 "信任所有 "密鑰策略(AutoAddPolicy)。將 AutoAddPolicy 實例解析為 set_missing_host_key_policy(),可將其改為允許任何主機。
現(xiàn)在再運行代碼就不會報錯了。
在遠程計算機上運行命令
要運行命令,需要在 SSHClient 上調(diào)用 exec_command,并傳遞命令。響應將以元組(stdin, stdout, stderr)形式返回。
例如,列出一個目錄中的所有文件:
stdin, stdout, stderr = ssh_client.exec_command("ls")根據(jù) paramiko.org 的解釋:
• stdin 是只寫文件,可用于需要輸入的命令;
• stdout 文件提供命令的輸出結(jié)果;
• stderr 文件給出執(zhí)行命令時返回的錯誤。如果沒有錯誤,則為空。
需要輸入的命令
有時,您需要提供密碼或額外的輸入信息才能運行命令。這就是 stdin 的用途。讓我們用 sudo 運行上面的命令。
stdin, stdout, stderr = ssh.exec_command("sudo ls")
stdin.write('mypassword\n')
print(stdout.readlines())這樣就通過輸入密碼來執(zhí)行了 ls 命令。
文件傳輸
文件傳輸由 paramiko.SFTPClient 處理,您可以在 Paramiko.SSHClient 實例上調(diào)用 open_sftp(),獲得該客戶端。
從遠程機器下載文件
ftp_client=ssh_client.open_sftp()
ftp_client.get('remotefileth','localfilepath')
ftp_client.close()從本地向遠程機器上傳文件
ftp_client=ssh.open_sftp()
ftp_client.put('localfilepath', 'remotefilepath')
ftp_client.close()如果你也在工作活學習中需要用 Python 操作使用 SSH,不妨試試 paramiko,會為你帶來效率上的提高。
以上就是使用Python進行SSH和文件傳輸實現(xiàn)方法實例的詳細內(nèi)容,更多關于Python SSH文件傳輸?shù)馁Y料請關注腳本之家其它相關文章!
相關文章
構(gòu)建?Python?命令行參數(shù)的?4?種常見方式
這篇文章主要介紹了構(gòu)建?Python?命令行參數(shù)的?4?種常見方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06
使用Python和PySpark進行數(shù)據(jù)分析的實戰(zhàn)教程
數(shù)據(jù)分析是當今信息時代中至關重要的技能之一,Python和PySpark作為強大的工具,提供了豐富的庫和功能,使得數(shù)據(jù)分析變得更加高效和靈活,在這篇文章中,我們將深入探討如何使用Python和PySpark進行數(shù)據(jù)分析,需要的朋友可以參考下2024-01-01
Pandas數(shù)據(jù)分析之pandas文本處理
這篇文章主要介紹了Pandas數(shù)據(jù)分析之pandas文本處理,pandas對文本數(shù)據(jù)也有很多便捷處理方法,可以不用寫循環(huán),向量化操作運算速度快,還可以進行高級的正則表達式,各種復雜的邏輯篩選和匹配提取信息2022-08-08
Python使用functools.partial減少函數(shù)參數(shù)個數(shù)的高級技巧
減少函數(shù)參數(shù)個數(shù)不僅能使代碼更加??簡潔易讀??,還能提高代碼的??可復用性??和??可維護性??,本文將深入探討如何使用functools.partial及其相關技術來簡化函數(shù)調(diào)用接口,需要的可以了解下2025-10-10

