锐捷设备配置信息自动收集脚本:高效网络运维的得力助手
在网络日常运维中,定期收集设备配置信息是一项基础且重要的工作。无论是故障排查、版本审计还是配置备份,都需要快速获取准确的设备信息。本文将详细解析一个基于 Netmiko 的锐捷设备配置信息自动收集脚本,带你掌握网络设备信息自动化采集的核心方法。
脚本功能概述
这个 Python 脚本专为锐捷网络设备设计,能够实现以下核心功能:
- 自动登录多台锐捷设备(支持批量操作)
- 执行预设的配置查询命令(如
show run、show version等) - 将命令输出结果结构化保存到本地文件
- 自动处理文件命名和存储路径(默认保存到 macOS 下载目录)
- 包含完整的异常处理机制,确保操作可追溯
脚本设计简洁实用,特别适合网络工程师进行日常设备信息采集和配置备份工作。
技术基础与环境准备
核心依赖:Netmiko 库
脚本基于 Netmiko 实现设备交互,这是一个专为网络设备 SSH 管理设计的 Python 库,相比传统的 paramiko 库,它具有以下优势:
- 内置各厂商设备的命令解析逻辑
- 自动处理设备提示符识别和命令等待
- 简化复杂设备交互流程(如特权模式切换)
- 支持多种网络设备操作系统
安装方法:
bash
pip install netmiko
脚本核心代码解析
1. 基础配置与路径处理
python
运行
# 获取macOS下载目录路径(默认用户下载目录)
downloads_path = os.path.expanduser("~/Downloads")
# 生成时间戳(避免文件名重复)
timestamp = time.strftime("%Y%m%d_%H%M%S")
这段代码实现了两个关键功能:
- 使用
os.path.expanduser获取系统默认下载目录,确保文件保存位置符合用户习惯 - 生成精确到分钟的时间戳,避免多设备或多次执行时的文件名冲突
2. 设备信息与命令集定义
python
运行
# 设备信息(替换为实际设备信息)
network_info = [
{
'ip': '1.1.1.1',
'username': 'admin',
'password': 'Ruijie!@#0752',
'port': 22,
'device_type': 'ruijie_os'
},
]
# 需要收集的命令
commands = [
'show run',
'show version',
'show ip int brief'
]
network_info列表:存储设备连接信息,支持添加多台设备实现批量操作commands列表:定义需要执行的查询命令,可根据实际需求扩展(如添加show mac address-table等)device_type: 'ruijie_os':指定设备类型为锐捷 OS,确保 Netmiko 使用正确的交互逻辑
3. 主流程:连接设备与信息收集
python
运行
for info_dict in network_info:
device_ip = info_dict['ip']
# 定义文件保存路径
file_name = f"{device_ip}_{timestamp}.txt"
file_path = os.path.join(downloads_path, file_name)
try:
# 建立连接
ssh_conn = ConnectHandler(** info_dict)
print(f"\n{'#' * 20} 开始收集设备 {device_ip} 的信息 {'#' * 20}\n")
# 打开文件准备写入
with open(file_path, 'w', encoding='utf-8') as f:
# 写入文件头部信息
f.write(f"设备IP: {device_ip}\n")
f.write(f"收集时间: {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write("=" * 50 + "\n\n")
# 循环执行命令并保存结果
for cmd in commands:
print(f"===== 执行命令: {cmd} =====")
output = ssh_conn.send_command(cmd)
# 控制台打印与文件写入...
这段核心代码实现了:
- 遍历设备列表,逐个处理
- 为每台设备创建独立的输出文件(命名格式:
IP_时间戳.txt) - 使用
ConnectHandler建立 SSH 连接,自动处理认证过程 - 通过
with语句安全操作文件,确保资源正确释放 - 在输出文件头部添加元信息(设备 IP、收集时间),提升文件可读性
- 循环执行命令集中的所有命令,并同时实现控制台输出和文件保存
4. 异常处理与错误记录
python
运行
except Exception as e:
error_msg = f"设备 {device_ip} 操作失败: {str(e)}"
print(error_msg)
# 即使失败也保存错误信息到文件
with open(file_path, 'w', encoding='utf-8') as f:
f.write(error_msg)
脚本的异常处理机制有两个亮点:
- 捕获所有可能的异常,避免程序意外终止
- 即使操作失败,也会创建对应文件并记录错误信息,便于后续排查
- 错误信息包含设备 IP 和具体错误原因,定位问题更高效
脚本设计亮点
-
批量操作支持:通过列表结构存储设备信息,轻松实现多设备批量采集,大幅提升工作效率
-
文件管理优化:
- 自动选择系统下载目录,符合用户使用习惯
- 时间戳 + IP 的命名方式,确保文件唯一性且便于检索
- 结构化的文件内容,包含元数据和命令分隔符,提升可读性
-
用户体验设计:
- 控制台实时输出执行进度和命令结果
- 使用分隔符(
#、=、-)区分不同操作阶段,视觉层次清晰 - 操作结果同时在控制台和文件中记录,兼顾即时查看和长期保存
-
健壮性保障:
- 完整的异常捕获机制
- 错误信息持久化存储
- 资源自动释放(文件句柄、SSH 连接)
实用扩展建议
-
命令扩展:根据实际需求扩展
commands列表,例如添加:python
运行
commands = [ 'show run', 'show version', 'show ip int brief', 'show mac address-table', 'show spanning-tree', 'show ip route' ] -
多平台适配:修改下载目录获取逻辑,支持 Windows 和 Linux:
python
运行
if os.name == 'nt': # Windows系统 downloads_path = os.path.join(os.environ['USERPROFILE'], 'Downloads') elif os.name == 'posix': # macOS/Linux downloads_path = os.path.expanduser("~/Downloads") -
权限提升:对于需要特权模式的命令,添加
enable()调用:python
运行
ssh_conn = ConnectHandler(**info_dict) ssh_conn.enable() # 进入特权模式,需确保设备信息中包含secret参数
4.** 密码安全 **:避免明文存储密码,可通过环境变量或加密文件读取:
python
运行
import os
password = os.environ.get('RUIJIE_PASSWORD') # 从环境变量获取
5.** 日志增强 **:添加详细的操作日志,记录每个步骤的执行时间和状态。
总结
这个锐捷设备配置信息自动收集脚本,通过简洁的代码实现了实用的功能,充分体现了网络自动化的核心价值 ——** 减少重复劳动,提高工作效率,降低人为错误 **。
无论是网络新人还是资深工程师,掌握这类自动化脚本都能显著提升日常运维效率。通过本文的解析,你不仅可以直接使用这个脚本,更能理解其设计思路,进而开发出适合自身工作场景的自动化工具。
在网络运维日益复杂的今天,自动化技能已成为网络工程师的核心竞争力。从这样的小脚本入手,逐步构建自己的网络自动化工具箱,将为你的职业发展带来巨大助力。
锐捷设备配置自动采集

2136

被折叠的 条评论
为什么被折叠?



