Python网络自动化:使用脚本批量模拟不同厂商设备配置
前言
- 网络中设备多:主管网络中500台不同厂家的网络设备
- 操作繁琐、重复:全网统一配置syslog命令、定期的备份
- 效率低:如果500台设备都需要刷syslog命令或者是定期备份配置,将需要大量的时间(如果有5000台?5w台呢?)
Idea
需求
实现
代码部分
import paramiko import time import pandas as pd class Devnet: # 创建一个类 def __init__(self, ip, port, username, password): # init一个初始化对象 self.ip = ip self.port = port self.username = username self.password = password self.session = None self.vty = None def transport(self): # 建立SSH连接 ssh_session = paramiko.SSHClient() # 创建一个SSH对象 ssh_session.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 ssh_session.connect(hostname=self.ip, port=self.port, username=self.username, password=self.password ) self.session = ssh_session def open_vty(self): # 激活terminal,并且当作对象去接受 self.vty = self.session.invoke_shell() def huawei_config(self): # 华为设备的配置方法 try: self.transport() self.open_vty() except Exception: return print(f"{self.ip} SSH 连接失败!") with open("huawei.txt", mode="r", encoding="utf-8") as f: for i in f.readlines(): self.vty.send(i) time.sleep(0.5) return self.vty.recv(65535).decode("utf-8") def cisco_config(self): # 思科设备的配置方法 try: self.transport() self.open_vty() except Exception: return print(f"{self.ip} SSH 连接失败!") with open("cisco.txt", mode="r", encoding="utf-8") as f: for i in f.readlines(): self.vty.send(i) time.sleep(0.5) return self.vty.recv(65535).decode("utf-8") def h3c_config(self): # 新华三设备的配置方法 try: self.transport() self.open_vty() except Exception: return print(f"{self.ip} SSH 连接失败!") with open("h3c.txt", mode="r", encoding="utf-8") as f: for i in f.readlines(): self.vty.send(i) time.sleep(0.5) return self.vty.recv(65535).decode("utf-8") df = pd.read_excel("Excel.xlsx") # 读取Excel表格,并以字典的形式存在在列表中 name = [] for index, row in df.iterrows(): row = row.fillna("") row = dict(row) name.append(row) if __name__ == "__main__": while True: # 写入一个有条件的死循环,对保存表格信息的列表进行判断并执行相对应的操作 if len(name) > 0: if name[0]["device"] == "huawei": r = Devnet(name[0]["ip"], name[0]["port"], name[0]["username"], name[0]["password"]).huawei_config() time.sleep(0.5) print(r) del name[0] elif name[0]["device"] == "cisco": r = Devnet(name[0]["ip"], name[0]["port"], name[0]["username"], name[0]["password"]).cisco_config() time.sleep(0.5) print(r) del name[0] elif name[0]["device"] == "h3c": r = Devnet(name[0]["ip"], name[0]["port"], name[0]["username"], name[0]["password"]).cisco_config() time.sleep(0.5) print(r) del name[0] else: break
验证
二次验证,模拟刷syslog命令(文本文档已修改)