溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

系統批量運維管理paramiko

發布時間:2020-07-14 23:45:49 來源:網絡 閱讀:384 作者:lvsir666 欄目:編程語言

paramiko是基于Python實現的SSH2遠程安全連接,支持認證及密鑰方式??梢詫崿F遠程命令執行、文件傳輸、中間SSH代理等功能,相對于Pexpect,封裝的層次更高,更貼近SSH協議的功能,官網地址:http://www.paramiko.org


一:核心組件

SSHClient類:

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


1  connect方法connect方法實現了遠程SSH連接并校驗。方法定義:connect(self, hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False)

參數說明:

  • 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時打開壓縮。


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

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

參數說明:

  • command(str類型),執行的命令串;   

  • bufsize(int類型),文件緩沖區大小,默認為-1(不限制)


3. load_system_host_keys方法

    加載本地公鑰校驗文件,默認為~/.ssh/known_hosts,非默認路徑需要手工指定,方法定義:load_system_host_keys(self,filename=None)參數說明:filename(str類型),指定遠程主機公鑰記錄文件。


4. set_missing_host_key_policy方法設置連接的遠程主機沒有本地主機密鑰或HostKeys對象時的策略,目前支持三種,分別是AutoAddPolicy、RejectPolicy(默認)、Warning-Policy,僅限用于SSHClient類,分別代表的含義如下:

  • AutoAddPolicy,自動添加主機名及主機密鑰到本地HostKeys對象,并將其保存,不依賴load_system_host_keys()的配置,即使~/.ssh/known_hosts不存在也不產生影響;  

  • RejectPolicy,自動拒絕未知的主機名和密鑰,依賴load_system_host_keys()的配置;   

  • WarningPolicy,用于記錄一個未知的主機密鑰的Python警告,并接受它,功能上與Au-toAddPolicy相似,但未知主機會有告警。


下面介紹一個簡單實現遠程SSH運行命令的示例。該示例使用密碼認證方式,通過exec_com-mand()方法執行命令,詳細源碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
hostname="18.16.200.191"
username="root"
password="shitouit@2017"
paramiko.util.log_to_file('syslogin.log')

ssh = paramiko.SSHClient()
#ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())      #設置連接的遠程主機沒有本地主機密鑰或HostKeys對象時的策略,AutoAddPolicy,自動添加主機名及主機密鑰到本地HostKeys對象,并將其保存,不依賴load_system_host_keys()的配置,即使~/.ssh/known_hosts不存在也不產生影響
ssh.connect(hostname=hostname,username=username,password=password)

stdin,stdout,stderr=ssh.exec_command('free -m')
print stdout.read()
ssh.close()

程序執行結果截圖如下:

系統批量運維管理paramiko


SFTPClient類:

  SFTPClient作為一個SFTP客戶端對象,根據SSH傳輸協議的sftp會話,實現遠程文件操作,比如文件上傳、下載、權限、狀態等操作

1. from_transport方法

   創建一個已連通的SFTP客戶端通道,方法定義:from_transport(cls, t)

   參數說明:t(Transport),一個已通過驗證的傳輸對象

   

2. put方法

   上傳本地文件到遠程SFTP服務端,方法定義:put(self, localpath, remotepath, callback=None, confirm=True)

   參數說明:   

   localpath(str類型),需上傳的本地文件(源);   

   remotepath(str類型),遠程路徑(目標);   

   callback(function(int, int)),獲取已接收的字節數及總傳輸字節數,以便回調函數調用,默認為None;   confirm(bool類型),文件上傳完畢后是否調用stat()方法,以便確認文件的大小。

3. get方法

   從遠程SFTP服務端下載文件到本地,方法定義:get(self, remotepath, localpath, callback=None)

   參數說明:   

   remotepath(str類型),需下載的遠程文件(源);   

   localpath(str類型),本地路徑(目標);   

   callback(function(int, int)),獲取已接收的字節數及總傳輸字節數,以便回調函數調用,默認為None。

4. 其他方法

   SFTPClient類其他常用方法說明:   

   Mkdir,在SFTP服務器端創建目錄,如sftp.mkdir("/home/userdir",0755)。   

   remove,刪除SFTP服務器端指定目錄,如sftp.remove("/home/userdir")。   

   rename,重命名SFTP服務器端文件或目錄,如sftp.rename("/home/test.sh","/home/testfile.sh")。   

   stat,獲取遠程SFTP服務器端指定文件信息,如sftp.stat("/home/testfile.sh")。

   listdir,獲取遠程SFTP服務器端指定目錄列表,以Python的列表(List)形式返回,如sftp.listdir("/home")。

下面為SFTPClient類的一個完整示例,實現了文件上傳、下載、創建與刪除目錄等,需要注意的是,put和get方法需要指定文件名:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
hostname="18.16.200.191"
username="root"
password="shitouit@2017"
port=22

try:
    t=paramiko.Transport((hostname, port))
    t.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put('/root/anaconda-ks.cfg','/data/anaconda-ks.cfg')           #上傳文件
    sftp.get('/root/harbor-online-installer-v1.5.2.tgz','/root/harbor-online-installer-v1.5.2.tgz')    #下載文件
    sftp.mkdir('/data/parami',0755)
    sftp.rmdir('/data/parami')
    sftp.rename('/root/1.sh','/root/2.sh')
    print sftp.stat('/root/2.sh')
    print sftp.listdir('/data/')
    t.close()
except Exception, e:
    print str(e)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女