网工Python之路之netmiko模块实验(一)初来乍到

2022-10-27 19:27:15 浏览数 (1)

前言:

哈喽,大家好,我又来了!前面我们已经对环境搭建,paramiko模块做了一些实验探讨。 感谢@弈心大神@朱嘉盛大佬两位的传道。

如果把 paramiko 比做手动挡汽车,netmiko 则可以说是自动挡汽车。来吧,快上车!快上车!今天我们就来初识一下 netmiko 模块。(公众号:释然IT杂谈)

本 netmiko 实验与前序 paramiko 等实验无前后关系,可直接开始阅读,但建议使用 netmiko 之前,先了解及操作一下 paramiko。

代码语言:javascript复制
 

实验背景:

Netmiko 是作者 Kirk Byers 在 2014 年底基于 paramiko 开始开发的。它做了很多改进,如精简了 show (华为就是 display )命令的执行和回显内容的读取,简化了设备配置命令,支持了多厂商的设备和平台。

实验拓扑:

【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.242.2/24,桥接到云彩,Python所在。

【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。

【SSH 操作对象】Layer3Switch-x,IP为 192.168.242.1x/24。

实验目的:

使用 netmiko 模块登录交换机 Layer3Switch-2 ,给它的 LoopBack0 口配置 IP 2.2.2.2/32, 之后保存退出,打印回显。

实验准备:

首先我们联网安装 netmiko 模块。如果不考虑 Windows 系统【环境变量】等设置的话,我们可以直接 cd 到安装 Python 程序对应的 pip.exe 所在的文件夹路径中,执行 pip install netmiko。(公众号:释然IT杂谈)

之后一路跑码(反正我是看不懂这些码哈),停下来是 Successfully 字眼,安装成功。

按照拓扑,每台交换机 vlan 1 都配置 vlanif 的 IP 作为管理,需做到能手工逐台登录,初始化配置如下:

代码语言:javascript复制

sysname  LSW1
aaa
# 密码明文 123
 local-user python password cipher #*C>*$C`S!INZPO3JBXBHA!!
 local-user python privilege level 3
 local-user python service-type ssh

interface Vlanif1
 ip address 192.168.242.11 255.255.255.0
# 公众号:释然IT杂谈
stelnet server enable
# 下面这条很关键,我一开始没配置这条,一直 ssh 反馈有错误。
# 模拟器的产品手册说这条是默认值,但测试后需要手动配置。
ssh authentication-type default password

user-interface vty 0 4
 authentication-mode aaa
 protocol inbound ssh

实验前检查:

1.按之前实验套路,PC 到 LSW2 的网络连通性,如不通需要排网络,本文此处描述从简。

2.检查 LSW2 的 LoopBack0 情况。

Python代码:

看了下面的代码,是不是感觉比 paramiko 简介太多太多了,各种“多余”的操作,netmiko 都帮咱们完美屏蔽掉了。

代码语言:javascript复制
from netmiko import ConnectHandler

S2 = {'device_type':'huawei',
      'ip':'192.168.242.12',
      'username':'python',
      'password':'123'}

connect = ConnectHandler(**S2)
print('已经成功登陆交换机'   S2['ip'])

# netmiko 已集成休眠、截屏等操作
config_commands = ['interface LoopBack 0','ip add 2.2.2.2 32']
# 如果需要系统视图下执行,可用 send_config_set ,会自动执行 sys
# 截屏直接作为函数返回
output = connect.send_config_set(config_commands)
print(output)

print('n======我是分割线======n')
# 公众号:释然IT杂谈
# 如果需要用户视图下执行,可用 send_command
# 截屏直接作为函数返回
result = connect.send_command('display current-configuration interface LoopBack 0')
print(result)

执行脚本:

跑跑代码,等待回显过程展示。

实验结果检查:

代码语言:javascript复制
display current-configuration interface LoopBack0

实验扩展:

小伙伴想执行其他友商设备怎么办,这里以思科为例略微调整成思科类型和命令就行。

拓扑如下,只开启LSW1,用于测试。

实验小结:

好了,我们跟 netmiko 的首次接触实验就完成了。大家已经发现用 netmiko 的话,代码会清晰很多,如果配合我们在 paramiko 实现中的 ip_file、cmd_file 等操作,把“待操作的设备”和“待执行的命令”都独立梳理出来,那代码会更加清晰明了。大家还等什么?想一个实际生产应用,然后赶紧动手实践起来吧。

0 人点赞