当前位置:首页>python>Python一键自动备份:华为/华三/思科路由器交换机配置保存再也不用手动敲!

Python一键自动备份:华为/华三/思科路由器交换机配置保存再也不用手动敲!

  • 2026-09-10 19:18:43
Python一键自动备份:华为/华三/思科路由器交换机配置保存再也不用手动敲!

曾经月底审计前,我捧着U盘一台接一台Telnet,敲到手抽筋;直到有一天,我决定让Python替我007

01、为什么你需要一个自动备份脚本

以前啊,我最怕的就是月底审计要配置备份。几十台华为、华三、思科的路由器交换机,一台一台SSH上去,敲 display current-configuration 或者 show running-config,然后手动复制粘贴保存……哎哟,敲到手软不说,万一漏一台或者版本不对,领导问起来我只能尴尬笑。

后来我琢磨:为啥不让Python帮我干呢? 它24小时不睡觉,定时自动跑,备份完还给我发个邮件说“老李,今天一切OK”。结果呢?现在我每周只花5分钟检查一下备份文件夹,剩下的时间可以喝茶看文档。

网络设备配置就像咱们的“家底”,一旦丢了,后果很严重。我以前就吃过亏:有一次核心交换机重启,配置没保存,重启后全没了。客户业务中断了2小时,我跟同事俩人熬夜手动恢复,领导在旁边急得直转圈。从那以后,我下定决心:备份必须自动化!

自动备份的好处:

  • 每天自动跑,不用记“今天备份了吗?”
  • 支持华为(VRP)、华三(Comware)、思科(IOS/NX-OS)三种主流设备,一套代码全搞定
  • 备份带时间戳和设备名,查找历史配置超方便
  • 故障恢复时,直接复制粘贴就行,速度起飞

02、准备工作:5分钟搞定环境

别担心,不用装一大堆东西。

  • Python:装3.8以上就行,我用的是3.11。官网下载或者用Anaconda,都行。
  • 必要的库:我们只需要两个主要的库 —— netmiko(专门用于网络设备的SSH连接,支持几十种厂商)和 paramiko(底层SSH协议)。打开命令行(CMD或终端),敲下面两行就行:
pip install netmikopip install paramiko

Netmiko是一个Python库,用于自动化SSH连接到网络设备。它支持多种设备类型,并提供了简洁的API来执行命令、文件传输等操作。Paramiko则是Python实现的SSHv2协议库,是Netmiko的基础。

03、核心脚本:一键备份华为/华三/思科

下面这个脚本是我实战中一直在用的,支持华为、华三、思科三种主流厂商的设备。它会自动连接设备,执行相应的查看配置命令,然后把配置保存到以当天日期命名的文件里。

import osimport timefrom datetime import datetimefrom netmiko import ConnectHandlerimport paramiko# 干掉警告信息(看着舒服点)paramiko.util.log_to_file("paramiko.log")# 备份文件夹设置BACKUP_DIR = "network_backups"ifnot os.path.exists(BACKUP_DIR):    os.makedirs(BACKUP_DIR)    print(f"创建备份目录: {BACKUP_DIR}")# 设备列表:在这里添加你的设备(支持华为、华三、思科)devices = [    {'device_type': 'cisco_ios',        # 思科IOS设备'host': '192.168.1.1','username': 'admin','password': 'cisco123','secret': 'enable123',              # 思科的特权密码(enable密码)'name': 'Core-Switch-Cisco'# 自定义设备名    },    {'device_type': 'huawei',             # 华为VRP设备'host': '192.168.1.2','username': 'admin','password': 'huawei123','name': 'Access-Huawei'    },    {'device_type': 'hp_comware',         # 华三Comware设备(注意:华三用这个类型)'host': '192.168.1.3','username': 'admin','password': 'h3c123','name': 'Core-H3C'    },# 在这里继续添加更多设备...]defbackup_device_config(device):"""备份单个设备的配置"""    device_name = device.get('name', device['host'])    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")    filename = f"{BACKUP_DIR}/{device_name}_{timestamp}.txt"    print(f"开始备份: {device_name} ({device['host']})")try:# 建立SSH连接        connection = ConnectHandler(**device)# 进入特权模式(如果是思科的话)if device['device_type'] == 'cisco_ios'and'secret'in device:            connection.enable()            print("已进入特权模式")# 根据设备类型执行不同的查看配置命令if device['device_type'] == 'cisco_ios':# 思科:先设置终端长度无限,再查看运行配置            connection.send_command("terminal length 0")            config = connection.send_command("show running-config")elif device['device_type'] == 'huawei':# 华为:先关闭分屏显示,再查看当前配置            connection.send_command("screen-length 0 temporary")            config = connection.send_command("display current-configuration")elif device['device_type'] == 'hp_comware':# 华三:先关闭分屏,再查看当前配置            connection.send_command("screen-length disable")            config = connection.send_command("display current-configuration")else:            config = connection.send_command("show running-config")  # 默认# 保存配置到文件with open(filename, 'w', encoding='utf-8') as f:            f.write(f"# 设备: {device_name} ({device['host']})\n")            f.write(f"# 备份时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")            f.write("#" + "="*50 + "\n\n")            f.write(config)        print(f"✅ 备份成功: {device_name} -> {filename}")# 断开连接        connection.disconnect()returnTrueexcept Exception as e:        print(f"❌ 备份失败 {device_name}: {str(e)}")returnFalsedefbackup_all_devices():"""备份所有设备"""    print(f"开始批量备份,共 {len(devices)} 台设备")    print("="*50)    success_count = 0    fail_count = 0for device in devices:if backup_device_config(device):            success_count += 1else:            fail_count += 1        time.sleep(2)  # 每台设备间隔2秒,避免连接过快    print("="*50)    print(f"备份完成: 成功 {success_count} 台, 失败 {fail_count} 台")if __name__ == "__main__":    print("网络设备自动备份脚本启动")    backup_all_devices()

