局域网交换机配置的自动备份方法研究
2024-01-03吕浩勇
胡 寅,吕浩勇
(黄冈师范学院 信息化建设办公室,湖北 黄冈 438000)
对于网络运维管理员来说,定期对局域网中的交换机配置进行备份非常必要,因为一旦交换机发生故障,备份的交换机配置将有助于快速恢复网络运行。交换机配置的备份最早是使用手工备份,以华三(H3C)交换机为例,在交换机命令行下,其手工备份方式通常有三种[1]:第一种连接设备,执行display current-configuration命令,将回显的信息复制到TXT文本文件中;第二种开启交换机ftp服务,然后将配置文件复制到计算机;第三种是使用TFTP服务器的方式,这也是最常使用的方式。但手工备份仅适用于小型、交换机数量较少的网络环境,对于设备数量较多的网络环境,这种方式需要运维管理人员花费较长的时间,影响工作效率。在较大规模的网络环境中,手工备份效率低下,可行性不高,如何快速、高效地对上百台交换机的配置进行备份,是网络运维人员迫切需要解决的问题[2-3]。
针对这一问题,以H3C交换机为例,分别提出利用Python语言提供的函数库编写交换机自动备份程序和使用H3C交换机自动备份功能两种方法,可在需要备份时,快速完成局域网中交换机的批量自动备份,以期有效提高网络管理员的工作效率。
1 基于Python的自动备份程序
Python语言是一种面向对象、解释型的计算机程序设计语言,由荷兰人Guido van Rossum于1989年末提出并随后设计实现。Python语言由于具有简单易学、免费开源、类库丰富、可扩展性强等特点,深受广大程序员的喜爱[4]。Netmiko类库是一个非常强大的Python网络管理类库,它是一个SSHV2开源项目,基于Paramiko类库开发,支持诸多厂商的网络设备,包括思科、华为、华三、Juniper等主要网络设备平台,且简化了回显结果和设备的配置命令,方便易用[5]。本研究探讨对H3C交换机设备的连接管理,Netmiko支持telnet、ssh协议的CLI连接,但有些设备是不支持telnet协议的。因此,出于安全考虑,网络设备建议采用ssh协议连接为主。
1.1 基于Python的备份程序设计
使用Python提供的netmiko、time、shutil等类库模块,用Python语言编写交换机配置的备份程序。其中,利用netmiko库提供的功能模块完成连接H3C交换机时,需要使用其相应的ConnectHandler方法,按照其数据结构提供包含设备类型、IP地址、用户名、密码字典参数。成功连接网络设备后,执行相关交换机命令,最后将回显信息保存,详细核心代码如下所示:
#下面定义几个全局变量
today = time.strftime("%Y-%m-%d", time.localtime()) #获取本地时间
# 下面代码检查并生成备份文件夹
if os.path.exists(back_path + today + "/"): #检查是否存在相关文件夹
shutil.rmtree(back_path + today + "/") #如已存在,则删除已有文件夹
os.mkdir(back_path + today + "/")
# 下面代码读取交换机信息
for line in sw_list.readlines():
line = line.replace(", ") #去除空格
list= line.split(", ") #以逗号进行分隔字段
sw_name = str(list[0]) #获取设备名称
sw_type = list[1] #获取设备类型,比如H3C的设备类型为hp_comware
ip = list[2] #获取设备IP地址
name = list[3] #获取设备管理员账号
sw_passwd = list[4] #获取设备管理员密码
#connecthandler设备连接类的数据结构,建立一个连接变量,并进行赋值
net_connect = ConnectHandler(
device_type=sw_type,
ip=ip,
username=name,password=sw_passwd,)
txtname =back_path + today + "/" + sw_name + "_" + ip + "_" + today + ".txt" #备份文件名称设定
time.sleep(2) #考虑到交换机延时,程序暂停2秒
#保存显示信息
wr.write(output) #将配置回显信息保存到指定文件
wr.close #执行完毕,关闭文件
执行程序前,先生成一个需要批量备份的网络设备清单。可以保存为“.csv”文件格式,也可以保存为其他格式文件,本研究为了便于管理采用“.csv”格式,网络设备备份清单格式如图1所示。
图1 网络设备备份清单
通过执行自动备份程序,批量备份的交换机配置会生成包含交换机名、交换机IP地址和时间信息的命名,并且将备份的配置文件保存在以备份日期命名的文件夹中。比如c:/auto_backup/switch_backup/2022-08-01/hexin_192.168.250.1_2022-08-01.txt,这样一个命名对于管理人员来说辨识非常方便,可直观地显示这是哪里的交换机,使用哪个IP地址,以及备份文件生成的日期是哪一天。备份实际结果如图2所示。
图2 备份结果
1.2 自动运行备份程序
完成Python备份程序的开发后,要实现自动备份可在Windows操作系统下,选择Windows“任务计划程序”设置自动定时运行。利用pyinstaller工具生成一个Windows下的可执行程序;在“任务计划程序”下,选择“创建基本任务”,按照步骤提示将生成的可执行程序添加进去;然后,设定好程序执行的时间和周期(根据需要,可以每天某个时间执行一次,或每周某一天执行一次),即可在Windows环境下定期执行备份程序,完成交换机配置的批量自动备份。
2 交换机自动备份功能
局域网中的交换机由于类型不同,采用定期自动的配置命令也不同,而且,不是所有的交换机都支持这一功能[6]。对于具备自动备份功能的交换机,使用这一方式进行自动备份,首先设定一台TFTP服务器,然后定期自动在交换机上执行自动备份命令后,相关配置文件就会自动上传到这个服务器指定的目录中。
以H3C交换机为例,要定期将交换机的配置文件自动备份到相关TFTP服务器,可使用job命令,将配置文件通过tftp命令传至tftp服务器,但需要在用户视图下完成。交换机的具体定期自动备份配置如下:
[C6_32U]job backup202207 #创建任务backup202207
[C6_32U-job-backup202207]view monitor #进入用户视图
[C6_32U-job-backup202207]time 1 repeating at 01∶00 week-day Sat command tftp 192.168.250.85 put config.cfg 192.168.250.231.cfg #配置定时执行任务,使设备在每个星期六1∶00进行备份
3 自动备份效果
自动备份能提升网络管理人员的工作效率。通过对两种自动备份方式进行比较,采用基于Python的自动备份程序更加便利:一是对所有的交换机都适用,不需要额外设置TFTP服务器;二是备份更灵活,可以随时自动运行程序进行批量备份。但采用这种方法的缺点是运维管理人员需要具备一定的编程水平。利用交换机自动备份功能,只适用于具备此功能的交换机,在文件传输过程中采用tftp协议,安全性较差,并需要进行额外的安全设置,且初次使用,需对每台交换机手动进行设置操作,但一旦设置完成,后期运行稳定性好,维护成本较低。本研究利用自动备份小程序,对106台交换机进行自动备份,共计用时11分钟19秒,平均一台6.3秒,远远高于人工备份的效率;采用交换机自动备份功能由于首次配置工作量较大,暂未进行大规模实际操作。
4 总结
为提高大中型局域网络环境中网络运维管理人员对大量交换机配置进行备份的效率,以H3C交换机为例,给出了两种有效的交换机批量自动备份方法。第一种方法通过利用netmiko库编写一个Python自动备份程序,达到批量备份的目的,并结合Windows操作系统的任务计划程序,设置了程序自动执行,从而使得自动备份程序可以定期自动运行。第二种方法利用H3C交换机的job自动备份命令,实现H3C交换机配置的自动批量备份。两种方法各有利弊,第一种方法方便实用,但需要运维管理人员具备一定的编程水平;第二种方法仅在交换机上就能完成自动备份设置,但不是所有的交换机都支持这一功能,而且第一次使用时需要分别在每台交换机上完成该配置,网络规模越大,需要的操作就越多。所以,实际运维中,管理员可根据实际情况,合理选择使用这两种方法,从而达到提高局域网设备自动备份的工作效率。