Python网络设备批量配置脚本解析

目录

  1. 脚本概述

  2. 代码解析

    • 导入模块

    • 日志配置

    • 核心函数config_device

    • 主程序逻辑

  3. 使用说明

  4. 脚本优化建议

  5. 完整代码

脚本概述

这是一个使用Python编写的网络设备批量配置脚本,主要功能是通过SSH协议批量登录多台网络设备(如路由器、交换机等),并执行预定义的配置命令。脚本采用了多线程技术,可以同时管理多台设备,大大提高了批量操作的效率。

代码解析

导入模块

import paramiko
import getpass
import logging
import time
from concurrent.futures import ThreadPoolExecutor
  • paramiko: 用于实现SSH协议的Python库,提供SSH客户端功能

  • getpass: 安全获取用户输入的密码(虽然本脚本中未直接使用)

  • logging: Python标准日志模块,用于记录操作日志

  • time: 提供时间相关功能,这里主要用于命令执行间隔

  • ThreadPoolExecutor: 来自concurrent.futures模块,实现线程池功能

日志配置

logging.basicConfig(filename='network_ops.log',level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s'
)

配置日志系统:

  • 日志输出到文件network_ops.log

  • 日志级别为INFO(记录一般操作信息)

  • 日志格式包含时间戳、日志级别和消息内容

核心函数config_device

def config_device(ip,username,password,commands):try:client=paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname=ip,username=username,password=password,timeout=10)logging.info(f'Successfully connected to {ip}')shell=client.invoke_shell()for cmd in commands:shell.send(cmd+'\n')time.sleep(1)output=shell.recv(65535).decode('utf-8')logging.info(f'{ip} output:\n{output}')except Exception as e:logging.error(f'{ip} failed:{str(e)}')finally:client.close()

函数功能解析:

  1. 创建SSHClient对象并设置自动添加主机密钥策略

  2. 连接目标设备(IP、用户名、密码),设置10秒超时

  3. 获取交互式shell会话

  4. 循环发送每条命令,每条命令间隔1秒

  5. 接收命令输出并记录到日志

  6. 异常处理:记录连接或执行失败的原因

  7. 最终确保SSH连接被关闭

主程序逻辑

if __name__=='__main__':username=input('username:')password=getpass.getpass('password:')with open(r'C:\Users\23608\Desktop\ipadd_python.txt','r')as f:ips=[line.strip() for line in f.readlines()]with open(r'C:\Users\23608\Desktop\cmd_file.txt','r')as f:commands=[line.strip() for line in f.readlines()]with ThreadPoolExecutor(max_workers=5) as excutor:for ip in ips:excutor.submit(config_device,ip,username,password,commands)

执行流程:

  1. 获取用户名和密码

  2. 从两个文本文件读取:

    • ipadd_python.txt: 存储设备IP地址列表

    • cmd_file.txt: 存储要执行的命令列表

  3. 创建最大5个线程的线程池

  4. 为每个IP提交一个配置任务到线程池

使用说明

  1. 准备两个文本文件:

    • ipadd_python.txt: 每行一个设备IP地址

    • cmd_file.txt: 每行一条要执行的命令

  2. 运行脚本,输入设备的用户名和密码

  3. 查看network_ops.log文件获取执行结果

完整代码

import paramiko
import getpass
import logging
import time
from concurrent.futures import ThreadPoolExecutorlogging.basicConfig(filename='network_ops.log',level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s'
)def config_device(ip,username,password,commands):try:client=paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname=ip,username=username,password=password,timeout=10)logging.info(f'Successfully connected to {ip}')shell=client.invoke_shell()for cmd in commands:shell.send(cmd+'\n')time.sleep(1)output=shell.recv(65535).decode('utf-8')logging.info(f'{ip} output:\n{output}')except Exception as e:logging.error(f'{ip} failed:{str(e)}')finally:client.close()if __name__=='__main__':username=input('username:')password=getpass.getpass('password:')with open(r'C:\Users\23608\Desktop\ipadd_python.txt','r')as f:ips=[line.strip() for line in f.readlines()]with open(r'C:\Users\23608\Desktop\cmd_file.txt','r')as f:commands=[line.strip() for line in f.readlines()]with ThreadPoolExecutor(max_workers=5) as excutor:for ip in ips:excutor.submit(config_device,ip,username,password,commands)

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

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

相关文章

Z-FOLD: A Frustratingly Easy Post-Training Quantization Scheme for LLMs

文章目录 摘要1 引言2 相关工作2.1 量化2.2 大型语言模型的量化 3 Z-FOLD3.1 新引入的参数 ζ3.2 参数整合(ζ 折叠)3.3 使用校准集的微调 4 实验4.1 实验设置4.2 与其他方法的比较4.3 Z-FOLD 的泛化能力4.4 Z-FOLD 的可移植性4.5 消融研究 5 结论6 限制…

交流电机深度解析:从基础到实战的全面指南

简介 交流电机作为现代工业中不可或缺的动力设备,广泛应用于各个领域。本文将带你深入了解交流电机,从最基础的概念和工作原理开始,逐步介绍其类型、结构、关键参数等基础知识。同时,我们会探讨交流电机在企业级开发研发中的技术实战,包括控制技术、调速方法、建模与仿真…

【靶场】XXE-Lab xxe漏洞

