国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python paramiko模塊學習分享

2020-01-04 16:48:31
字體:
來源:轉載
供稿:網友

paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平臺通過SSH從一個平臺連接到另外一個平臺。利用該模塊,可以方便的進行ssh連接和sftp協議進行sftp文件傳輸。

首先讓我們理清以下幾個名詞:

SSHClient:包裝了Channel、Transport、SFTPClient
Channel:是一種類Socket,一種安全的SSH傳輸通道;
Transport:是一種加密的會話(但是這樣一個對象的Session并未建立),并且創建了一個加密的tunnels,這個tunnels叫做Channel;
Session:是client與Server保持連接的對象,用connect()/start_client()/start_server()開始會話.

paramiko 參考http://docs.paramiko.org/en/2.0/index.html

下載安裝

pycrypto,由于 paramiko 模塊內部依賴pycrypto,所以先下載安裝pycrypto

pip3 install pycrypto
pip3 install paramiko 

具體模塊使用 

SSHClient:

遠程連接分為兩種:(1)基于用戶名密碼連接 (2)基于公鑰秘鑰連接

通過是用paramiko遠程操作,其實本質也分為兩種:(1)只用SSHClient (2)自己創建一個transport 

基于用戶名密碼連接 

import paramiko # 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname='host', port=22, username='root', password='123')# 執行命令  stdout命令結果,stderr錯誤stdin, stdout, stderr = ssh.exec_command('ls')# 獲取命令結果 result = stdout.read()# 關閉連接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')# 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname='host', port=22, username='root', key=private_key)# 執行命令stdin, stdout, stderr = ssh.exec_command('df')# 獲取命令結果result = stdout.read()# 關閉連接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 = transportstdin, stdout, stderr = ssh.exec_command('df')transport.close()

SFTPClient:

用于連接遠程服務器并進行上傳下載功能。

基于用戶名密碼上傳下載

import paramiko transport = paramiko.Transport(('hostname',22))transport.connect(username='root',password='123') sftp = paramiko.SFTPClient.from_transport(transport)# 將location.py 上傳至服務器 /tmp/test.pysftp.put('/tmp/location.py', '/tmp/test.py')# 將remove_path 下載到本地 local_pathsftp.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 上傳至服務器 /tmp/test.pysftp.put('/tmp/location.py', '/tmp/test.py')# 將remove_path 下載到本地 local_pathsftp.get('remove_path', 'local_path') transport.close()

Demo: 實現遠程命令執行和文件上傳

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() # 連接遠程服務器    self.upload('db.py','/tmp/1.py') # 將本地的db.py文件上傳到遠端服務器的/tmp/目錄下并改名為1.py    self.cmd('df') # 執行df 命令    self.close()  # 關閉連接   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    # 執行命令    stdin, stdout, stderr = ssh.exec_command(command)    # 獲取命令結果    result = stdout.read()    print(result)    return result obj = SSHConnection()obj.run()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛阳市| 绵竹市| 阿鲁科尔沁旗| 民权县| 香港 | 龙南县| 万载县| 定远县| 遵义县| 弋阳县| 五峰| 湖州市| 通化县| 鄢陵县| 云浮市| 元阳县| 清原| 扎赉特旗| 灌南县| 钦州市| 长汀县| 鸡泽县| 班戈县| 临泉县| 临湘市| 泰顺县| 保靖县| 广灵县| 永春县| 郴州市| 桂林市| 习水县| 三明市| 山西省| 侯马市| 铜梁县| 霍城县| 平远县| 互助| 麟游县| 房产|