基于 Netmiko 的网络设备自动化操作

news2025/7/17 3:53:07

在这里插入图片描述

学习目标
  1. 掌握 Netmiko 库的核心功能与使用场景。
  2. 能够通过 Netmiko 连接多厂商设备并执行命令和配置。
  3. 实现批量设备管理、配置备份与自动化巡检。
  4. 掌握异常处理、日志记录与性能优化技巧。
  5. 理解 Netmiko 在自动化运维体系中的角色。

1. Netmiko 简介

1.1 什么是 Netmiko

  • Netmiko 是一个基于 Python 的多厂商网络设备连接库,封装了 SSH/Telnet 协议,简化了与网络设备(如路由器、交换机、防火墙)的交互流程。
  • 支持 Cisco IOS、华为、Juniper、Arista 等 50+ 厂商设备(完整支持列表)。

1.2 Netmiko 的优势

  • 多厂商兼容:统一接口适配不同设备。
  • 简化交互:自动处理登录、特权模式切换、分页输出等问题。
  • 扩展性强:支持自定义设备类型与解析逻辑。

1.3 应用场景

  • 批量配置下发(如 VLAN、ACL、路由协议)。
  • 设备状态巡检与监控(CPU、内存、接口状态)。
  • 配置文件备份与恢复。
  • 自动化故障排查。

2. Netmiko 基础操作

2.1 安装与环境配置

# 安装 Netmiko
pip install netmiko

# 安装依赖库(可选,用于解析结构化数据)
pip install textfsm ntc-templates

2.2 核心类与方法

  • ConnectHandler:建立设备连接的核心类。
  • send_command():发送命令并返回输出。
  • send_config_set():发送配置命令集。
  • enable():进入特权模式。
  • disconnect():关闭连接。

2.3 连接设备基础示例

from netmiko import ConnectHandler

# 定义设备参数
device = {
    "device_type": "cisco_ios",
    "ip": "192.168.1.1",
    "username": "admin",
    "password": "cisco123",
    "secret": "enable123",  # 特权密码(可选)
}

# 连接设备并执行命令
try:
    conn = ConnectHandler(**device)
    conn.enable()  # 进入特权模式
    output = conn.send_command("show version")
    print(output)
    conn.disconnect()
except Exception as e:
    print(f"连接失败: {e}")

3. 进阶功能与实践

3.1 配置管理

  • 批量配置下发

    config_commands = [
        "interface GigabitEthernet0/1",
        "description 由Netmiko自动配置",
        "ip address 10.1.1.1 255.255.255.0"
    ]
    output = conn.send_config_set(config_commands)
    print(output)
    
  • 从文件读取配置

    with open("config.txt", "r") as f:
        commands = f.read().splitlines()
    conn.send_config_set(commands)
    

3.2 数据解析与自动化巡检

  • 使用 TextFSM 结构化解析

    # 需要安装 ntc-templates
    output = conn.send_command("show interfaces", use_textfsm=True)
    for interface in output:
        if interface["link_status"] == "up":
            print(f"接口 {interface['interface']} 状态正常")
    
  • 生成巡检报告

    import csv
    report = []
    commands = ["show version", "show ip interface brief", "show processes cpu"]
    for cmd in commands:
        output = conn.send_command(cmd, use_textfsm=True)
        report.append({cmd: output})
    
    # 保存为 CSV 文件
    with open("inspection_report.csv", "w") as f:
        writer = csv.DictWriter(f, fieldnames=report[0].keys())
        writer.writeheader()
        writer.writerows(report)
    

3.3 配置文件备份

import time
backup_time = time.strftime("%Y%m%d-%H%M%S")
output = conn.send_command("show running-config")
with open(f"backup_{device['ip']}_{backup_time}.cfg", "w") as f:
    f.write(output)

4. 异常处理与调试

4.1 常见异常类型

  • NetMikoTimeoutException:连接超时(检查 IP/端口/网络可达性)。
  • NetMikoAuthenticationException:认证失败(检查用户名/密码)。
  • ReadTimeout:命令执行超时(调整 timeout 参数)。

4.2 调试与日志记录

import logging

# 启用 Netmiko 日志
logging.basicConfig(
    filename="netmiko_debug.log",
    level=logging.DEBUG,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)

# 重试逻辑示例
from netmiko.ssh_exception import NetMikoTimeoutException

retries = 3
for attempt in range(retries):
    try:
        conn = ConnectHandler(**device)
        break
    except NetMikoTimeoutException:
        if attempt == retries - 1:
            raise
        print(f"第 {attempt+1} 次重试...")

