Python模塊之Paramiko

Paramiko簡介

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

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

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

ssh基本原理與特色

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

ssh另外一項優勢就是對傳輸的數據進行加密,能夠加快傳輸速度,SSH有不少功能,它既能夠代替Telnet,又能夠爲FTP、POP、甚至爲PPP提供一個安全的「通道」。服務器

ssh使用

使用ssh登錄到服務器網絡

不指定用戶ssh

ssh 192.168.0.11加密

指定用戶spa

ssh -l root 192.168.0.11code

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()
相關文章
相關標籤/搜索