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()
程序執行結果截圖如下:
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)
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:系統批量運維管理paramiko-創新互聯
分享鏈接:http://vcdvsql.cn/article4/cscjoe.html
成都網站建設公司_創新互聯,為您提供網站設計公司、企業網站制作、網站收錄、域名注冊、品牌網站制作、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