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命令(文本文档已修改)


