python的异常处理批量执行网络设备的巡检命令

前言

在网络设备数量超过千台甚至上万台的大型企业网中,难免会遇到某些设备的管理IP地址不通,SSH连接失败的情况,设备数量越多,这种情况发生的概率越高。
这个时候如果你想用python批量配置所有的设备,就一定要注意这种情况,很可能你的脚本运行了还不到一半就因为中间某一个连接不通的设备而停止了。

比如你有5000台交换机需要统一更改本地用户名和密码,前500台交换机因为某个网络问题导致管理IP地址不可达,SSH连不上,此时python会返回错误,然后脚本就此停住!脚本不会再对剩下的4500台交换机配置,也就意味着”挂机“失败!

解决这些问题我们可以使用python的异常处理来解决

云配置

请添加图片描述

云的配置是为了让主机能与交换机互相访问

环境

请添加图片描述

我们把LSW2用户名admin的密码从Huawei@123改为123,模拟一个用户名密码错误的环境。再把LSW3的接口给shutdown,模拟一个IP不可达的环境。我们使用python的异常处理来SSH远程设备进行配置,遇到错误时不中断python程序

交换机SSH配置

aaalocal-user admin password cipher Huawei@123   //创建python用户,密码为123local-user admin privilege level 15local-user admin service-type ssh
#
user-interface vty 0 4authentication-mode aaaprotocol inbound ssh
#
stelnet server enable
ssh user admin authentication-type all
ssh user admin service-type all
ssh client first-time enable

这个时候我们就能与交换机互访,并SSH登陆了

目的

批量连接设备并查看dis clock,就算遇到错误也继续程序,直止结束。把错误的设备地址记录下来

代码

import paramiko
import time
import socketusername = input('Userame: ')  # 获取用户名输入
password = input('Password: ')  # 获取密码输入switch_with_authentication_issue = []  # 记录身份验证失败的交换机IP列表
switch_not_reachable = []  # 记录无法连接的交换机IP列表iplist = open("ip_list.txt", "r")  # 打开存储IP地址清单的文件
for line in iplist.readlines():  # 逐行读取文件中的IP地址try:ip = line.strip()  # 获取IP地址ssh_client = paramiko.SSHClient()  # 创建SSH客户端实例ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置自动添加主机密钥ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)  # 连接SSH客户端到交换机print("You have successfully connect to ", ip)  # 打印连接成功的消息command = ssh_client.invoke_shell()  # 开启交互式Shellcommand.send(b"screen-length 0 temporary\n")  # 发送命令,设置交换机临时显示长度command.send(b"sys\n")  # 发送进入系统视图的命令command.send(b"dis clock\n")  # 发送显示交换机时钟的命令time.sleep(2)  # 等待2秒,确保交互命令执行完成output = command.recv(65535)  # 接收命令的输出结果print(output.decode('ascii'))  # 打印输出结果except paramiko.ssh_exception.AuthenticationException:print("User authentication failed for " + ip + ".")  # 打印身份验证失败的消息switch_with_authentication_issue.append(ip)  # 将身份验证失败的IP地址添加到列表中except socket.error:print(ip + " is not reachable.")  # 打印无法连接的消息switch_not_reachable.append(ip)  # 将无法连接的IP地址添加到列表中iplist.close()  # 关闭文件print('\nUser authentication failed for below switches: ')
for i in switch_with_authentication_issue:print(i)  # 打印身份验证失败的交换机IP列表print('\nBelow switches are not reachable: ')
for i in switch_not_reachable:print(i)  # 打印无法连接的交换机IP列表

结果

请添加图片描述

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

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

相关文章

top K问题(C语言)

目录 前言 top K问题 模拟数据 建堆 验证(简单了解即可) 最终代码 调试部分 前言 在大小堆的实现(C语言)中我们讨论了堆的实际意义,在看了就会的堆排序(C语言)中我们完成了堆排序&#…

