首页
/ 网络自动化新手指南:10个实战案例掌握Python设备管理

网络自动化新手指南:10个实战案例掌握Python设备管理

2026-04-30 11:05:29作者:明树来

在当今网络运维领域,网络工程师常常面临着重复配置设备、人工操作效率低下、多厂商设备管理复杂等痛点。而Netmiko作为一款强大的网络设备管理工具,就如同网络世界的“智能遥控器”,能够轻松连接和管理各种网络设备,为网络自动化提供有力支持。本文将通过“问题 - 方案 - 案例”的三段式结构,从基础操作到进阶技巧,再到实战场景,带您全面掌握Netmiko的核心功能与应用,助您实现网络设备的高效管理与自动化运维,让网络工程师的工作效率提升50%。

1. 5分钟搭建Netmiko环境:从安装到基础测试

场景描述

作为网络自动化新手,首要任务是搭建好Netmiko的运行环境,确保后续操作能够顺利进行。

核心代码

# 安装Netmiko
pip install netmiko
# 基础测试代码
from netmiko import ConnectHandler

# 定义设备信息
device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.1",
    "username": "admin",
    "password": "password",
}

try:
    # 建立连接
    with ConnectHandler(**device) as net_connect:
        # 获取设备提示符
        prompt = net_connect.find_prompt()
        print(f"成功连接设备,设备提示符为:{prompt}")
except Exception as e:
    print(f"连接设备失败,错误信息:{e}")

效果展示

运行代码后,若成功连接设备,将输出设备的提示符,如“Router>”,表示Netmiko环境搭建成功并能正常连接网络设备。

2. 零基础实现多品牌设备连接:Cisco、Juniper、Arista全覆盖

场景描述

网络中往往存在不同厂商的设备,如何使用Netmiko统一连接和管理这些设备是新手面临的一大难题。

核心代码

from netmiko import ConnectHandler

# Cisco设备信息
cisco_device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.2",
    "username": "admin",
    "password": "password",
}

# Juniper设备信息
juniper_device = {
    "device_type": "juniper_junos",
    "host": "192.168.1.3",
    "username": "admin",
    "password": "password",
}

# Arista设备信息
arista_device = {
    "device_type": "arista_eos",
    "host": "192.168.1.4",
    "username": "admin",
    "password": "password",
}

devices = [cisco_device, juniper_device, arista_device]

for device in devices:
    try:
        with ConnectHandler(**device) as net_connect:
            prompt = net_connect.find_prompt()
            print(f"成功连接{device['device_type']}设备,提示符:{prompt}")
    except Exception as e:
        print(f"连接{device['device_type']}设备失败,错误:{e}")

效果展示

代码运行后,将依次连接Cisco、Juniper、Arista设备,并输出各自的设备提示符,表明Netmiko能够很好地支持多品牌设备连接。

Netmiko多设备连接示意图

3. 自动化执行命令:轻松获取设备配置信息

场景描述

手动登录每台设备执行命令获取配置信息效率低下,通过Netmiko可以自动化执行命令并获取结果。

核心代码

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.5",
    "username": "admin",
    "password": "password",
}

try:
    with ConnectHandler(**device) as net_connect:
        # 执行show命令
        output = net_connect.send_command("show running-config")
        print("设备运行配置:")
        print(output)
except Exception as e:
    print(f"执行命令失败,错误:{e}")

效果展示

运行代码后,将输出设备的运行配置信息,无需手动登录设备执行命令,大大节省了时间和精力。

4. 批量配置设备:5分钟完成多设备配置更新

场景描述

当需要对多台设备进行相同的配置更新时,手动操作不仅繁琐还容易出错,Netmiko的批量配置功能可以解决这一问题。

核心代码

from netmiko import ConnectHandler

devices = [
    {
        "device_type": "cisco_ios",
        "host": "192.168.1.6",
        "username": "admin",
        "password": "password",
    },
    {
        "device_type": "cisco_ios",
        "host": "192.168.1.7",
        "username": "admin",
        "password": "password",
    },
]

