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

