针对公司华为和思科多台设备进行批量备份配置,调用excel表格进行设备ip、账号、密码读取,通过SSH登录进行查看配置,将显示的配置存入到文件中保存到本地,excel分Huawei和Cisco两个工作表,表第一行参照下面表格, 也可根据表内容修改代码中变量赋值,将excel同脚本放在同一目录,第一次运行需要安装对应的库。水平有限,只为记录自己,不喜勿喷,欢迎大佬们指点。
Host | IP | Username | Password |
# -*- coding: utf-8 -*-
# @Date: 2020/11/3
# @Author : Crayon
# @File : Backup-Network.py
# @Software: PyCharm
import paramiko
import xlrd
import time
from datetime import datetime
#打开NetworkInfo.xlsx
workbook=xlrd.open_workbook('NetworkInfo.xlsx')
#按工作表名称选择Huawei工作表
sheet=workbook.sheet_by_name('Huawei')
#排除第一行后,遍历所有行的数据
for a in range(1,sheet.nrows):
#将一行数据传给info数组
info=sheet.row_values(a)
#按数组下标赋值给对应变量
host=str(info[0])
ip=str(info[1])
username=str(info[2])
password=str(info[3])
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
command=ssh_client.invoke_shell()
#设置回显内容不分屏显示
command.send("screen-length 0 temporary " +"\n")
#获取交换机运行配置
output=(command.send("dis cu" +"\n"))
#程序暂停10秒
time.sleep(10)
#将查询运行配置的回显内容赋值给recv这个对象
conf=command.recv(655355).decode("utf8","ignore")
#读取当前时间
now=datetime.now()
#打开备份文件
backup=open(r"D:\backup\\"+str(now.year)+"-"+str(now.month)+"-"+str(now.day)+"-"+host+"-"+ip+".txt","a+")
#将回显内容写入backup这个对象,相当于写入了备份文件中
backup.write(conf)
#关闭打开的文件
backup.close()
workbook=xlrd.open_workbook('NetworkInfo.xlsx')
#按工作表名称选择Cisco工作表
sheet=workbook.sheet_by_name('Cisco')
for b in range(1,sheet.nrows):
info=sheet.row_values(b)
host=str(info[0])
ip=str(info[1])
username=str(info[2])
password=str(info[3])
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
command=ssh_client.invoke_shell()
#设置回显内容不分屏显示
command.send("terminal length 0" +"\n")
output=(command.send("show run" +"\n"))
time.sleep(10)
conf=command.recv(65535).decode("utf8","ignore")
now=datetime.now()
backup=open(r"D:\backup\\"+str(now.year)+"-"+str(now.month)+"-"+str(now.day)+"-"+host+"-"+ip+".txt","a+")
backup.write(conf)
backup.close()
#结束,断开SSH连接
ssh_client.close()