网络自动化新手指南:10个实战案例掌握Python设备管理
在当今网络运维领域,网络工程师常常面临着重复配置设备、人工操作效率低下、多厂商设备管理复杂等痛点。而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能够很好地支持多品牌设备连接。
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”文件将被传输到设备,实现了文件的备份或更新。
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和内存使用率等健康检查信息,实现了网络设备的自动化管理。
网络自动化学习路径与资源推荐
学习路径
- 掌握Python基础语法,了解网络基础知识。
- 学习Netmiko的安装和基本使用方法。
- 实践Netmiko的各种功能,如设备连接、命令执行、文件传输等。
- 结合实际场景,编写网络自动化脚本。
- 学习网络自动化的高级技术,如Ansible与Netmiko结合使用等。
资源推荐
- 官方文档:Netmiko的官方文档详细介绍了其功能和使用方法。
- GitHub仓库:可以从https://gitcode.com/gh_mirrors/ne/netmiko获取Netmiko的源码和示例。
- 技术社区:Stack Overflow等技术社区中有大量关于Netmiko的问题和解答。
网络自动化学习路径关键词汇总表
| 关键词 | 说明 |
|---|---|
| 网络自动化 | 利用技术手段实现网络设备的自动管理和操作 |
| 设备管理 | 对网络设备进行配置、监控、维护等操作 |
| Python | 一种广泛使用的编程语言,常用于网络自动化开发 |
| 网络设备批量配置 | 使用工具或脚本对多台网络设备同时进行配置 |
| SSH连接管理 | 对SSH连接进行建立、维护、关闭等管理操作 |
| 自动化脚本 | 用于实现自动化任务的程序代码 |
| 配置备份 | 将网络设备的配置文件保存到本地或其他存储位置 |
| 故障诊断 | 对网络设备出现的故障进行分析和排查 |
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust098- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00

