Python遠(yuǎn)程SSH庫(kù)Paramiko詳細(xì)操作
paramiko是用python語(yǔ)言寫的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平臺(tái)通過(guò)SSH從一個(gè)平臺(tái)連接到另外一個(gè)平臺(tái)。利用該模塊,可以方便的進(jìn)行ssh連接和sftp協(xié)議進(jìn)行sftp文件傳輸。
paramiko(https://www.paramiko.org/
)實(shí)現(xiàn)了SSHv2協(xié)議(底層使用cryptography),用于連接遠(yuǎn)程服務(wù)器并執(zhí)行相關(guān)操作,使用該模塊可以對(duì)遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作。
核心組件
若未安裝,則先安裝pip install paramiko
。
paramiko包含兩個(gè)核心組件,SSHClient和SFTPClient:
SSHClient
:類似于Linux的ssh命令,是對(duì)SSH會(huì)話的封裝;該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于執(zhí)行遠(yuǎn)程命令。SFTPClient
:類似于Linux的sftp命令,是對(duì)SFTP客戶端的封裝,用以實(shí)現(xiàn)遠(yuǎn)程文件操作,如文件上傳、下載、修改文件權(quán)限等操作。
涉及的幾個(gè)基礎(chǔ)名詞:
Channel
:是一種類Socket,安全的SSH傳輸通道;Transport
:是一種加密的會(huì)話,使用時(shí)會(huì)同步創(chuàng)建了一個(gè)加密的通道(Channel);Session
:是client與Server保持連接的對(duì)象,用connect()/start_client()/start_server()開始會(huì)話。
SSHClient常用方法
SSHClient用于執(zhí)行ssh命令。
connect():實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的連接與認(rèn)證,只有hostname是必傳參數(shù)
hostname
:連接的目標(biāo)主機(jī)port=SSH_PORT
:SSH端口username=None
:登錄的用戶名password=None
:用戶密碼pkey=None
:以私鑰方式進(jìn)行身份驗(yàn)證(代替password方式)key_filename=None
:一個(gè)文件名或文件列表,指定私鑰文件timeout=None
:可選的tcp連接超時(shí)時(shí)間allow_agent=True
:是否允許連接到ssh代理,默認(rèn)為True允許look_for_keys=True
:是否在~/.ssh中搜索私鑰文件,默認(rèn)為True允許compress=False
:是否打開壓縮
set_missing_host_key_policy():設(shè)置遠(yuǎn)程服務(wù)器沒(méi)有在know_hosts文件中記錄時(shí)的應(yīng)對(duì)策略
AutoAddPolicy
:自動(dòng)添加主機(jī)名及密鑰到本地HostKeys對(duì)象,即新建立ssh連接時(shí)不需要輸入yes或no進(jìn)行確認(rèn);WarningPolicy
:記錄一個(gè)未知的主機(jī)密鑰時(shí)會(huì)發(fā)出警告,功能上和AutoAddPolicy類似,但是會(huì)提示是新連接;RejectPolicy
:默認(rèn)選項(xiàng);自動(dòng)拒絕未知的主機(jī)(本地know_hosts中不存在的)。
exec_command():在遠(yuǎn)程服務(wù)器執(zhí)行Linux命令的方法。
open_sftp():在當(dāng)前ssh會(huì)話的基礎(chǔ)上創(chuàng)建一個(gè)sftp會(huì)話,并返回一個(gè)SFTPClient對(duì)象
sftp = sshClient.open_sftp()
SFTPClient常用方法
SFTPCLient作為一個(gè)sftp的客戶端對(duì)象,實(shí)現(xiàn)遠(yuǎn)程文件操作,如上傳、下載,查詢權(quán)限、狀態(tài)等:
from_transport(cls,t)
:創(chuàng)建一個(gè)已連通的SFTP客戶端通道put(localpath, remotepath, callback=None, confirm=True)
:將本地文件上傳到服務(wù)器 參數(shù)confirm:是否調(diào)用stat()方法檢查文件狀態(tài),返回ls -l的結(jié)果get(remotepath, localpath, callback=None)
:從服務(wù)器下載文件到本地mkdir()
:在服務(wù)器上創(chuàng)建目錄remove()
:在服務(wù)器上刪除目錄rename()
:在服務(wù)器上重命名目錄stat()
:查看服務(wù)器文件狀態(tài)listdir()
:列出服務(wù)器目錄下的文件
使用示例
SSH私鑰創(chuàng)建
要通過(guò)私鑰登錄,需要先生成私鑰(以Windows遠(yuǎn)程登錄Linux為例):
- 生成私鑰:
打開cmd,執(zhí)行ssh-keygen
;
全部回車;
會(huì)在‘用戶’目錄下的.ssh
目錄下生成id_rsa與id_rsa.pub文件
- 上傳公鑰:
復(fù)制id_rsa.pub到遠(yuǎn)端Linux機(jī)器的~/.ssh
下;
把公鑰加入authorized_keys中:cat id_rsa.pub >> authorized_keys
SSHClient運(yùn)行命令
以私鑰方式登錄
def execCmd(host, user, psw, cmd, port=22) -> (str, str): """ :param host: :param user: :param psw: :param cmd: :param port: :return: (stdout string, stderr string) """ with paramiko.SSHClient() as ssh_client: # 自動(dòng)添加策略,保存服務(wù)器的主機(jī)名和密鑰信息,須放在connect方法的前面 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連接SSH服務(wù)端,以用戶名和密碼進(jìn)行認(rèn)證 # ssh_client.connect(hostname=host, port=port, username=user, password=psw) # 連接SSH服務(wù)端,以用戶名和私鑰進(jìn)行認(rèn)證 prvKey = paramiko.RSAKey.from_private_key_file(psw) ssh_client.connect(hostname=host, port=port, username=user, pkey=prvKey) # 打開一個(gè)Channel并執(zhí)行命令: 正確輸出放到stdout中,如果有錯(cuò)誤放到stderr中 _, stdout, stderr = ssh_client.exec_command(cmd) result = stdout.read().decode('utf-8') # print("[OUT]:", result) err = stderr.read().decode('utf-8') # print("[ERR]:", err) ssh_client.close() return result, err
以元組方式返回,若有錯(cuò)誤則返回的err非空。
SFTPClient下載文件
以用戶名與密碼方式登錄:
def downloadFile(host, user, psw, localFile, remoteFile, port=22): # 實(shí)例化一個(gè)transport對(duì)象 with paramiko.Transport((host, port)) as tran: # 連接SSH服務(wù)端,,以用戶名和密碼進(jìn)行認(rèn)證 tran.connect(username=user, password=psw) # 連接SSH服務(wù)端,以用戶名和私鑰進(jìn)行認(rèn)證 # prvKey = paramiko.RSAKey.from_private_key_file(psw) # tran.connect(username=user, pkey=prvKey) # 獲取SFTP實(shí)例 sftp = paramiko.SFTPClient.from_transport(tran) # 執(zhí)行下載動(dòng)作 sftp.get(remoteFile, localFile) # 關(guān)閉Transport通道 tran.close()
默認(rèn)遠(yuǎn)端當(dāng)前目錄是用戶home目錄,如下載".viminfo"文件:
downloadFile(host, user, psw, "d:\\tmp.conf", ".viminfo")
到此這篇關(guān)于Python遠(yuǎn)程SSH庫(kù)Paramiko簡(jiǎn)介的文章就介紹到這了,更多相關(guān)Python遠(yuǎn)程Paramiko內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python利用paramiko實(shí)現(xiàn)基本的SSH客戶端操作
- Python使用Paramiko實(shí)現(xiàn)輕松判斷文件類型
- Python基于paramiko庫(kù)操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)
- Python Paramiko創(chuàng)建文件目錄并上傳文件詳解
- python的paramiko模塊基本用法詳解
- Python運(yùn)維自動(dòng)化之paramiko模塊應(yīng)用實(shí)例
- Python中paramiko模塊的基礎(chǔ)操作與排錯(cuò)問(wèn)題
- Python使用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行Shell命令的實(shí)現(xiàn)
- python運(yùn)維自動(dòng)化Paramiko的實(shí)現(xiàn)示例
相關(guān)文章
用python寫一個(gè)windows下的定時(shí)關(guān)機(jī)腳本(推薦)
由于本人經(jīng)常使用筆記本共享WiFi,但是又不想筆記本開機(jī)一夜,每次都是使用dos命令關(guān)機(jī),感覺好麻煩,然后小編想到用python寫一個(gè)定時(shí)關(guān)機(jī)的腳本,具體實(shí)例代碼請(qǐng)參考本文2017-03-03Pytorch DataLoader 變長(zhǎng)數(shù)據(jù)處理方式
今天小編就為大家分享一篇Pytorch DataLoader 變長(zhǎng)數(shù)據(jù)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn)
這篇文章主要介紹了Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python調(diào)用win10toast框架實(shí)現(xiàn)定時(shí)調(diào)起系統(tǒng)通知
win10toast是一個(gè)windows通知的出發(fā)框架,使用它可以輕松的調(diào)起系統(tǒng)通知。通過(guò)它可以很方便的做一個(gè)定時(shí)通知的功能應(yīng)用。本文將調(diào)用win10toast實(shí)現(xiàn)定時(shí)調(diào)起系統(tǒng)通知功能,需要的可以參考一下2022-01-01pywinauto自動(dòng)化測(cè)試使用經(jīng)驗(yàn)
本文主要介紹了pywinauto自動(dòng)化測(cè)試使用經(jīng)驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python圖片視頻超分模型RealBasicVSR的使用教程
這篇文章主要和大家分享一個(gè)有意思的模型:RealBasicVSR。這個(gè)模型可以實(shí)現(xiàn)圖片或視頻的超分處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05python 實(shí)現(xiàn)單一數(shù)字取對(duì)數(shù)與數(shù)列取對(duì)數(shù)
這篇文章主要介紹了python 實(shí)現(xiàn)單一數(shù)字取對(duì)數(shù)與數(shù)列取對(duì)數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-05-05基于Python編寫一個(gè)簡(jiǎn)單的http服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)簡(jiǎn)單的http服務(wù)器,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04python構(gòu)建自定義回調(diào)函數(shù)詳解
在工作中,回調(diào)函數(shù)使用的場(chǎng)景是非常多的,下面我們就來(lái)通過(guò)例子程序來(lái)詳細(xì)了解利用了Python的屬性機(jī)制構(gòu)建了一個(gè)自定義回調(diào)函數(shù)的使用2017-06-06