前言 学习xxe漏洞,搭了个XXE-Lab的靶场 一、搭建靶场 现在需要登录,不知道用户名密码,先随便试试抓包 二、判断是否存在xxe漏洞 1.首先登录抓包 看到xml数据解析,由此判断和xxe漏洞有关,但还不确定xxe漏洞是否存在。 2.尝试xxe 漏洞 判断是否存在xxe漏洞 A.send to …

【C++特殊工具与技术】优化内存分配(三):operator new函数和opertor delete函数

目录 一、基础概念:operator new与operator delete的本质 1.1 标准库提供的operator new接口 1.2 标准库operator delete的接口 1.3 关键特性总结 二、new表达式与operator new的调用链解析 2.1 new表达式的底层步骤 2.2 示例:观察new表达式的调用…

[c#]判定当前软件是否用管理员权限打开

有时一些软件的逻辑中需要使用管理员权限对某些文件进行修改时,那么该软件在执行或者打开的场合,就需要用使用管理员身份运行才能达到效果。那么在c#里,如何判定该软件是否是对管理员身份运的呢? 1.取得当前的windows用户。 2.取得…

如果在main中抛出异常,该如何处理

#采用 setDefaultUncaughtExceptionHandler 进行全局兜底 public static void main(String[] args) { Thread.setDefaultUncaughtExceptionHandler((thread, ex) -> { System.err.println("全局捕获异常: " ex.getMessage()); ex.printStackTrace(); System.exi…

HBM 读的那些事

如下所示,为HBM读的时序。注意这里说的HBM是和HBM3是有区别的. RL 的配置,是通过MR2来实现的 WDQS貌似和CK同频。这幅图告诉你,WDQS和CK的源头是一样的,都来自PLL,而且中间没有经过倍频操作。所以两者频率基本是一致的。这是HBM的…

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…

三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计

在Web应用开发中&#xff0c;大数据量的Excel导出功能是常见需求。传统Apache POI的XSSF实现方式在处理超大数据集时&#xff0c;会因全量加载到内存导致OOM&#xff08;内存溢出&#xff09;问题。Spring MVC提供的AbstractXlsxStreamingView通过流式处理机制&#xff0c;有效…

【大模型:知识图谱】--3.py2neo连接图数据库neo4j

【图数据库】--Neo4j 安装_neo4j安装-CSDN博客 需要打开图数据库Neo4j&#xff0c; neo4j console 目录 1.图数据库--连接 2.图数据库--操作 2.1.创建节点 2.2.删除节点 2.3.增改属性 2.4.建立关系 2.5.查询节点 2.6.查询关系 3.图数据库--实例 1.图数据库--连接 fr…

基于dify的营养分析工作流:3分钟生成个人营养分析报告

你去医院做体检&#xff0c;需要多久拿到体检报告呢&#xff1f;医院会为每位病人做一份多维度的健康报告吗&#xff1f;"人工报告需1小时/份&#xff1f;数据误差率高达35%&#xff1f;传统工具无法个性化&#xff1f; Dify工作流AI模型的组合拳&#xff0c;正在重塑健康…

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…

MySQL(56)什么是复合索引?

复合索引&#xff08;Composite Index&#xff09;&#xff0c;也称为多列索引&#xff0c;是在数据库表的多列上创建的索引。它可以提高涉及多个列的查询性能&#xff0c;通过组合多个列的值来索引数据。复合索引特别适用于需要同时过滤多列的查询。 复合索引的优点 提高多列…

高并发下的缓存击穿/雪崩解决方案

有效解决缓存击穿和雪崩的方法包括&#xff1a;1. 使用互斥锁处理缓存击穿&#xff1b;2. 采用熔断器模式防止雪崩&#xff1b;3. 实施缓存预热和降级策略&#xff1b;4. 利用分片和多级缓存分散请求压力。这些方法各有优劣&#xff0c;需根据实际业务场景灵活调整和结合使用。…

【读论文】OpenAI o3与o4系统模型技术报告解读

回顾一下,4月16日,OpenAI发布了一份关于其o系列新模型——OpenAI o3和OpenAI o4-mini——的System Card。这份文档不仅揭示了这两款模型在推理能力和工具使用方面的显著进步,也详细阐述了其训练方法、数据来源、安全评估以及在图像理解生成、数学推理等多个核心领域的表现。…

第1课、LangChain 介绍

LangChain 介绍 LangChain 是一个以大语言模型&#xff08;LLM, Large Language Model&#xff09;为核心的开发框架&#xff0c;旨在帮助开发者高效地将如 GPT-4 等大型语言模型与外部数据源和计算资源集成&#xff0c;构建智能化应用。 1.1 工作原理 如上图所示&#xff…

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…

[论文阅读] 人工智能+软件工程(软件测试) | 当大语言模型遇上APP测试:SCENGEN如何让手机应用更靠谱

当大语言模型遇上APP测试&#xff1a;SCENGEN如何让手机应用更靠谱&#xff1f; 一、论文基础信息 论文标题&#xff1a;LLM-Guided Scenario-based GUI Testing&#xff08;《大语言模型引导的基于场景的GUI测试》&#xff09;作者及机构&#xff1a;Shengcheng Yu等&#x…

香橙派3B学习笔记7:snap安装管理软件包_打包程序与依赖

有时可以尝试把程文件与其依赖一块打包安装&#xff0c;这里就学习一下。 ssh &#xff1a; orangepi本地ip 密码 &#xff1a; orangepi 操作系统发行版&#xff1a; 基于 Ubuntu 20.04.6 LTS&#xff08;Focal Fossa&#xff09;的定制版本&#xff0c;专门为 Orange Pi 设备…

Playwright 测试框架 - .NET

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】