1. 程式人生 > >python學習-paramiko簡單使用

python學習-paramiko簡單使用

paramiko簡單使用

paramiko是基於python實現的ssh2遠程安全連接,支持認證及密鑰方式。可以實現遠程命令執行,文件傳輸、中間ssh代理等功能。

安裝:

pip install paramiko或 easy_install paramiko

paramiko依賴第三方的Crypto,Ecdsa和pyhton-devel

核心組件:

SSHclient類
方法:

connect():遠程ssh連接並作校驗

參數:

  • hostname 連接的目標主機

  • port=SSH_PORT 指定端口

  • username=None 驗證的用戶名

  • password=None 驗證的用戶密碼

  • pkey=None 私鑰方式用於身份驗證

  • key_filename=None 一個文件名或文件名列表,指定私鑰文件

  • timeout=None 可選的tcp連接超時時間

  • allow_agent=True 是否允許連接到ssh代理,默認為True 允許

  • look_for_keys=True 是否在~/.ssh中搜索私鑰文件,默認為True 允許

  • compress=False 是否打開壓縮

  • sock=None

  • gss_auth=False

  • gss_kex=False

  • gss_deleg_creds=True

  • gss_host=None

  • banner_timeout=None

exec_command():用於遠程執行命令,該命令的輸入與輸出流為標準輸入、標出輸出、標準錯誤輸出

參數:

  • command 執行的命令

  • bufsize=-1 文件緩沖區大小

  • timeout=None 設置超時時間

  • get_pty=False

load_system_host_key():裝載系統公鑰,默認為~/.ssh/known_hosts

參數:

  • filename=None 指定本地公鑰文件

set_missing_host_key_policy():設置連接的遠程主機沒有本地主機密鑰或HostKeys對象時的策略,目前支持三種,也就是參數只有三個。

參數:

  • AutoAddPolicy 自動添加主機名及主機密鑰到本地的known_hosts,不依賴load_system_host_key的配置。即新建立ssh連接時不需要再輸入yes或no進行確認

  • WarningPolicy 用於記錄一個未知的主機密鑰的python警告。並接受,功能上和AutoAddPolicy類似,但是會提示是新連接

  • RejectPolicy 自動拒絕未知的主機名和密鑰,依賴load_system_host_key的配置。此為默認選項

  用法:
  set_missing_host_key_policy(paramiko.AutoAddPolicy())

SFTPClient類

SFTPCLient作為一個sftp的客戶端對象,根據ssh傳輸協議的sftp會話,實現遠程文件操作,如上傳、下載。

方法:

  • from_transport(cls,t) 創建一個已連通的SFTP客戶端通道

  • put(localpath, remotepath, callback=None, confirm=True) 將本地文件上傳到服務器 參數confirm:是否調用stat()方法檢查文件狀態,返回ls -l的結果

  • get(remotepath, localpath, callback=None) 從服務器下載文件到本地

  • mkdir() 在服務器上創建目錄

  • remove() 在服務器上刪除目錄

  • rename() 在服務器上重命名目錄

  • stat() 查看服務器文件狀態

  • listdir() 列出服務器目錄下的文件


使用ssh運行命令,采用明文密碼認證方式,通過exec_command()方法執行命令,示例如下

#!/usr/bin/env python
#coding=utf-8
 import paramiko
 
 
 hostname='172.31.101.61'
 username='root'
 password='abc@123'
 paramiko.util.log_to_file('syslogin.log') #發送paramik日誌到syslogin.log文件
 
 ssh=paramiko.SSHClient()   #創建一個ssh客戶端client對象
 ssh.load_system_host_keys()   #獲取客戶端host_keys,默認~/.ssh/known_hosts,非默認路徑需指定
 ssh.connect(hostname=hostname,username=username,password=password)  #創建ssh連接
 stdin,stdout,stderr=ssh.exec_command('free -m')   #調用遠程執行命令方法exec_command()
 print stdout.read()    #打印命令執行結果,得到python列表形式,可以用stdout.readlinses()
 ssh.close()    #關閉ssh連接

技術分享圖片

python學習-paramiko簡單使用