Python实现收集锐捷设备基础信息

这份脚本主要用于通过 SSH 连接网络设备(锐捷设备)并收集配置信息,采用了模块化的逻辑设计。以下从功能模块的角度进行解释:

1. 依赖导入模块

from netmiko import ConnectHandler
import time
import os
  • 功能:导入脚本运行所需的外部库
    • netmiko.ConnectHandler:用于建立与网络设备的 SSH 连接并执行命令(支持多厂商设备,这里针对锐捷)
    • time:用于生成时间戳(避免文件重名)和记录收集时间
    • os:用于处理文件路径(获取下载目录、拼接文件路径等)

2. 路径配置模块

# 获取macOS下载目录路径(默认用户下载目录)
downloads_path = os.path.expanduser("~/Downloads")
  • 功能:定义文件保存的根目录
    • 通过os.path.expanduser("~/Downloads")获取当前用户的下载目录(适用于 macOS/Linux 系统)
    • 后续收集的设备信息文件将保存到该目录下

3. 设备信息配置模块

# 设备信息(替换为实际设备信息)
network_info = [
    {
        'ip': 'x.x.x.x',
        'username': 'xxxx',
        'password': 'xxxx',
        'port': 22,
        'device_type': 'ruijie_os'
    },
]
  • 功能:存储需要连接的网络设备信息(可扩展为多设备)
    • 每个字典代表一台设备的连接参数:
      • ip:设备管理 IP 地址
      • username/password:SSH 登录账号密码
      • port:SSH 端口(默认 22)
      • device_type:设备类型(这里指定为锐捷ruijie_os,适配锐捷命令行)

4. 命令配置模块

# 需要收集的命令
commands = [
        'show version',
        'show cpu',
        'show memory',
        'show ip int brief',
        'show interface status',
        'show ip route',
        'show running-config'
]
  • 功能:定义需要在设备上执行的命令列表
    • 示例包含:查看运行配置(show run)、设备版本(show version)、IP 接口摘要(show ip int brief
    • 可根据需求扩展其他命令(如show mac address-table等)

5. 时间戳生成模块

# 生成时间戳(避免文件名重复)
timestamp = time.strftime("%Y%m%d_%H%M%S")
  • 功能:生成唯一时间戳(格式:年月日_时分秒)
    • 用于构建文件名,避免多设备 / 多次运行时文件覆盖

6. 主逻辑模块(设备连接与信息收集)

for info_dict in network_info:
    # 设备IP与文件路径处理
    device_ip = info_dict['ip']
    file_name = f"{device_ip}_{timestamp}.txt"
    file_path = os.path.join(downloads_path, file_name)

    try:
        # 建立SSH连接
        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)  # 执行命令并获取输出

                # 控制台打印结果
                print(output)
                print(f"\n{'-' * 80}\n")

                # 写入文件
                f.write(f"===== 命令: {cmd} =====\n")
                f.write(output + "\n\n")
                f.write("-" * 80 + "\n\n")

        # 断开连接
        ssh_conn.disconnect()
        print(f"{'#' * 20} 设备 {device_ip} 信息收集完成 {'#' * 20}")
        print(f"文件已保存至: {file_path}\n")

    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)
  • 功能:核心执行逻辑,按设备循环处理
    1. 文件路径构建:以 “设备 IP_时间戳.txt” 为文件名,拼接下载目录路径
    2. SSH 连接:通过ConnectHandler建立与设备的连接
    3. 信息写入
      • 先写入文件头部(设备 IP、收集时间等元信息)
      • 循环执行commands中的命令,获取输出后同时打印到控制台和写入文件
    4. 连接关闭:完成后断开 SSH 连接
    5. 异常处理:若连接或执行命令失败,捕获错误并将错误信息写入文件

总结

整个脚本通过模块化设计,将 “依赖导入、路径配置、设备信息、命令列表、时间戳生成、主逻辑执行” 拆分为独立功能块,逻辑清晰且易于维护。可通过修改network_info(添加设备)和commands(扩展命令)来适应不同的网络设备信息收集需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值