5. 性能优化与批量操作

5.1 多线程处理多设备

from concurrent.futures import ThreadPoolExecutor

devices = [
    {"device_type": "cisco_ios", "ip": "192.168.1.1", ...},
    {"device_type": "huawei", "ip": "192.168.1.2", ...},
]

def backup_config(dev):
    conn = ConnectHandler(**dev)
    output = conn.send_command("show running-config")
    conn.disconnect()
    return output

with ThreadPoolExecutor(max_workers=5) as executor:
    results = executor.map(backup_config, devices)
    for result in results:
        print(result)

5.2 连接池与长连接优化

  • 对频繁操作的设备保持长连接,避免重复认证开销。

6. 实战案例:企业级自动化运维项目

场景:某企业需每日备份全网 100+ 台设备的配置,并检查关键接口状态。

解决方案

  1. 设备清单管理:使用 YAML/JSON 文件存储设备信息。
  2. 并发备份配置:通过多线程加速。
  3. 异常告警:失败时发送邮件通知。
  4. 报告生成:汇总所有设备状态至 HTML 报告。

关键代码片段

import yaml
import smtplib
from email.mime.text import MIMEText

# 读取设备清单
with open("devices.yaml", "r") as f:
    devices = yaml.safe_load(f)

# 并发备份配置
def backup_and_check(dev):
    try:
        conn = ConnectHandler(**dev)
        config = conn.send_command("show running-config")
        interfaces = conn.send_command("show interfaces", use_textfsm=True)
        conn.disconnect()
        # 检查接口状态
        for intf in interfaces:
            if intf["link_status"] != "up":
                send_alert(f"设备 {dev['ip']} 接口 {intf['interface']} 异常!")
        return config
    except Exception as e:
        send_alert(f"设备 {dev['ip']} 备份失败: {e}")

# 发送邮件告警
def send_alert(message):
    msg = MIMEText(message)
    msg["Subject"] = "自动化运维告警"
    msg["From"] = "alert@example.com"
    msg["To"] = "admin@example.com"
    smtp_server.send_message(msg)

# 执行任务
with ThreadPoolExecutor(max_workers=20) as executor:
    executor.map(backup_and_check, devices)

7. 本章小结
  • Netmiko 是网络自动化运维的核心工具,提供跨厂商设备的统一操作接口。
  • 重点掌握连接管理、命令下发、配置备份与异常处理。
  • 结合多线程/协程技术,可显著提升大规模设备管理效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeNet5 神经网络的参数解析和图片尺寸解析

