Python遠(yuǎn)程SSH庫Paramiko詳細(xì)操作
paramiko是用python語言寫的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平臺(tái)通過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ù)器沒有在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)建
要通過私鑰登錄,需要先生成私鑰(以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庫Paramiko簡(jiǎn)介的文章就介紹到這了,更多相關(guān)Python遠(yuǎn)程Paramiko內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用Paramiko庫實(shí)現(xiàn)SSH管理詳解
- python的paramiko模塊基本用法詳解
- Python通過paramiko庫實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法
- Python運(yùn)維自動(dòng)化之paramiko模塊應(yīng)用實(shí)例
- Python中paramiko模塊的基礎(chǔ)操作與排錯(cuò)問題
- python 第三方庫paramiko的常用方式
- Python如何實(shí)現(xiàn)Paramiko的二次封裝
- python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼
- Python paramiko使用方法代碼匯總
- Python Paramiko模塊中exec_command()和invoke_shell()兩種操作區(qū)別
相關(guān)文章
python區(qū)塊鏈實(shí)現(xiàn)簡(jiǎn)版工作量證明
這篇文章主要為大家介紹了python區(qū)塊鏈實(shí)現(xiàn)簡(jiǎn)版工作量證明詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05django mysql數(shù)據(jù)庫及圖片上傳接口詳解
這篇文章主要介紹了django mysql數(shù)據(jù)庫及圖片上傳接口詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07對(duì)python3標(biāo)準(zhǔn)庫httpclient的使用詳解
今天小編就為大家分享一篇對(duì)python3標(biāo)準(zhǔn)庫httpclient的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12詳解Pytorch自動(dòng)求導(dǎo)機(jī)制
自動(dòng)求導(dǎo)是一種計(jì)算梯度的技術(shù),它允許我們?cè)诙x模型時(shí)不需要手動(dòng)推導(dǎo)梯度計(jì)算公式,PyTorch 提供了自動(dòng)求導(dǎo)的功能,使得梯度的計(jì)算變得非常簡(jiǎn)單和高效,這篇文章主要介紹了Pytorch自動(dòng)求導(dǎo)機(jī)制詳解,需要的朋友可以參考下2023-07-07