Python模塊之Paramiko


Paramiko簡介

Paramiko它是Python 2.7 / 3.4+ 的一個模塊,它實現了SSH2協議,用於與遠程機器的安全(加密和認證)連接。與SSL不同,SSH2不需要強大的中央權威機構簽署的分層證書。SSH2協議是替換Telnet和rsh以便更安全的訪問遠程shell的協議 ,但該協議還包括通過加密隧道向遠程服務器打開任意通道的功能(例如:SFTP的工作方式)。

項目主頁:http://www.paramiko.org/

Github:https://github.com/paramiko/paramiko

ssh基本原理與特點

SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網絡上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。

ssh另一項優點就是對傳輸的數據進行加密,可以加快傳輸速度,SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP、甚至為PPP提供一個安全的“通道”。

ssh使用

使用ssh登陸到服務器

不指定用戶

ssh 192.168.0.11

指定用戶

ssh -l root 192.168.0.11

ssh root@192.168.0.11

指定端口、用戶

ssh -p 12333 root@216.230.230.114

Paramiko的安裝

pip install paramiko

virtualenv
source venv/bin/activate
pip install paramiko

Paramiko遠程執行Linux命令

基於用戶名密碼方式連接:

import paramiko
   
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123')
   
# 執行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 獲取命令結果
result = stdout.read()
   
# 關閉連接
ssh.close()

基於公鑰密鑰方式連接:

import paramiko
  
private_key = paramiko.RSAKey.from_private_key_file('/home/.ssh/id_rsa')
  
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', key=private_key)
  
# 執行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 獲取命令結果
result = stdout.read()
  
# 關閉連接
ssh.close()

Paramiko遠程上傳和下載文件

paramiko遠程上傳和下載

import paramiko
  
transport = paramiko.Transport(('192.168.1.1',22))
transport.connect(username='weiheng',password='weiheng123')
  
sftp = paramiko.SFTPClient.from_transport(transport)

# 將HelloWorld.py 上傳至服務器 /tmp/1.py
sftp.put('/tmp/HelloWorld.py', '/tmp/1.py')

# 將1.py 下載到本地 HelloWorld
sftp.get('/tmp/1.py', '/tmp/HelloWorld')
  
transport.close()

使用SSHClient封裝Transport

我們可能會遇到  需要傳輸文件,有需要執行Linux命令的情況,  因為Transport對象只能傳輸文件,不能執行Linux命令,所以我們只需要創建一個SSHClient,然后通過SSHClient的 get_transport() 來創建Transport對象

import paramiko
   
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123')
 
# 獲取Transport對象
trans_obj = ssh_client.get_transport()

sftp_obj = paramiko.SFTPClient.from_transport(trans_obj)
sftp_obj.get_channel()
# 使用sftp_obj上傳和下載文件
sftp_obj.put('source','target')
sftp_obj.get('source','target')

# 執行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 獲取命令結果
result = stdout.read()
   
# 關閉連接
ssh.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM