1. 项目概述
作为一名网络工程师,我经常需要管理数十台华为交换机,每次手动登录设备检查状态、备份配置都耗费大量时间。为了解决这个问题,我开发了一个基于Python的自动化脚本工具,能够批量完成华为交换机的巡检和配置备份工作。这个工具完全基于SSH协议与设备交互,无需依赖SNMP,特别适合中小型网络环境使用。
这个工具的核心价值在于:
- 完全自动化执行常规维护任务,将原本需要数小时的工作缩短到几分钟
- 采用直观的Excel格式输出巡检报告,便于存档和分析
- 无需专业网管系统,在普通Windows电脑上即可运行
- 代码开源可定制,能根据实际需求灵活调整功能
2. 环境准备与配置
2.1 Python环境安装
推荐使用Python 3.7+版本,这个版本的稳定性和兼容性都经过充分验证。安装时务必勾选"Add Python to PATH"选项,这是很多新手容易忽略的关键步骤。
安装完成后,在CMD中执行以下命令验证:
bash复制python --version
pip --version
如果都能正确显示版本号,说明基础环境已经就绪。
2.2 依赖库安装
这个项目主要依赖以下几个Python库:
- Netmiko:网络设备自动化管理的瑞士军刀,支持SSH连接和命令交互
- Pandas:强大的数据处理工具,用于整理和输出巡检结果
- openpyxl:处理Excel文件的利器,兼容.xlsx格式
- xlwt:生成老式.xls格式的Excel文件
安装命令如下:
bash复制pip install netmiko pandas openpyxl xlwt
注意:在企业内网环境可能会遇到pip安装失败的情况。这时候可以尝试:
- 使用临时热点连接互联网
- 配置pip国内镜像源(如清华源)
- 下载whl文件离线安装
3. 脚本工作原理详解
3.1 SSH交互流程设计
脚本的核心是通过SSH协议模拟人工操作,主要交互流程如下:
- 建立SSH连接:使用Netmiko的ConnectHandler类
- 进入特权模式:发送"system-view"命令
- 执行巡检命令:如"display device"、"display interface"等
- 捕获命令输出:通过正则表达式提取关键信息
- 断开连接:完成所有操作后安全退出
一个典型的连接代码示例:
python复制from netmiko import ConnectHandler
huawei = {
'device_type': 'huawei',
'host': '192.168.1.1',
'username': 'admin',
'password': 'Admin@123',
'port': 22,
}
connection = ConnectHandler(**huawei)
output = connection.send_command('display version')
print(output)
connection.disconnect()
3.2 巡检指标设计
脚本主要检查以下关键指标:
- 设备基本信息:型号、序列号、软件版本
- CPU/内存利用率:通过"display cpu-usage"和"display memory-usage"获取
- 接口状态:up/down状态、收发包错误计数
- 日志信息:最近的重要告警事件
- 配置变更:与上次备份的配置差异
每个指标都设置了合理的阈值,当超过阈值时会在报告中标记为异常。
3.3 配置备份机制
配置备份采用增量备份策略:
- 首次备份保存完整配置
- 后续备份只保存与上次的差异部分
- 备份文件按"设备IP_日期时间.cfg"格式命名
- 自动压缩历史备份文件节省空间
备份的核心命令是:
bash复制display current-configuration
4. 使用指南与实操步骤
4.1 配置文件准备
项目根目录下的resource.xlsx是核心配置文件,包含以下工作表:
- 设备清单:IP地址、登录凭证、设备类型
- 巡检命令:需要执行的CLI命令列表
- 告警规则:定义各种指标的告警阈值
配置示例:
| IP地址 | 用户名 | 密码 | 设备类型 |
|---|---|---|---|
| 192.168.1.1 | admin | Admin@123 | S5700 |
4.2 脚本执行方法
推荐的操作步骤:
- 打开CMD窗口
- 切换到脚本目录:
bash复制cd /d D:\NetworkAutoTool
- 运行主程序:
bash复制python main.py
执行过程会显示实时进度,完成后会在output目录生成:
- 巡检报告_日期.xlsx
- 配置备份_日期.zip
4.3 结果解读技巧
生成的Excel报告包含多个工作表:
- 汇总表:所有设备的健康状态概览
- 详细数据:每个设备的各项指标数值
- 异常清单:需要重点关注的问题列表
重点关注以下异常:
- CPU利用率持续高于70%
- 内存使用率超过80%
- 接口存在大量错误包
- 关键服务状态异常
5. 常见问题与解决方案
5.1 连接问题排查
问题现象:SSH连接超时或失败
排查步骤:
- 确认网络可达性:ping测试
- 检查SSH服务:设备是否开启SSH
- 验证凭证:使用相同凭证手动登录测试
- 检查ACL:是否有访问控制限制
5.2 命令执行异常
问题现象:命令无输出或输出不完整
解决方案:
- 增加命令超时时间:
python复制output = connection.send_command('display interface', delay_factor=2)
- 使用分页命令处理长输出:
python复制output = connection.send_command('display current-configuration', expect_string=r'---- More ----')
5.3 性能优化建议
当管理大量设备时,可以:
- 启用多线程处理:同时连接多台设备
- 实现断点续传:记录已完成设备,避免重复操作
- 使用连接池:复用SSH会话提升效率
示例代码:
python复制from concurrent.futures import ThreadPoolExecutor
def check_device(device):
# 设备检查逻辑
pass
with ThreadPoolExecutor(max_workers=5) as executor:
executor.map(check_device, device_list)
6. 进阶开发指南
6.1 功能扩展思路
- 自动修复功能:发现异常后自动执行修复命令
- 拓扑发现:通过LLDP协议自动绘制网络拓扑
- 性能趋势分析:对历史数据进行统计分析
- 微信/邮件告警:集成消息通知功能
6.2 安全增强建议
- 使用SSH密钥替代密码认证
- 配置文件中加密存储密码
- 实现操作审计日志
- 限制脚本执行权限
加密存储示例:
python复制from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
encrypted_pwd = cipher_suite.encrypt(b'Admin@123')
6.3 企业级部署方案
对于大规模网络环境,建议:
- 部署中央调度服务器
- 使用数据库存储结果
- 实现Web管理界面
- 设置定时自动执行任务
我在实际使用中发现,这个脚本最实用的功能是配置备份和变更检测。有次网络故障后,我们通过对比前后配置快速定位了问题原因,这比手动检查效率高了至少10倍。建议重点完善这部分功能,比如增加配置版本对比可视化工具。