Java利用UDP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目,并命名。 二、实现代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class liaotian extends JFrame{ pri…

找丢失号码(桶排序)

题目&#xff1a;小明拿着本院100名校运会选手的号码牌走向操场&#xff0c;号码是101到200.出于道路施工加上下雨&#xff0c;小明摔跤后将号码牌散落在地&#xff0c;小明捡起来发现只有99张号码牌&#xff0c;请你编程帮小明快速找到是什么号码丢失 #include <stdio.h>…

【13】PyQt多线程多任务管理

目录 多线程&多任务介绍 多线程管理 1. 拷贝依赖 2. 使用示例 多任务管理 1. 拷贝依赖 2. 使用示例 多线程&多任务介绍 多线程&多任务通常是指将一个任务或多个任务运行在子线程&#xff0c;并且子线程可以独立启动&#xff0c;或通过线程池启动。子线程通…

深度探索 Python Pyramid 框架

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Pyramid是一个灵活且强大的Python web框架&#xff0c;广泛用于构建各种规模的Web应用程序。本文将深度探索Pyramid框架&#xff0c;介绍其核心概念、应用场景以及一些高级特性。 安装与基础用法 首先&#xf…

JS学习--类型转换

函数转换 parseInt() 转换之前&#xff0c;首先会分析该字符串。判断位置为0处的字符串&#xff0c;判断是否为有效数字&#xff0c;若否&#xff0c;直接返回NaN&#xff0c;不再继续&#xff1b; 若是&#xff0c;继续打印直到不为数字的地方停止 parseFloat() 转换之前&…

linux日志优先级

7种日志级别代号0-7 0 debug #有调试信息的&#xff0c;日志信息最多 1 info #一般信息的日志&#xff0c;最常用 2 notice #最具有重要性的普通条件的信息 常见 3 warning #警告级别 常见 4 …

探索鸿蒙 DevEcoStudio汉化+运行报错

在下载好软件&#xff0c;摸索着成功创建了一个项目的时候&#xff0c;点击运行&#xff0c;竟然失败了。而且一大堆的英文也不知道从何入手&#xff0c;从网上搜了一下&#xff0c;找到了汉化的办法&#xff0c;并且解决了问题。我这里走的是Mac的步骤&#xff0c;微软的其实一…

ReadWriteLock 和 StampedLock 的比较与解析

在多线程编程中&#xff0c;我们经常需要使用锁来保证同一时刻只有一个线程能够访问共享资源。Java提供了多种锁的实现&#xff0c;如ReentrantLock、ReadWriteLock、StampedLock等。本文将对ReadWriteLock和StampedLock进行比较&#xff0c;分析它们的原理、优缺点&#xff0c…

SpringBoot3-实现和注册拦截器

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

安卓https抓包(提供软件+视频)

遇到的问题 因为android7.0以上机制不在信任用户证书&#xff0c;导致https协议无法抓包&#xff0c;除非把证书装在系统信任的证书里&#xff0c;此时手机需要root权限&#xff0c;但是如何不需要手机root也能抓包成功呢&#xff1f;我们采用virtualxposedjusttrustme来解决&…

图灵测试:人工智能的终极挑战

图灵测试&#xff1a;人工智能的终极挑战 一、引言 在人工智能的发展历程中&#xff0c;图灵测试一直被视为一个重要的里程碑。这个由英国计算机科学家艾伦图灵提出的实验&#xff0c;旨在评估人工智能是否能够像人一样思考和表达&#xff0c;为人类与机器智能之间的界限设立了…

Chrome浏览器调整搜索标签页按钮位置

地址栏输入 chrome://flags 搜索 chrome-refresh-2023 第一项 修改为Enabled 标签搜索页按钮出现在chrome的左上角 修改为Default 标签搜索页按钮出现在chrome的右上角 修改完成后&#xff0c;点击Relaunch&#xff0c;重启浏览器&#xff0c;修改生效。

Python+Appium自动化测试大法,让你的测试效率飞升,绝不等待!封装元素定位方法超详解!

在appium自动化测试脚本运行的过程中&#xff0c;因为网络不稳定、测试机或模拟器卡顿等原因&#xff0c;有时候会出现页面元素加载超时元素定位失败的情况&#xff0c;但实际这又不是bug&#xff0c;只是元素加载较慢&#xff0c;这个时候我们就会使用元素等待的方法来避免这种…

包与字符串

包是分类管理的需要&#xff0c;建立包用:package&#xff0c;包中类的引用import 学习使用javaAPI中的字符串类String&#xff0c;学会其成员方法的使用 &#xff08;必看&#xff09;eclipse包的分层等级结构设置 因为eclipse的包的结构默认是平行等级的&#xff0c;所以要手…

python多进程和多线程

在知道和使用多进程和多线程之前 需要知道&#xff0c;进程是什么线程是什么&#xff1f; 进程&#xff1a;是计算机中正在运行的程序的实例。它是操作系统调度和管理的基本单位&#xff0c;包含程序代码、数据和执行状态等信息。*每个进程都有自己的内存空间和资源&#xff0…

观察者模式来啦

观察者模式本质上就两个关键的操作&#xff0c;观察者关心自己订阅的主题&#xff0c;主题数据有变化需要通知所有的观察者。 举个&#x1f330; 在武侠甚至玄幻小说中&#xff0c;天人合一一直都是一个重要的&#xff0c;无法缺失的概念。天人合一一直以来都是天骄的专属名词…

Java不可变集合

Java不可变集合 不可变集合&#xff1a;也就是不可以被修改的集合 创建不可变集合的应用场景 ●如果某个数据不能被修改&#xff0c;把它防御性地拷贝到不可变集合中是个很好的实践。 ●当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 简单理解&#xff1…

ArcGIS Enterprise on Kubernetes 11.1安装示例

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 安装前置条件基本安装解压文件生成秘钥执行安装脚本 配置DNS方法一方法…

【Linux 进度条小程序】缓冲区+回车换行

文章目录 回车与换行缓冲区举个栗子fflush函数倒计时小程序进度条小程序 回车与换行 回车和换行是不同的两个概念 回车&#xff1a;\r 使光标回到本行行首。 换行&#xff1a;\n使光标下移一格。 一般我们的键盘上的Enter键是回加换行键 在c语言中 \n 表示回车换行 效果和Ent…