# 要配置的命令列表
commands = ["interface GigabitEthernet0/1", "ip address 10.0.0.1 255.255.255.0", "no shutdown"]

for device in devices:
    try:
        with ConnectHandler(**device) as net_connect:
            # 进入全局配置模式并发送配置命令
            output = net_connect.send_config_set(commands)
            print(f"配置{device['host']}成功,输出:{output}")
    except Exception as e:
        print(f"配置{device['host']}失败,错误:{e}")

效果展示

代码执行后,将对列表中的多台Cisco设备批量配置接口IP地址并启用接口,实现了快速、准确的批量配置更新。

5. 安全的SSH密钥认证:提升设备访问安全性

场景描述

使用密码认证存在安全风险,采用SSH密钥认证可以提高设备访问的安全性。

核心代码

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.8",
    "username": "admin",
    "use_keys": True,
    "key_file": "/home/admin/.ssh/id_rsa",  # SSH私钥文件路径
}

try:
    with ConnectHandler(**device) as net_connect:
        prompt = net_connect.find_prompt()
        print(f"使用SSH密钥成功连接设备,提示符:{prompt}")
except Exception as e:
    print(f"SSH密钥连接失败,错误:{e}")

效果展示

配置正确的情况下,代码将使用SSH密钥成功连接设备,无需输入密码,既方便又安全。

6. 文件传输功能:轻松实现设备文件备份与更新

场景描述

网络设备的配置文件、系统镜像等需要定期备份或更新,Netmiko的文件传输功能可以实现这一需求。

核心代码

from netmiko import ConnectHandler, file_transfer

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.9",
    "username": "admin",
    "password": "password",
}

try:
    with ConnectHandler(**device) as net_connect:
        # 传输文件(本地到设备)
        transfer_result = file_transfer(
            net_connect,
            source_file="local_config_backup.txt",
            dest_file="config_backup.txt",
            direction="put",
            overwrite_file=True,
        )
        if transfer_result["file_transferred"]:
            print("文件传输成功")
        else:
            print("文件传输失败")
except Exception as e:
    print(f"文件传输过程出错,错误:{e}")

效果展示

代码执行后,本地的“local_config_backup.txt”文件将被传输到设备,实现了文件的备份或更新。

Netmiko文件传输流程

7. 设备类型自动检测:智能识别未知设备类型

场景描述

当面对未知类型的网络设备时,手动尝试不同的设备类型进行连接非常麻烦,Netmiko的设备类型自动检测功能可以解决这一问题。

核心代码

from netmiko import SSHDetect

device = {
    "host": "192.168.1.10",
    "username": "admin",
    "password": "password",
}

try:
    guesser = SSHDetect(**device)
    best_match = guesser.autodetect()
    print(f"自动检测到的设备类型:{best_match}")
except Exception as e:
    print(f"设备类型检测失败,错误:{e}")

效果展示

运行代码后,将输出自动检测到的设备类型,如“cisco_ios”“juniper_junos”等,方便后续的连接和管理。

8. 会话日志记录:完整记录设备操作过程

场景描述

在进行设备操作时,详细记录操作过程有助于问题排查和审计,Netmiko的会话日志功能可以实现这一点。

核心代码

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.11",
    "username": "admin",
    "password": "password",
    "session_log": "device_session.log",  # 会话日志文件路径
}

try:
    with ConnectHandler(**device) as net_connect:
        net_connect.send_command("show ip int brief")
    print("会话日志已记录到device_session.log文件")
except Exception as e:
    print(f"会话日志记录失败,错误:{e}")

效果展示

操作完成后,在当前目录下会生成“device_session.log”文件,其中包含了完整的设备操作过程记录。

9. 常见故障排查:解决Netmiko使用中的问题

场景描述

在使用Netmiko过程中,可能会遇到各种连接、命令执行等故障,掌握常见故障的排查方法至关重要。

