這篇文章主要講解了“python Paramiko的SSH怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“python Paramiko的SSH怎么使用”吧!
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了芒康免費(fèi)建站歡迎大家使用!
說(shuō)明
1、將所有設(shè)備信息寫入文本文檔。
簡(jiǎn)單地使用txt,將登錄信息構(gòu)建成字典。
2、初始化SSH連接和執(zhí)行命令。
3、分析此需求指定的命令和輸出結(jié)果。
將結(jié)果存儲(chǔ)在文件中。
4、增加多線程執(zhí)行。
提高效率。
5、添加Linux的crontab。
每小時(shí)收集一次信息(服務(wù)器配置)
實(shí)例
#!/usr/bin/env python # -*- coding:utf-8 -*- import re import time from concurrent.futures import ThreadPoolExecutor import paramiko def get_device_list(filename): """從文本文件讀取設(shè)備列表,返回由字典組成的列表。 文本內(nèi)容格式為:ip,用戶名,密碼,別名,例如: 1.1.1.1 admin admin sw1 1.1.1.2 admin admin sw2 ...... Args: filename ([str]): 文件名稱 """ with open(filename, 'r') as f: device_list = [] for line in f.readlines(): ip, username, password, name = line.strip().split() device_list.append( { "ip": ip, "username": username, "password": password, "name": name, } ) return device_list class NetworkDevice(object): def __init__(self, ip="", username="", password="'", name="", port=22,): self.conn = None if ip: self.ip = ip.strip() elif name: self.name = name.strip() else: raise ValueError("需要設(shè)備連接地址(ip 或 別名)") self.port = int(port) self.username = username self.password = password self._open_ssh() def _open_ssh(self): """初始化 SSH 連接,調(diào)起一個(gè)模擬終端,會(huì)話結(jié)束前可以一直執(zhí)行命令。 Raises: e: 拋出 paramiko 連接失敗的任何異常 """ ssh_connect_params = { "hostname": self.ip, "port": self.port, "username": self.username, "password": self.password, "look_for_keys": False, "allow_agent": False, "timeout": 5, # TCP 連接超時(shí)時(shí)間 } conn = paramiko.SSHClient() conn.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: conn.connect(**ssh_connect_params) except Exception as e: raise e self.conn = conn.invoke_shell(term="vt100", width=500, height=1000) return "" def exec_cmd(self, cmd, recv_time=3): """登錄設(shè)備,執(zhí)行命令 Args: cmd ([type]): 命令字符串 recv_time (int, optional): 讀取回顯信息的超時(shí)時(shí)間. Defaults to 3. Raises: EOFError: 沒(méi)有任何信息輸出,說(shuō)明連接失敗。 Returns: output: """ cmd = cmd.strip() + "\n" self.conn.sendall("screen disable\n") self.conn.sendall(cmd) time.sleep(int(recv_time)) output = self.conn.recv(1024*1024) if len(output) == 0: raise EOFError("連接可能被關(guān)閉,沒(méi)有任何信息輸出") return output.decode('utf-8', 'ignore') dev = { "ip":"192.168.56.21", "username":"netdevops", "password":"Admin@h3c.com", "name": "sw1" } # sw1 = NetworkDevice(**dev) # ret = sw1.exec_cmd("dis version") # print(ret) def parse_interface_drop(output): """把設(shè)備的輸出隊(duì)列丟包信息解析成累加值 命令及輸出示例如下: # [H3C]dis qos queue-statistics interface outbound | in "^ Drop" # Dropped: 0 packets, 0 bytes """ ptn = re.compile(r"\s(\S+):\s+(\d+)\s+(\S+),\s+(\d+)\s+(\S+)") count = 0 for i in ptn.findall(output): count += int(i[1]) return count def run(cmd, **conn_parms): """登錄單臺(tái)設(shè)備,執(zhí)行指定命令,解析丟包統(tǒng)計(jì) """ sw = NetworkDevice(**conn_parms) output = sw.exec_cmd(cmd) drop_count = parse_interface_drop(output) return "%s %s %s"%( conn_parms.get("name"), conn_parms.get("ip"), drop_count) # cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"' # ret = run(cmd,**dev) # print(ret) if __name__== "__main__": """獲取設(shè)備列表,使用多線程登錄設(shè)備獲取信息并返回 """ with ThreadPoolExecutor(10) as pool: futures = [] cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"' dev_info = get_device_list("./iplist.txt") for d in dev_info: future = pool.submit(run, cmd, **d) futures.append(future) # for f in futures: # print(f.result()) # 根據(jù)執(zhí)行時(shí)間把結(jié)果寫入文件,精確到小時(shí) with open("./drops/%s.log"%time.strftime("%Y%m%d_%H"),'w') as f: for line in futures: f.write(line.result() + "\n")
感謝各位的閱讀,以上就是“python Paramiko的SSH怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)python Paramiko的SSH怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)頁(yè)名稱:pythonParamiko的SSH怎么使用
地址分享:http://jinyejixie.com/article2/jdopoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、微信小程序、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)