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

后来我琢磨:为啥不让Python帮我干呢? 它24小时不睡觉,定时自动跑,备份完还给我发个邮件说“老李,今天一切OK”。结果呢?现在我每周只花5分钟检查一下备份文件夹,剩下的时间可以喝茶看文档。
网络设备配置就像咱们的“家底”,一旦丢了,后果很严重。我以前就吃过亏:有一次核心交换机重启,配置没保存,重启后全没了。客户业务中断了2小时,我跟同事俩人熬夜手动恢复,领导在旁边急得直转圈。从那以后,我下定决心:备份必须自动化!
自动备份的好处:
别担心,不用装一大堆东西。
netmiko(专门用于网络设备的SSH连接,支持几十种厂商)和 paramiko(底层SSH协议)。打开命令行(CMD或终端),敲下面两行就行:pip install netmikopip install paramikoNetmiko是一个Python库,用于自动化SSH连接到网络设备。它支持多种设备类型,并提供了简洁的API来执行命令、文件传输等操作。Paramiko则是Python实现的SSHv2协议库,是Netmiko的基础。

下面这个脚本是我实战中一直在用的,支持华为、华三、思科三种主流厂商的设备。它会自动连接设备,执行相应的查看配置命令,然后把配置保存到以当天日期命名的文件里。
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即可。脚本会自动处理登录、发送命令、接收输出的全过程。
我在写这个脚本的时候,踩过不少坑,分享出来你们可以避开:
1. 设备类型(device_type)不能错
cisco_ios 或者 cisco_nxoshuaweihp_comware(注意不是 h3c,历史原因)2. 分屏显示要关闭
terminal length 0screen-length 0 temporaryscreen-length disable如果不关,配置内容会分成多页,需要手动敲空格,脚本就卡住了。
3. 特权模式(enable)
思科设备默认进入的是用户模式,必须使用enable()方法进入特权模式才能执行show running-config。
脚本写好了,怎么让它每天自动跑呢?这需要操作系统的定时任务。
python,参数填你脚本的完整路径,例如:D:\scripts\backup_network.py# 编辑定时任务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设置好后,脚本就会在后台默默工作,每天早上你只需要检查一下备份文件夹就行。
基础的备份已经搞定,但我们可以让这个脚本更强大:
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