故障一:连接超时

  • 问题表现:连接设备时提示超时错误。
  • 解决方案:检查设备IP地址是否正确、网络是否通畅、设备是否开启SSH服务。
  • 示例代码
# 增加超时参数
device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.12",
    "username": "admin",
    "password": "password",
    "timeout": 30,  # 超时时间(秒)
}

故障二:命令执行错误

  • 问题表现:执行命令时提示错误。
  • 解决方案:检查命令是否正确、设备是否支持该命令、设备权限是否足够。
  • 示例代码
try:
    output = net_connect.send_command("invalid_command")
except Exception as e:
    print(f"命令执行错误:{e}")

10. 实战场景应用:构建网络自动化脚本

场景描述

结合前面所学的知识,构建一个完整的网络自动化脚本,实现设备配置备份、健康检查等功能。

核心代码

from netmiko import ConnectHandler
import datetime

def backup_device_config(device):
    try:
        with ConnectHandler(**device) as net_connect:
            # 获取当前时间作为备份文件名的一部分
            timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            backup_filename = f"{device['host']}_config_{timestamp}.txt"
            # 执行备份命令
            output = net_connect.send_command("show running-config")
            # 将配置写入文件
            with open(backup_filename, "w") as f:
                f.write(output)
            print(f"{device['host']}配置备份成功,文件:{backup_filename}")
    except Exception as e:
        print(f"{device['host']}配置备份失败,错误:{e}")

def check_device_health(device):
    try:
        with ConnectHandler(**device) as net_connect:
            # 检查设备CPU使用率
            cpu_output = net_connect.send_command("show processes cpu")
            # 检查设备内存使用率
            memory_output = net_connect.send_command("show memory statistics")
            print(f"{device['host']}健康检查结果:")
            print("CPU使用率:")
            print(cpu_output)
            print("内存使用率:")
            print(memory_output)
    except Exception as e:
        print(f"{device['host']}健康检查失败,错误:{e}")

devices = [
    {
        "device_type": "cisco_ios",
        "host": "192.168.1.13",
        "username": "admin",
        "password": "password",
    },
    {
        "device_type": "juniper_junos",
        "host": "192.168.1.14",
        "username": "admin",
        "password": "password",
    },
]

for device in devices:
    backup_device_config(device)
    check_device_health(device)

效果展示

运行脚本后,将对列表中的设备进行配置备份,并输出设备的CPU和内存使用率等健康检查信息,实现了网络设备的自动化管理。

网络自动化学习路径与资源推荐

学习路径

  1. 掌握Python基础语法,了解网络基础知识。
  2. 学习Netmiko的安装和基本使用方法。
  3. 实践Netmiko的各种功能,如设备连接、命令执行、文件传输等。
  4. 结合实际场景,编写网络自动化脚本。
  5. 学习网络自动化的高级技术,如Ansible与Netmiko结合使用等。

资源推荐

  • 官方文档:Netmiko的官方文档详细介绍了其功能和使用方法。
  • GitHub仓库:可以从https://gitcode.com/gh_mirrors/ne/netmiko获取Netmiko的源码和示例。
  • 技术社区:Stack Overflow等技术社区中有大量关于Netmiko的问题和解答。

网络自动化学习路径关键词汇总表

关键词 说明
网络自动化 利用技术手段实现网络设备的自动管理和操作
设备管理 对网络设备进行配置、监控、维护等操作
Python 一种广泛使用的编程语言,常用于网络自动化开发
网络设备批量配置 使用工具或脚本对多台网络设备同时进行配置
SSH连接管理 对SSH连接进行建立、维护、关闭等管理操作
自动化脚本 用于实现自动化任务的程序代码
配置备份 将网络设备的配置文件保存到本地或其他存储位置
故障诊断 对网络设备出现的故障进行分析和排查
登录后查看全文
热门项目推荐
相关项目推荐