python?遠(yuǎn)程執(zhí)行命令的詳細(xì)代碼
更新時間:2022年02月15日 15:20:52 作者:linyouyi
有時會需要在遠(yuǎn)程的機器上執(zhí)行一個命令,并獲得其返回結(jié)果。對于這種情況,python 可以很容易的實現(xiàn)。今天通過實例代碼介紹下python?遠(yuǎn)程執(zhí)行命令的相關(guān)知識,感興趣的朋友一起看看吧
1.簡單版
# 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)對方主機沒有本機公鑰的情況時應(yīng)該怎么辦,AutoAddPolicy表示自動在對方主機保存下本機的秘鑰 ssh.connect('172.16.1.5',22,'linyouyi','123456') #SSH端口默認(rèn)22,可改 stdin,stdout,stderr = ssh.exec_command("df -hl") #這三個得到的都是類文件對象 outmsg,errmsg = stdout.read(),stderr.read() #讀一次之后,stdout和stderr里就沒有內(nèi)容了,所以一定要用變量把它們帶的信息給保存下來,否則read一次之后就沒有了 #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 # 定義一個類,表示一臺遠(yuǎn)端linux主機 class Linux(object): # 通過IP, 用戶名,密碼,超時時間初始化一個遠(yuǎn)程Linux主機 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)程主機 def connect(self): while True: # 連接過程中可能會拋出異常,比如網(wǎng)絡(luò)不通、鏈接超時 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() # 如果沒有拋出異常說明連接成功,直接返回 print(u'連接%s成功' % self.ip) # 接收到的網(wǎng)絡(luò)數(shù)據(jù)解碼為str print(self.chan.recv(65535).decode('utf-8')) return # 這里不對可能的異常如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) # 斷開連接 def close(self): self.chan.close() self.t.close() # 發(fā)送要執(zhí)行的命令 def send(self, cmd): cmd += '\r' # 通過命令執(zhí)行提示符來判斷命令是否執(zhí)行完成 p = re.compile(r']$') result = '' # 發(fā)送要執(zhí)行的命令 self.chan.send(cmd) # 回顯很長的命令可能執(zhí)行較久,通過循環(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Anaconda下配置python+opencv+contribx的實例講解
今天小編就為大家分享一篇Anaconda下配置python+opencv+contribx的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08pytorch中實現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道)
這篇文章主要介紹了pytorch中實現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02詳解python如何在django中為用戶模型添加自定義權(quán)限
這篇文章主要介紹了python如何在django中為用戶模型添加自定義權(quán)限,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Python Request爬取seo.chinaz.com百度權(quán)重網(wǎng)站的查詢結(jié)果過程解析
這篇文章主要介紹了Request爬取網(wǎng)站(seo.chinaz.com)百度權(quán)重的查詢結(jié)果過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08