1. 程式人生 > >系統批量運維管理器paramiko詳解

系統批量運維管理器paramiko詳解

dns ase stderr 執行方法 輸出流 組件 import ram warning

一、paramiko介紹

  paramiko是基於Python實現的SSH2遠程安全連接,支持認證及密鑰方式。可以實現遠程命令執行、文件傳輸、中間SSH代理等功能,相對於Pexpect,封裝的層次更高,更貼近SSH協議的功能

官網地址:http://www.paramiko.org/installing.html

     http://docs.paramiko.org/en/2.4/

     https://pypi.org/project/paramiko/

二、paramiko安裝

root@localhost ~]# pip3 install paramiko

簡單實現遠程SSH運行命令示例

import paramiko

hostname = 192.168.56.132
username = root
password = 1234567
paramiko.util.log_to_file(syslogin.log)     #發送paramiko日誌到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().decode(utf-8)) #打印命令執行結果,得到Python列表形式,可以使用stdout_readlines() ssh.close() #關閉SSH連接

程序運行結果如下圖所示:

技術分享圖片

三、paramiko的核心組件

paramiko包含兩個核心組件,一個為SSHClient類,另一個為SFTPClient類。

SSHClient類

SSHClient類是SSH服務會話的高級表示,該類封裝了傳輸(transport)、通道(channel)及SFTPClient的校驗、建立的方法,通常用於執行遠程命令。

client = SSHClient()
client.load_system_host_keys()
client.connect(ssh.example.com)
stdin, stdout,stderr = client.exec_command(ls -l)

SSHClient常用的方法介紹

官方文檔:http://docs.paramiko.org/en/2.4/api/client.html?highlight=connect

connect方法

conect方法實現了遠程SSH連接並校驗

方法定義:

connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None)

參數說明:

  • hostname(str類型),連接的目標主機地址;
  • port(int類型),連接目標主機的端口,默認為22;
  • username(str類型),校驗的用戶名(默認為當前的本地用戶名);
  • password(str類型),密碼用於身份校驗或解鎖私鑰;
  • pkey(Pkey類型),私鑰方式用於身份驗證;
  • key_filename(str or list(str)類型),一個文件名或文件名列表,用於私鑰的身份驗證;
  • timeout(float類型),一個可選的超時時間(以秒為單位)的TCP連接;
  • allow_agent(bool類型),設置為False時用於禁用連接到SSH代理;
  • look_for_keys(bool類型),設置為False時用於來禁用在~/.ssh中搜索私鑰文件;
  • compress(bool類型),設置為True時打開壓縮。

exec_command方法

遠程命令執行方法,該命令的輸入與輸出流為標準輸入(stdin)、輸出(stdout)、錯誤(stderr)的Python文件對像。

方法定義:

exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None)

參數說明:

  • command(str類型),執行的命令串;
  • bufsize(int類型),文件緩沖區大小,默認為-1(不限制)

load_system_host_keys方法

加載本地公鑰校驗文件,默認為~/.ssh/known_host,非默認路徑需要手工指定。

方法定義:

load_system_host_keys(self,filename=None)

參數說明:

filename(str類型),指定遠程主機公鑰記錄文件。

set_missing_host_policy方法

  設置連接的遠程主機沒有主機密鑰或HostKeys對象時的策略,目前支持三種,分別是AutoAddPolicy、RejectPolicy(默認)、WarningPolicy,僅限用於SSHClient類。
  • AutoAddPolicy,目標添加主機名及主機密鑰到本地HostKeys對象,並將其保存,不依賴load_system_host_keys()的配置,即使~/.ssh/hnown_hosts不存在也不產生影響;
  • RejectPolicy,自動拒絕未知的主機名和密鑰,依賴load_system_host_keys()的配置;
  • WarningPolicy,用於記錄一個未知的主機密鑰的Python警告,並接收它,功能上AutoAddPolicy相似,但未知主機會有告警。

使用方法如下:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

系統批量運維管理器paramiko詳解