锐捷设备配置信息自动收集脚本

锐捷设备配置自动采集

锐捷设备配置信息自动收集脚本:高效网络运维的得力助手

在网络日常运维中,定期收集设备配置信息是一项基础且重要的工作。无论是故障排查、版本审计还是配置备份,都需要快速获取准确的设备信息。本文将详细解析一个基于 Netmiko 的锐捷设备配置信息自动收集脚本,带你掌握网络设备信息自动化采集的核心方法。

脚本功能概述

这个 Python 脚本专为锐捷网络设备设计,能够实现以下核心功能:

  • 自动登录多台锐捷设备(支持批量操作)
  • 执行预设的配置查询命令(如show runshow 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 和具体错误原因,定位问题更高效

脚本设计亮点

  1. 批量操作支持:通过列表结构存储设备信息,轻松实现多设备批量采集,大幅提升工作效率

  2. 文件管理优化

    • 自动选择系统下载目录,符合用户使用习惯
    • 时间戳 + IP 的命名方式,确保文件唯一性且便于检索
    • 结构化的文件内容,包含元数据和命令分隔符,提升可读性
  3. 用户体验设计

    • 控制台实时输出执行进度和命令结果
    • 使用分隔符(#=-)区分不同操作阶段,视觉层次清晰
    • 操作结果同时在控制台和文件中记录,兼顾即时查看和长期保存
  4. 健壮性保障

    • 完整的异常捕获机制
    • 错误信息持久化存储
    • 资源自动释放(文件句柄、SSH 连接)

实用扩展建议

  1. 命令扩展:根据实际需求扩展commands列表,例如添加:

    python

    运行

    commands = [
        'show run',
        'show version',
        'show ip int brief',
        'show mac address-table',
        'show spanning-tree',
        'show ip route'
    ]
    
  2. 多平台适配:修改下载目录获取逻辑,支持 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")
    
  3. 权限提升:对于需要特权模式的命令,添加enable()调用:

    python

    运行

    ssh_conn = ConnectHandler(**info_dict)
    ssh_conn.enable()  # 进入特权模式,需确保设备信息中包含secret参数
    

4.** 密码安全 **:避免明文存储密码,可通过环境变量或加密文件读取:

python

运行

import os
password = os.environ.get('RUIJIE_PASSWORD')  # 从环境变量获取

5.** 日志增强 **:添加详细的操作日志,记录每个步骤的执行时间和状态。

总结

这个锐捷设备配置信息自动收集脚本,通过简洁的代码实现了实用的功能,充分体现了网络自动化的核心价值 ——** 减少重复劳动,提高工作效率,降低人为错误 **。

无论是网络新人还是资深工程师,掌握这类自动化脚本都能显著提升日常运维效率。通过本文的解析,你不仅可以直接使用这个脚本,更能理解其设计思路,进而开发出适合自身工作场景的自动化工具。

在网络运维日益复杂的今天,自动化技能已成为网络工程师的核心竞争力。从这样的小脚本入手,逐步构建自己的网络自动化工具箱,将为你的职业发展带来巨大助力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值