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()開(kāi)始會(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:是否打開(kāi)壓縮
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為例):
- 生成私鑰:
打開(kāi)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)
# 打開(kāi)一個(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,但是又不想筆記本開(kāi)機(jī)一夜,每次都是使用dos命令關(guān)機(jī),感覺(jué)好麻煩,然后小編想到用python寫一個(gè)定時(shí)關(guān)機(jī)的腳本,具體實(shí)例代碼請(qǐng)參考本文2017-03-03
Pytorch DataLoader 變長(zhǎng)數(shù)據(jù)處理方式
今天小編就為大家分享一篇Pytorch DataLoader 變長(zhǎng)數(shù)據(jù)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python后臺(tái)開(kāi)發(fā)Django會(huì)話控制的實(shí)現(xiàn)
這篇文章主要介紹了Python后臺(tái)開(kāi)發(fā)Django會(huì)話控制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Python調(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-01
pywinauto自動(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-03
Python圖片視頻超分模型RealBasicVSR的使用教程
這篇文章主要和大家分享一個(gè)有意思的模型:RealBasicVSR。這個(gè)模型可以實(shí)現(xiàn)圖片或視頻的超分處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05
python 實(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-04
python構(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