1.LeNet-5 神经网络 以下是针对 LeNet-5 神经网络的详细参数解析和图片尺寸变化分析,和原始论文设计,通过分步计算说明各层的张量变换过程。 经典的 LeNet-5架构简化版(原始论文输入为 32x32,MNIST 常用 28x28 需调整&#xff09…

Axure大屏可视化模板:多领域数据决策的新引擎

在数据驱动决策的时代,Axure大屏可视化模板凭借交互性与可定制性,成为农业、园区管理、智慧城市、企业及医疗领域的创新工具,助力高效数据展示与智能决策。 核心应用场景 1. 农业精细化:实时监控土壤湿度、作物生长曲线&#x…

代码随想录算法训练营第60期第十七天打卡

今天我们继续进入二叉树的下一个章节,今天的内容我在写今天的博客前大致看了一下部分题目难度不算大,那我们就进入今天的题目。 第一题对应力扣编号为654的题目最大二叉树 这道题目的坑相当多,我第一次题目没有看明白就是我不知道到底是如何…

SOC估算:开路电压修正的安时积分法

SOC估算:开路电压修正的安时积分法 基本概念 开路电压修正的安时积分法是一种结合了两种SOC估算方法的混合技术: 安时积分法(库仑计数法) - 通过电流积分计算SOC变化 开路电压法 - 通过电池电压与SOC的关系曲线进行校准 方法原…

使用 SSE + WebFlux 推送日志信息到前端

为什么使用 SSE 而不使用 WebSocket, 请看 SEE 对比 Websocket 的优缺点。 特性SSEWebSocket通信方向单向(服务器→客户端)双向(全双工)协议基于 HTTP独立协议(需 ws:// 前缀)兼容性现代浏览器&#xff08…

二叉树的遍历(广度优先搜索)

二叉树的第二种遍历方式,层序遍历,本质是运用队列对二叉树进行搜索。 层序遍历是指将二叉树的每一层按顺序遍历,通过队列实现就是先将根节点push入队,统计此时的队列中的元素数量size,将size元素全部pop出去&#xff0…

2025年计算机视觉与智能通信国际会议(ICCVIC 2025)

2025 International Conference on Computer Vision and Intelligent Communication 一、大会信息 会议简称:ICCVIC 2025 大会地点:中国杭州 收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 2025年计算机视觉与智能通…

手工收集统计信息

有时想对某些表收集统计信息 CREATE OR REPLACE PROCEDURE GATHER_STATS ASDECLAREV_SQL1 VARCHAR(1000);--表游标CURSOR C1 ISSELECT (SELECT USER) AS TABLE_OWNER,TABLE_NAMEFROM USER_TABLES; --可以在这里加过滤条件--索引游标CURSOR C2 ISSELECT TABLE_OWNER,INDEX_NAM…

flume整合Kafka和spark-streaming核心编程

flume整合Kafka 需求1:利用flume监控某目录中新生成的文件,将监控到的变更数据发送给kafka,kafka将收到的数据打印到控制台: 1.查看topic 2.编辑flume-Kafka.conf,并启动flume 3.启动Kafka消费者 4.新增测试数据 5.查…

EDI 如何与 ERP,CRM,WMS等系统集成

在数字化浪潮下,与制造供应链相关产业正加速向智能化供应链转型。传统人工处理订单、库存和物流的方式已难以满足下单客户对响应速度和数据准确性的严苛要求。EDI技术作为企业间数据交换的核心枢纽,其与ERP、CRM、WMS等业务系统的深度集成,成…

面试踩过的坑

1、 “”和equals 的区别 “”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重…

多物理场耦合低温等离子体装置求解器PASSKEy2

文章目录 PASSKEy2简介PASSKEY2计算流程PASSKEy2 中求解的物理方程电路模型等离子体模型燃烧模型 PASSKEy2的使用 PASSKEy2简介 PASSKEy2 是在 PASSKEy1 的基础上重新编写的等离子体数值模拟程序。 相较于 PASSKEy1, PASSKEy2 在具备解决低温等离子体模拟问题的能力…

视频噪点多,如何去除画面噪点?

你是否遇到过这样的困扰?辛辛苦苦拍摄的视频,导出后却满屏 “雪花”,夜景变 “噪点盛宴”,低光环境秒变 “马赛克现场”? 无论是日常拍摄的vlog、珍贵的家庭录像,还是专业制作的影视作品,噪点问…

09前端项目----分页功能

分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多,所以采用分页功能实现分页功能 Element UI已经有封装好的组件,但是也要掌握原理,以及自定…

第十二届蓝桥杯 2021 C/C++组 直线

目录 题目: 题目描述: 题目链接: 思路: 核心思路: 两点确定一条直线: 思路详解: 代码: 第一种方式代码详解: 第二种方式代码详解: 题目:…

《Piper》皮克斯技术解析:RIS系统与云渲染如何创造奥斯卡级动画短片

本文由专业专栏作家 Mike Seymour 撰写,内容包含非常有价值的行业资讯。 译者注 《Piper》是皮克斯动画工作室的一部技术突破性的短片,讲述了一只小鸟在海滩上寻找食物并面对自然挑战的故事。它不仅凭借其精美的视觉效果和细腻的情感表达赢得了2017年奥…

Java在excel中导出动态曲线图DEMO

1、环境 JDK8 POI 5.2.3 Springboot2.7 2、DEMO pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>commons…

Kotlin Multiplatform--02:项目结构进阶

Kotlin Multiplatform--02&#xff1a;项目结构进阶 引言正文 引言 在上一章中&#xff0c;我们对 Kotlin Multiplatform 项目有了基本的了解&#xff0c;已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…

代码随想录算法训练营第五十八天 | 1.拓扑排序精讲 2.dijkstra(朴素版)精讲 卡码网117.网站构建 卡码网47.参加科学大会

1.拓扑排序精讲 题目链接&#xff1a;117. 软件构建 文章讲解&#xff1a;代码随想录 思路&#xff1a; 把有向无环图进行线性排序的算法都可以叫做拓扑排序。 实现拓扑排序的算法有两种&#xff1a;卡恩算法&#xff08;BFS&#xff09;和DFS&#xff0c;以下BFS的实现思…

linux ptrace 图文详解(七) gdb、strace跟踪系统调用

目录 一、gdb/strace 跟踪程序系统调用 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; linux ptrace 图…