python paramiko模塊學(xué)習(xí)分享
paramiko是用python語(yǔ)言寫(xiě)的一個(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文件傳輸。
首先讓我們理清以下幾個(gè)名詞:
SSHClient:包裝了Channel、Transport、SFTPClient
Channel:是一種類(lèi)Socket,一種安全的SSH傳輸通道;
Transport:是一種加密的會(huì)話(但是這樣一個(gè)對(duì)象的Session并未建立),并且創(chuàng)建了一個(gè)加密的tunnels,這個(gè)tunnels叫做Channel;
Session:是client與Server保持連接的對(duì)象,用connect()/start_client()/start_server()開(kāi)始會(huì)話.
paramiko 參考http://docs.paramiko.org/en/2.0/index.html
下載安裝
pycrypto,由于 paramiko 模塊內(nèi)部依賴(lài)pycrypto,所以先下載安裝pycrypto
pip3 install pycrypto
pip3 install paramiko
具體模塊使用
SSHClient:
遠(yuǎn)程連接分為兩種:(1)基于用戶(hù)名密碼連接 (2)基于公鑰秘鑰連接
通過(guò)是用paramiko遠(yuǎn)程操作,其實(shí)本質(zhì)也分為兩種:(1)只用SSHClient (2)自己創(chuàng)建一個(gè)transport
基于用戶(hù)名密碼連接
import paramiko
# 創(chuàng)建SSH對(duì)象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機(jī)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務(wù)器
ssh.connect(hostname='host', port=22, username='root', password='123')
# 執(zhí)行命令 stdout命令結(jié)果,stderr錯(cuò)誤
stdin, stdout, stderr = ssh.exec_command('ls')
# 獲取命令結(jié)果
result = stdout.read()
# 關(guān)閉連接
ssh.close()
SSHClient 封裝 Transport
import paramiko
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', password='123')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
transport.close()
基于公鑰秘鑰連接
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
# 創(chuàng)建SSH對(duì)象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機(jī)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務(wù)器
ssh.connect(hostname='host', port=22, username='root', key=private_key)
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結(jié)果
result = stdout.read()
# 關(guān)閉連接
ssh.close()
SSHClient 封裝Transport
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
transport.close()
SFTPClient:
用于連接遠(yuǎn)程服務(wù)器并進(jìn)行上傳下載功能。
基于用戶(hù)名密碼上傳下載
import paramiko
transport = paramiko.Transport(('hostname',22))
transport.connect(username='root',password='123')
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至服務(wù)器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 將remove_path 下載到本地 local_path
sftp.get('remove_path', 'local_path')
transport.close()
基于公鑰秘鑰上傳下載
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', pkey=private_key )
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至服務(wù)器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 將remove_path 下載到本地 local_path
sftp.get('remove_path', 'local_path')
transport.close()
Demo: 實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行和文件上傳
import paramiko
class SSHConnection(object):
def __init__(self, host='192.168.12.68', port=22, username='locojoy',pwd='123321QQ!'):
self.host = host
self.port = port
self.username = username
self.pwd = pwd
self.__k = None
def run(self):
self.connect() # 連接遠(yuǎn)程服務(wù)器
self.upload('db.py','/tmp/1.py') # 將本地的db.py文件上傳到遠(yuǎn)端服務(wù)器的/tmp/目錄下并改名為1.py
self.cmd('df') # 執(zhí)行df 命令
self.close() # 關(guān)閉連接
def connect(self):
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.pwd)
self.__transport = transport
def close(self):
self.__transport.close()
def upload(self,local_path,target_path):
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.put(local_path,target_path)
def cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command(command)
# 獲取命令結(jié)果
result = stdout.read()
print(result)
return result
obj = SSHConnection()
obj.run()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python Paramiko模塊的使用實(shí)際案例
- python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例
- windows下python安裝paramiko模塊和pycrypto模塊(簡(jiǎn)單三步)
- Python Paramiko模塊的安裝與使用詳解
- Python使用Paramiko模塊編寫(xiě)腳本進(jìn)行遠(yuǎn)程服務(wù)器操作
- python下paramiko模塊實(shí)現(xiàn)ssh連接登錄Linux服務(wù)器
- python使用paramiko模塊實(shí)現(xiàn)ssh遠(yuǎn)程登陸上傳文件并執(zhí)行
- windows下安裝python paramiko模塊的代碼
- Python paramiko模塊的使用示例
相關(guān)文章
淺談SciPy中的optimize.minimize實(shí)現(xiàn)受限優(yōu)化問(wèn)題
今天小編就為大家分享一篇淺談SciPy中的optimize.minimize實(shí)現(xiàn)受限優(yōu)化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
如何解決Keras載入mnist數(shù)據(jù)集出錯(cuò)的問(wèn)題
這篇文章主要介紹了解決Keras載入mnist數(shù)據(jù)集出錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值
今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python如何將兩個(gè)數(shù)據(jù)表中的對(duì)應(yīng)數(shù)據(jù)相加
這篇文章主要介紹了python如何將兩個(gè)數(shù)據(jù)表中的對(duì)應(yīng)數(shù)據(jù)相加問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式
今天小編就為大家分享一篇python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python封裝的類(lèi)型與作用域的優(yōu)勢(shì)實(shí)例深究
封裝是面向?qū)ο缶幊讨械暮诵母拍?它能夠幫助程序員隱藏類(lèi)的內(nèi)部細(xì)節(jié),并限制對(duì)類(lèi)成員的直接訪問(wèn),本文將深入探討Python中封裝的機(jī)制,介紹封裝的類(lèi)型和優(yōu)勢(shì),并提供詳細(xì)的示例展示如何在Python中實(shí)現(xiàn)封裝2023-12-12
Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例
今天小編就為大家分享一篇Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

