当前位置:首页>python>Python一键自动备份华为、华三、思科路由器交换机配置

Python一键自动备份华为、华三、思科路由器交换机配置

  • 2026-10-10 13:41:46
Python一键自动备份华为、华三、思科路由器交换机配置

点击上方网络技术干货圈,选择设为星标

优质文章,及时送达

转载请注明以下内容:

来源:公众号【网络技术干货圈】

作者:圈圈

ID:wljsghq

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

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

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

好处太多了:

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

简单说,省时间、省心、还能在领导面前露一手“自动化牛人”。

准备工作:5分钟搞定环境(超简单)

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

  1. Python:装3.8以上就行,我用的是3.11。官网下载或者用Anaconda,都行。
  2. 关键库:只用一个神器——Netmiko!

在命令行敲:

pip install netmiko pyyaml

Netmiko专门为网络设备设计的,支持100+种厂商,包括咱们的华为、华三、思科。它帮你处理了SSH登录、命令发送、分页问题,简直是懒人福音。

  1. 设备清单:我推荐用YAML文件存设备信息(比Excel好看多了)。新建一个devices.yaml,内容像这样:
devices:  - host: 192.168.1.1    device_type: cisco_ios    username: admin    password: yourpassword    secret: enablepassword   # Cisco需要enable模式  - host: 192.168.1.2    device_type: huawei    username: admin    password: yourpassword  - host: 192.168.1.3    device_type: hp_comware   # 华三用这个    username: admin    password: yourpassword

密码明文不安全?后面我会教你用getpass或者keyring加密。

核心脚本:从最简单版开始写

咱们一步步来。先写一个能备份单台设备的脚本,跑通了再扩展。

新建backup.py,代码我直接贴出来(复制粘贴就能用):

from netmiko import ConnectHandlerfrom datetime import datetimeimport os# 设备信息device = {    'device_type': 'cisco_ios',  # 改成huawei或hp_comware试试    'host': '192.168.1.1',    'username': 'admin',    'password': 'yourpassword',    'secret': 'enablepassword',  # Cisco专用}# 连接设备net_connect = ConnectHandler(**device)net_connect.enable()  # 进入特权模式# 备份命令(不同厂商不一样)if device['device_type'] == 'cisco_ios':    output = net_connect.send_command('show running-config')elif device['device_type'] == 'huawei':    output = net_connect.send_command('display current-configuration')elif device['device_type'] == 'hp_comware':    output = net_connect.send_command('display current-configuration')# 保存文件today = datetime.now().strftime('%Y%m%d_%H%M')hostname = net_connect.find_prompt().strip('#>')filename = f"{hostname}_{today}.cfg"os.makedirs('backups', exist_ok=True)with open(f'backups/{filename}', 'w', encoding='utf-8') as f:    f.write(output)print(f"✅ 备份成功!文件:{filename}")net_connect.disconnect()

跑一下试试!看到“备份成功”四个字,是不是超级有成就感?

我当时第一次跑通的时候,高兴得直接截图发群里了😂

多设备+定时运行:真正实现“自动”

单台太弱了,咱们改成批量。把devices.yaml读进来,循环就行。

完整版代码(我已经帮大家优化好了):

import yamlfrom netmiko import ConnectHandlerfrom datetime import datetimeimport osimport logging# 设置日志logging.basicConfig(filename='backup.log', level=logging.INFO)def backup_device(dev):    try:        net_connect = ConnectHandler(**dev)        net_connect.enable()        # 根据厂商选命令        cmd = {            'cisco_ios': 'show running-config',            'huawei': 'display current-configuration',            'hp_comware': 'display current-configuration'        }.get(dev['device_type'], 'show running-config')        output = net_connect.send_command(cmd)        net_connect.disconnect()        # 保存        today = datetime.now().strftime('%Y%m%d_%H%M')        hostname = dev['host'].replace('.', '_')        filename = f"backups/{hostname}_{today}.cfg"        os.makedirs('backups', exist_ok=True)        with open(filename, 'w', encoding='utf-8') as f:            f.write(output)        logging.info(f"✅ {dev['host']} 备份成功")        return True    except Exception as e:        logging.error(f"❌ {dev['host']} 备份失败: {str(e)}")        return False# 主程序with open('devices.yaml') as f:    devices = yaml.safe_load(f)['devices']success_count = 0for dev in devices:    if backup_device(dev):        success_count += 1print(f"🎉 本次备份完成!成功{success_count}/{len(devices)}台")

定时怎么搞?

  • Linux服务器(推荐):用crontab
0 2 * * * /usr/bin/python3 /path/to/backup.py   # 每天凌晨2点跑
  • Windows:任务计划程序,或者装APScheduler库,纯Python定时,更灵活。

我现在就放在公司的一台小Linux服务器上,每天自动跑,从来没掉链子。

跑着跑着遇到问题别慌,我把最常见的都列出来:

  • 连接超时:设备SSH没开,或者防火墙挡了。检查一下ip ssh version 2。
  • 分页问题:Netmiko默认处理了,但华为有时候要加net_connect.send_command('screen-length 0 temporary')。
  • 华为VRP8:device_type用huawei_vrp更稳。
  • 密码里有特殊字符:YAML里记得用引号包起来。
  • 权限不够:Cisco要加secret字段进enable模式。

我当初也被这些坑过,现在脚本里都加了try-except和重试机制,基本不会卡死。

---END---
重磅!网络技术干货圈-技术交流群已成立
扫码可添加小编微信,申请进群。
一定要备注:工种+地点+学校/公司+昵称(如网络工程师+南京+苏宁+猪八戒),根据格式备注,可更快被通过且邀请进群
▲长按加群

最新文章

随机文章