使用方法
一、
1、将devlist_IP目录及network_backup.py文件放在同一目录内
2、直接运行network_backup.py,即可完成自动批量备份交换机
二、目录说明
1、备份的文件统一存放至目录:net_config_backup,如无此文件夹,运行脚本后会自动创建
2、交换机登录信息统一存放至devlist.txt文本里,位置:devlist_IP\devlist.txt
三、
编辑目录devlist_IP里的devlist.txt,填入需要备份配置的交换机信息,每行一台
格式:
设备名称,设备厂家,IP,用户名,密码
注:厂家(huawei_对应华为,hp_comware_对应H3C,cisco_ios_对应思科、浪潮)
设备名(这里随便写),厂家(huawei,hp_comware,cisco_ios),IP,ssh用户名,ssh密码
例子:
LJQ,huawei,10.1.1.1,ljq,admin@123
huawei_2,huawei,10.1.1.2,dell,admin@123
huawei_3,huawei,10.1.1.3,test,admin@123
办公楼POE交换机,huawei,10.1.1.4,ljq,admin@12345
办公楼一楼交换机,huawei,10.1.1.5,ljq,admin@1234
from netmiko import ConnectHandler
import time
import os
import shutil
from multiprocessing.dummy import Pool
#python 3.10.5
#netmiko 4.1.1
#版本说明,此版本是多进程并行运行,登录设备使用的是SSH方式
#通过devlist_IP/devlist.txt文件读取登录信息
#生成以设备描述名称_登录IP_日期.log 命名的配置备份文件,存放在net_config_backup目录下对应的文件夹里
#定义全局变量
today = time.strftime("%Y%m%d-%H%M", time.localtime()) #获取本地时间,打印效果:20220806-2149
dis_config = 'dis cur' #华为、H3C,查看配置命令
show_config = 'show run' # 思科查看配置命令
back_path = 'net_config_backup' #文件路径,在此目录下存放不同时间段生成的备份目录
backuperror_result = [] #存放备份失败的结果
def ssh_session(devlist): ##定义备份函数
list= devlist.split( ",") #以逗号分割字符串,生成列表
hostname = str( list[0]) #设备名
devtype = list[1] # 设备厂商
ip = list[2] # 登陆ip
name = list[3] #登陆用户名
devpasswd = list[4] #登陆密码
if devtype == 'hp_comware': #H3C设备
net_connect = ConnectHandler(
device_type=devtype,
ip=ip,
username=name,
password=devpasswd,
)
logname =back_path + "/" + back_path +'_' + today + "/"+ hostname + "__" + ip + "__" + today + ".log"
time.sleep(2)
output = net_connect.send_command(dis_config)
wr = open(logname, 'w', encoding='utf-8')
wr.write(output)
wr.close
try:
if devtype == 'huawei': #华为设备
net_connect = ConnectHandler(
device_type=devtype,
ip=ip,
username=name,
password=devpasswd,
)
logname =back_path + "/" + back_path +'_' + today + "/"+ hostname + "__" + ip + "__" + today + ".log"
time.sleep(2)
output = net_connect.send_command(dis_config)
wr = open(logname, 'w', encoding='utf-8')
wr.write(output)
wr.close
except:
re_error = '连接'+hostname+'_'+ip+'失败'
backuperror_result.append(re_error)
# print(re_error)
else:
re_yes = print('备份'+hostname+'_'+ip+'完成')
backuperror_result.append(re_yes)
if devtype == 'cisco_ios': #思科浪潮设备
net_connect = ConnectHandler(
device_type=devtype,
ip=ip,
username=name,
password=devpasswd,
)
logname =back_path + "/" + back_path +'_' + today + "/"+ hostname + "__" + ip + "__" + today + ".log"
time.sleep(2)
output = net_connect.send_command(show_config)
wr = open(logname, 'w', encoding='utf-8')
wr.write(output)
wr.close
start = time.time() #程序开始时间
if os.path.exists(back_path + "/" + back_path +'_' + today + "/"): #判断文件夹是否存在,如有同名文件夹则删除
shutil.rmtree(back_path + "/" + back_path +'_' + today + "/") #删除已有文件夹
os.makedirs(back_path + "/" + back_path +'_' + today + "/") #创建文件夹
# time.sleep(2) #停滞2S
with open(r'devlist_IP\devlist.txt','r',encoding='utf-8') as f: #读取登录信息
devlist= f.readlines()
SW_DL = [] #存放登录信息的列表
for line in devlist:
line = line.replace('\n', '') #去除\N
line = line.replace(' ', '') #去除空格
SW_DL.append(line) #将每一行登录信息存进列表里
# 实例化一个进程池
pool = Pool()
# 调用进程执行函数
pool.map(ssh_session,SW_DL)
end = time.time()#程序结束时间
for i in backuperror_result:
if i !=None:
print(i)
print ('备份完成,用时:'+ str(end-start))