使用Python進(jìn)行SSH和文件傳輸實(shí)現(xiàn)方法實(shí)例
引言
SSH 通常用于訪問(wèn)遠(yuǎn)程機(jī)器并運(yùn)行命令、檢索文件或上傳文件。你可以使用 SFTP(安全文件傳輸協(xié)議)和 SCP(安全復(fù)制協(xié)議)將文件從遠(yuǎn)程機(jī)器傳輸?shù)奖镜兀粗嗳弧?/p>
根據(jù) paramiko.org 的介紹,python paramiko 模型提供了 SSHv2 協(xié)議的抽象,包括客戶端和服務(wù)器端功能。作為客戶端,您可以使用密碼或密鑰進(jìn)行身份驗(yàn)證;作為服務(wù)器,您可以決定允許哪些用戶訪問(wèn)以及允許訪問(wèn)的通道。
在本文中,我將重點(diǎn)介紹客戶端。
使用Python進(jìn)行SSH和文件傳輸
Paramiko.SSHClient 是 API 中記錄的 Paramiko 的主要客戶端,可用于與遠(yuǎn)程服務(wù)器建立連接并傳輸文件。
建立連接
import paramiko ssh_client=paramiko.SSHClient() ssh_client.connect(hostname='hostname',username='admin',password='password')
當(dāng)你首次連接的時(shí)候,可能會(huì)遇到以下問(wèn)題:
missing_host_key raise SSHException('Server %r not found in known_hosts' % hostname) paramiko.ssh_exception.SSHException: Server 'hostname' not found in known_hosts之所以會(huì)出現(xiàn)這個(gè)錯(cuò)誤,是因?yàn)槟銢](méi)有告知你的機(jī)器,你 "信任 "你試圖訪問(wèn)的遠(yuǎn)程服務(wù)器。如果您在命令行或終端上首次嘗試連接服務(wù)器,您會(huì)收到類(lèi)似下面的信息:
The authenticity of host 'hostname' can't be established.RSA key fingerprint is 'key'. Are you sure you want to continue connecting (yes/no)?
當(dāng)您在這里選擇 "yes" 時(shí),您就會(huì)讓您的機(jī)器知道它可以信任該機(jī)器,您現(xiàn)在就可以訪問(wèn)它而無(wú)需提示,直到該機(jī)器的密鑰發(fā)生變化。同樣,Paramiko 還要求您驗(yàn)證對(duì)機(jī)器的信任。這種驗(yàn)證是通過(guò)調(diào)用 SSHClient 上的 set_missing_host_key_policy(),并在訪問(wèn)新的遠(yuǎn)程機(jī)器時(shí)傳遞你希望執(zhí)行的策略來(lái)完成的。默認(rèn)情況下,paramiko.SSHclient 會(huì)將策略設(shè)置為 RejectPolicy。如上文所述,該策略無(wú)需驗(yàn)證就會(huì)拒絕連接。不過(guò),Paramiko 提供了一種 "信任所有 "密鑰策略(AutoAddPolicy)。將 AutoAddPolicy 實(shí)例解析為 set_missing_host_key_policy(),可將其改為允許任何主機(jī)。
現(xiàn)在再運(yùn)行代碼就不會(huì)報(bào)錯(cuò)了。
在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行命令
要運(yùn)行命令,需要在 SSHClient 上調(diào)用 exec_command,并傳遞命令。響應(yīng)將以元組(stdin, stdout, stderr)形式返回。
例如,列出一個(gè)目錄中的所有文件:
stdin, stdout, stderr = ssh_client.exec_command("ls")根據(jù) paramiko.org 的解釋?zhuān)?/p>
• stdin 是只寫(xiě)文件,可用于需要輸入的命令;
• stdout 文件提供命令的輸出結(jié)果;
• stderr 文件給出執(zhí)行命令時(shí)返回的錯(cuò)誤。如果沒(méi)有錯(cuò)誤,則為空。
需要輸入的命令
有時(shí),您需要提供密碼或額外的輸入信息才能運(yùn)行命令。這就是 stdin 的用途。讓我們用 sudo 運(yùn)行上面的命令。
stdin, stdout, stderr = ssh.exec_command("sudo ls")
stdin.write('mypassword\n')
print(stdout.readlines())這樣就通過(guò)輸入密碼來(lái)執(zhí)行了 ls 命令。
文件傳輸
文件傳輸由 paramiko.SFTPClient 處理,您可以在 Paramiko.SSHClient 實(shí)例上調(diào)用 open_sftp(),獲得該客戶端。
從遠(yuǎn)程機(jī)器下載文件
ftp_client=ssh_client.open_sftp()
ftp_client.get('remotefileth','localfilepath')
ftp_client.close()從本地向遠(yuǎn)程機(jī)器上傳文件
ftp_client=ssh.open_sftp()
ftp_client.put('localfilepath', 'remotefilepath')
ftp_client.close()如果你也在工作活學(xué)習(xí)中需要用 Python 操作使用 SSH,不妨試試 paramiko,會(huì)為你帶來(lái)效率上的提高。
以上就是使用Python進(jìn)行SSH和文件傳輸實(shí)現(xiàn)方法實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Python SSH文件傳輸?shù)馁Y料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?os.environ實(shí)戰(zhàn)應(yīng)用及技巧總結(jié)
這篇文章主要介紹了Python?os.environ實(shí)戰(zhàn)應(yīng)用及技巧的相關(guān)資料,os.environ是Python中管理環(huán)境變量的強(qiáng)大工具,提供了對(duì)系統(tǒng)環(huán)境變量的訪問(wèn)和修改能力,需要的朋友可以參考下2025-03-03
Python中ROS和OpenCV結(jié)合處理圖像問(wèn)題
ROS通過(guò)一個(gè)叫CvBridge的功能包,將獲取的圖像數(shù)據(jù)轉(zhuǎn)換成OpenCV的格式,OpenCV處理之后,傳回給ROS進(jìn)行圖像顯示(應(yīng)用),這篇文章主要介紹了Python中ROS和OpenCV結(jié)合處理圖像問(wèn)題,需要的朋友可以參考下2022-06-06
Python如何實(shí)現(xiàn)動(dòng)態(tài)數(shù)組
這篇文章主要介紹了Python如何實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
一步步教你用Python實(shí)現(xiàn)2048小游戲
相信2048這個(gè)游戲?qū)Υ蠹襾?lái)說(shuō)一定不陌生,下面這篇文章就主要給大家介紹了怎么用Python實(shí)現(xiàn)2048小游戲,文中通過(guò)注釋與示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們一起來(lái)看看吧。2017-01-01
Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示詳解
這篇文章主要介紹了Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示,結(jié)合實(shí)例形式分析了Python GUI編程中tkinter界面布局顯示的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03
pycharm-professional-2020.1下載與激活的教程
這篇文章主要介紹了pycharm-professional-2020.1下載與激活的教程,本文分為安裝和永久激活兩部分內(nèi)容,需要的朋友可以參考下2020-09-09
PyQt5+Caffe+Opencv搭建人臉識(shí)別登錄界面
這篇文章主要為大家詳細(xì)介紹了PyQt5+Caffe+Opencv搭建人臉識(shí)別登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
使用python實(shí)現(xiàn)群發(fā)微信消息的工具
如果您想批量向微信好友發(fā)送相同的內(nèi)容,手動(dòng)一個(gè)個(gè)操作非常費(fèi)時(shí)費(fèi)力,這時(shí)候可以用Python實(shí)現(xiàn)自動(dòng)化處理,更加高效方便,下面小編就來(lái)和大家講講具體操作吧2025-05-05

