# SwitchConfigBackup **Repository Path**: alkaid_yang/switchconfigbackup ## Basic Information - **Project Name**: SwitchConfigBackup - **Description**: 网络设备配置备份 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-06-23 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 🌟 项目简介 本脚本基于 Netmiko 网络自动化库开发,支持多厂商网络设备(如新华三、华为、锐捷、思科等)的配置批量备份。适用于小型网络运维场景中的设备配置定期备份。 ✨ **特别说明**: - 本脚本主要功能由 AI 协助完成,作者非专业程序员,可能存在局限性。 - 建议先在测试环境验证功能,再应用于生产环境。 ## 🚀 快速开始 📦安装依赖: ```python pip install -r requirements.txt ``` 📝配置设备清单: - `configs/entry_table.csv` - `configs/commands.json` - `configs/base_dir.json` 🚀运行脚本: ```shell python main.py ``` 📦 发布包: ```plaintext 📦 发布包 ├── main.exe # 主程序 └── _internal/ # 程序资源目录 ├── configs/ # 配置文件目录 │ ├── entry_table.csv # 设备清单 │ ├── commands.json # 命令配置 │ └── base_dir.json # 备份目录配置 └── ... # 其他依赖文件 ``` 双击 `main.exe` 运行,程序会自动生成日志文件在同级目录。 ## ⚡ 脚本特点 - 🔌 **多厂商支持**:通过 `commands.json` 灵活配置,支持 Netmiko 兼容的所有设备(如 Juniper、Arista 等)。 - ⚡ **高性能并发**:多线程进程池加速批量备份,大幅缩短耗时。 - 📅 **自动化目录管理**:按时间戳生成层级化备份目录(年/月/日期-时分),避免文件覆盖。 - 📋 **双日志系统**:控制台实时输出 + 文件日志存储,便于监控与追溯。 - ⚙️ **灵活配置**:支持 SSH/Telnet 登录、自定义备份根目录、编码格式适配。 ## 📁 目录结构 ```plaintext 📦 项目根目录 ├── main.py # 📌 主程序入口文件:程序启动入口,协调各模块执行 ├── config_manager.py # ⚙️ 配置管理模块:处理配置文件读取/验证/备份目录创建 ├── device_manager.py # 🔌 设备管理核心模块:实现设备连接/命令执行/备份结果处理 ├── logger_utils.py # 📝 日志系统模块:初始化双日志系统(控制台+文件) └── configs/ # 🗂️ 配置文件目录 ├── base_dir.json # 📁 备份根目录配置 ├── commands.json # ⚡ 设备命令配置 └── entry_table.csv # 📋 设备清单表 ``` ### 📊 设备清单配置(entry_table.csv) 存储设备登录信息,供脚本建立连接使用。其中每行代表一台设备,8 个字段以英文逗号分隔。 📁**文件结构**: ```csv SW-H3C-01,hp_comware,192.168.1.1,admin,Password123!,22,gbk, SW-Huawei-02,huawei_telnet,192.168.1.2,user,Pass@word,23,utf-8, SW-Ruijie-03,ruijie_os,192.168.1.3,admin,锐捷密码,22,utf-8,enablepass ``` | 序号 | 字段名 | 必填✅ | 说明 | | :---: | :------: | :---: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | 设备名称 | 是 | 用于标识设备,配置文件名将包含此名称(如 `192.168.1.1(SW-H3C-01).cfg`)。 | | 2 | 设备类型 | 是 | Netmiko 支持的设备类型(如 `hp_comware`),Telnet 设备需后缀 `_telnet`。 | | 3 | IP 地址 | 是 | 设备管理 IP。 | | 4 | 用户名 | 是 | 登录设备的用户名(如 `admin`)。 | | 5 | 登录密码 | 是 | 登录设备的密码(明文存储,建议确保环境安全)。 | | 6 | 端口号 | 是 | 默认 `22`(SSH),Telnet 需填 `23`。 | | 7 | 编码格式 | 是 | 设备返回内容的编码(如 `gbk`、`utf-8`),需与设备控制台一致。Netmiko 默认使用 UTF-8 编码解析设备返回的字节流。若设备实际使用 GBK 发送中文内容(如 `description 办公区`),直接按 UTF-8 解析会导致乱码(如 `订公区`)。 | | 8 | 特权密码 | 否 | 思科/锐捷设备进入特权模式的密码,非此类设备可留空。 | 🔌 **设备类型参考**: - 新华三:`hp_comware`(SSH)、`hp_comware_telnet`(Telnet) - 华为:`huawei`(SSH)、`huawei_telnet`(Telnet) - 锐捷:`ruijie_os`(SSH) - …… ### 📝设备命令配置(commands.json) 核心配置文件,按设备类型定义执行命令,支持动态扩展。 📁**文件结构**: ```json { "设备类型标识": { "命令键名": "实际CLI命令" } } ``` - 根对象:整个配置是一个 JSON 对象,每个键对应一种设备类型。 - 设备类型标识:键名(如 `"hp_comware"`)对应 `entry_table.csv` 中的 `device_type` 字段。 - 命令对象:每种设备类型对应一个子对象,包含该类型设备需要执行的命令。 - 命令键值对: - 命令键名:仅用于标识命令(如 `"cmd_config"`),无实际语义。 - 实际 CLI 命令:设备实际执行的命令(如 `"display current-configuration"`)。 ⚙️**配置示例**: ```json { "hp_comware": { "cmd_config": "display current-configuration", "cmd_version": "display version", "cmd_interface": "display interface" }, "huawei": { "cmd_config": "display current-configuration", "cmd_vlan": "display vlan" } } ``` 脚本会根据 `entry_table.csv` 中的 `device_type` 字段选择对应的命令节。例如,若设备类型为 `hp_comware`,则执行 `hp_comware` 节下的所有命令。 📌 **扩展说明**: 如果需要为已有的设备类型(如 `hp_comware`)添加新命令,只需在对应的子对象中添加键值对: ```json { "hp_comware": { "cmd_config": "display current-configuration", "cmd_version": "display version", "cmd_interface": "display interface", "cmd_arp": "display arp" }, "huawei": { …… } } ``` 如果需要支持新的设备类型(如 `cisco_ios`),只需在根对象中添加一个新的键值对: ```json { "hp_comware": { …… }, "huawei": { …… }, "ruijie_os": { "cmd_run": "show running-config", "cmd_start": "show startup-config" } } ``` ### 🗄️备份目录配置(base_dir.json) 定义备份根目录,支持跨平台路径。 📁**文件结构**: ```json { "backup": { "default_dir": "" } } ``` 若留空(`""`),脚本将自动使用脚本运行时的当前目录作为备份根目录。 ⚙️**配置示例**: ```json { "backup": { "default_dir": "D:\network_backup" } } ``` 或者: ```json { "backup": { "default_dir": "/data/network_backup" } } ``` ## ⚠️注意事项 1. 🔒**安全风险**:`entry_table.csv` 存储明文密码,建议仅在安全环境使用,或加密敏感信息。 2. 📉**编码问题**:若日志乱码,检查 `entry_table.csv` 中编码格式是否与设备一致-。 3. ⏳**设备兼容性**:老旧设备或高延迟网络可能导致配置回显不完整,脚本已使用 `send_command_timing()` 延迟收集优化。 4. 🔑**权限要求**:确保设备开启 SSH/Telnet,且用户具备查看配置的权限。