这个脚本的核心是netmiko库,它封装了各种厂商设备的连接细节,我们只需要指定正确的device_type即可。脚本会自动处理登录、发送命令、接收输出的全过程。

04、不同厂商的“坑”与应对

我在写这个脚本的时候,踩过不少坑,分享出来你们可以避开:

1. 设备类型(device_type)不能错

  • 思科IOS、IOS-XE、Nexus:都用 cisco_ios 或者 cisco_nxos
  • 华为VRP:huawei
  • 华三Comware:hp_comware(注意不是 h3c,历史原因)

2. 分屏显示要关闭

  • 思科:terminal length 0
  • 华为:screen-length 0 temporary
  • 华三:screen-length disable

如果不关,配置内容会分成多页,需要手动敲空格,脚本就卡住了。

3. 特权模式(enable)

思科设备默认进入的是用户模式,必须使用enable()方法进入特权模式才能执行show running-config。

05、让脚本自己跑起来:定时任务设置

脚本写好了,怎么让它每天自动跑呢?这需要操作系统的定时任务。

Windows系统(任务计划程序)

  1. 打开“任务计划程序”
  2. 创建基本任务,触发器选“每天”,时间设置成凌晨2点(网络设备不太忙的时候)
  3. 操作选择“启动程序”,程序填 python,参数填你脚本的完整路径,例如:D:\scripts\backup_network.py

Linux系统(Crontab)

# 编辑定时任务crontab -e# 每天凌晨2点执行备份脚本0 2 * * * /usr/bin/python3 /home/admin/scripts/backup_network.py# 每周日凌晨3点执行(另一种选择)0 3 * * 0 /usr/bin/python3 /home/admin/scripts/backup_network.py

设置好后,脚本就会在后台默默工作,每天早上你只需要检查一下备份文件夹就行。

06、进阶优化:让备份更智能

基础的备份已经搞定,但我们可以让这个脚本更强大:

1. 增加邮件通知

备份完成后发送邮件报告,让你第一时间知道结果:

import smtplibfrom email.mime.text import MIMETextdefsend_email(success, fail):    body = f"备份完成,成功: {success}, 失败: {fail}"    msg = MIMEText(body)# ... 邮件发送配置

2. 配置文件对比

备份完顺便和昨天的配置对比一下,如果发现有变化,重点提醒:

import difflibdefcompare_configs(yesterday_file, today_file):with open(yesterday_file) as f1, open(today_file) as f2:        diff = difflib.unified_diff(f1.readlines(), f2.readlines())# 如果有差异,记录下来

3. 多线程加速

如果你的设备有几十上百台,一个个备份太慢。可以用多线程并发备份:

from concurrent.futures import ThreadPoolExecutorwith ThreadPoolExecutor(max_workers=5) as executor:    executor.map(backup_device_config, devices)

4. 密码加密存储

直接写在脚本里的密码是明文,不安全。可以用pycryptodome库对密码进行AES加密,运行时再解密。

写在最后

有了这个Python脚本,我每周的工作从“手动敲几十台设备”变成了“看一眼备份日志”。刚开始写脚本可能花点时间,但一次投入,长期受益。不管你是刚入行的网络小白,还是经验丰富的老鸟,自动化备份绝对是值得花时间去搞的事情。

现在,你只需要把这个脚本放到服务器上,设置好定时任务,每天自动备份华为、华三、思科的配置,从此告别手动敲命令的日子。

添加小编微信

备注来源:岗位+昵称(例如:网络工程师+猪八戒)

深夜公司断网,我3分钟搞定网络故障,老板当场涨薪!

2026-03-16

华为 DHCP Snooping 标准配置 + 真实踩坑记录

2026-03-13

小龙虾 OpenClaw 网工与运维实战避坑指南:从“毛坯房”到“数字分身”的进阶之路

2026-03-12

适合网工运维用的7大顶级OpenClaw工具和集成【网工运维养虾必备】

2026-03-11

小龙虾OpenClaw:强大背后的安全隐忧,网工运维不可不防

2026-03-10

最新文章

随机文章