python?遠(yuǎn)程執(zhí)行命令的詳細(xì)代碼
1.簡(jiǎn)單版
# coding: utf-8 import paramiko import re from time import sleep def ssh(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #指定當(dāng)對(duì)方主機(jī)沒(méi)有本機(jī)公鑰的情況時(shí)應(yīng)該怎么辦,AutoAddPolicy表示自動(dòng)在對(duì)方主機(jī)保存下本機(jī)的秘鑰 ssh.connect('172.16.1.5',22,'linyouyi','123456') #SSH端口默認(rèn)22,可改 stdin,stdout,stderr = ssh.exec_command("df -hl") #這三個(gè)得到的都是類(lèi)文件對(duì)象 outmsg,errmsg = stdout.read(),stderr.read() #讀一次之后,stdout和stderr里就沒(méi)有內(nèi)容了,所以一定要用變量把它們帶的信息給保存下來(lái),否則read一次之后就沒(méi)有了 #outmsg = str(outmsg) #print(outmsg.replace("\\n","\\r\\n")) print(outmsg.decode()) print(errmsg) if errmsg == "": print(outmsg) ssh.close() if __name__ == '__main__': ssh()
2.封裝版
# coding: utf-8 import paramiko import re from time import sleep # 定義一個(gè)類(lèi),表示一臺(tái)遠(yuǎn)端linux主機(jī) class Linux(object): # 通過(guò)IP, 用戶名,密碼,超時(shí)時(shí)間初始化一個(gè)遠(yuǎn)程Linux主機(jī) def __init__(self, ip, username, password, timeout=30): self.ip = ip self.username = username self.password = password self.timeout = timeout # transport和chanel self.t = '' self.chan = '' # 鏈接失敗的重試次數(shù) self.try_times = 3 # 調(diào)用該方法連接遠(yuǎn)程主機(jī) def connect(self): while True: # 連接過(guò)程中可能會(huì)拋出異常,比如網(wǎng)絡(luò)不通、鏈接超時(shí) try: self.t = paramiko.Transport(sock=(self.ip, 22)) self.t.connect(username=self.username, password=self.password) self.chan = self.t.open_session() self.chan.settimeout(self.timeout) self.chan.get_pty() self.chan.invoke_shell() # 如果沒(méi)有拋出異常說(shuō)明連接成功,直接返回 print(u'連接%s成功' % self.ip) # 接收到的網(wǎng)絡(luò)數(shù)據(jù)解碼為str print(self.chan.recv(65535).decode('utf-8')) return # 這里不對(duì)可能的異常如socket.error, socket.timeout細(xì)化,直接一網(wǎng)打盡 except Exception as e1: if self.try_times != 0: print(u'連接%s失敗,進(jìn)行重試' %self.ip) self.try_times -= 1 else: print(u'重試3次失敗,結(jié)束程序') exit(1) # 斷開(kāi)連接 def close(self): self.chan.close() self.t.close() # 發(fā)送要執(zhí)行的命令 def send(self, cmd): cmd += '\r' # 通過(guò)命令執(zhí)行提示符來(lái)判斷命令是否執(zhí)行完成 p = re.compile(r']$') result = '' # 發(fā)送要執(zhí)行的命令 self.chan.send(cmd) # 回顯很長(zhǎng)的命令可能執(zhí)行較久,通過(guò)循環(huán)分批次取回回顯 sleep(2) ret = self.chan.recv(65535) ret = ret.decode('utf-8') result += ret if p.search(ret): print(result) return(result) if __name__ == '__main__': host = Linux('172.16.1.5', 'linyouyi', '123456') host.connect() host.send('ll') host.close()
到此這篇關(guān)于python 遠(yuǎn)程執(zhí)行命令的文章就介紹到這了,更多相關(guān)python 遠(yuǎn)程執(zhí)行命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Anaconda下配置python+opencv+contribx的實(shí)例講解
今天小編就為大家分享一篇Anaconda下配置python+opencv+contribx的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道)
這篇文章主要介紹了pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02詳解python如何在django中為用戶模型添加自定義權(quán)限
這篇文章主要介紹了python如何在django中為用戶模型添加自定義權(quán)限,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10python同時(shí)遍歷數(shù)組的索引和值的實(shí)例
今天小編就為大家分享一篇python同時(shí)遍歷數(shù)組的索引和值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Python Request爬取seo.chinaz.com百度權(quán)重網(wǎng)站的查詢結(jié)果過(guò)程解析
這篇文章主要介紹了Request爬取網(wǎng)站(seo.chinaz.com)百度權(quán)重的查詢結(jié)果過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08python異常處理之try finally不報(bào)錯(cuò)的原因
這篇文章主要介紹了python異常處理之try finally不報(bào)錯(cuò)的原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05