实验拓扑:
【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.242.2/24,桥接到云彩,Python所在。
【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。
【SSH 操作对象】Layer3Switch-x,IP为 192.168.242.1x/24。
实验背景:
现网如果只有一台设备,那我们还讨论啥运维自动化哈?咱们把整台设备的配置文件都背下来就行了。事实上,稍微大一点的企业,网络设备量都是几百上千的。前面的实验,我们都是通过netmiko登录1台设备,这次我们来用netmiko模块操作多台设备,顺便串一下以前paramiko模块实验中用到的“循环遍历、读取文件、异常处理”等,当做温故而知新吧。
实验目的:
(1)用netmiko登录各台LSW,执行display cur | inc sysname命令,抓取回显。
(2)用netmiko处理“网络不通”,“认证失败”2个模拟场景。
实验准备及检查:
(1)完成实验拓扑组网,完成管理 IP 配置,账号配置。我们把LSW3的密码从“123”改成“456”,模拟认证失败的场景。
(2)实验拓扑网络打通,在 PC 端可手工 ping 通设备,登录设备,执行命令。我们把设备列表中的LSW5机器关闭,模拟网络不通。

(3)display arp xxx,ping 地址等操作,这里从略。如遇到网络不通,则排障处理。(公众号:释然IT杂谈)
Python代码:
这个实验我还重点把一些早前学习的知识串一下。
import netmikofrom netmiko import ConnectHandler# 存放认证失败的设备信息switch_with_authentication_issue = []# 存放网络不通的设备信息switch_not_reachable = []with open('ip_list.txt') as f:for ips in f.readlines():try:ip = ips.strip()connection_info = {'device_type': 'huawei','ip': ip,'username': 'python','password': '123',#'conn_timeout':10}with ConnectHandler(**connection_info) as conn:print (f'已经成功登陆交换机{ip}')output = conn.send_command('display cur | inc sysname')print(output)except netmiko.NetmikoAuthenticationException:print(ip + "用户验证失败!")switch_with_authentication_issue.append(ip)except netmiko.ssh_exception.NetmikoTimeoutException:print(ip + "目标不可达!")switch_not_reachable.append(ip)# 公众号释然IT杂谈print('\n ====结果输出====')print('·下列交换机用户验证失败:')for i in switch_with_authentication_issue:print(f" {i}")# 公众号:释然IT杂谈print('·下列交换机不可达:')for i in switch_not_reachable:print(f" {i}")

执行脚本及结果:
好了,跑起来,都是符合我们预期的,常试截在一张图吧,大家试试看吧。
实验小结:
(1)这次我们借netmiko模块操作多台设备的机会,顺便串一下以前paramiko模块实验中用到的“循环遍历、读取文件、异常处理”等,当做温故而知新吧。至于try-except中要except什么值呢?我是用IDLE命令好模式一个一个测出来的。
(2)实验这么久,今天发现如果ip_list.txt文件的末位有空白行的话,跑码会出错。算是我自己的“温故而知新”项吧。

