当前位置: 首页 > news >正文

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)

相关文章:

  • 蓝桥云课ROS一键配置teb教程更新-250604
  • 查看服务应用是否有跑起来命令
  • [Java 基础]注释
  • 实践篇:利用ragas在自己RAG上实现LLM评估②
  • TDengine 在电力行业如何使用 AI ?
  • 6.promise在哪个线程执行?(2)
  • [Java 基础]面向对象-封装
  • 滑动智能降级:Glide优化加载性能的黑科技
  • 代码随想录刷题day29
  • JavaWeb:前后端分离开发-部门管理
  • 62、Consul服务注册中心
  • powershell 安装 .netframework3.5
  • Java观察者模式深度解析:构建松耦合事件驱动系统的艺术
  • Viggle:开启视频人物替换新纪元
  • Python训练营打卡 Day44
  • HTB 靶机 SolarLab Write-up(Medium)
  • 【免费数据】1980-2022年中国2384个站点的水质数据
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • MySQL补充知识点学习
  • 聚沙成塔,三步成书:GitBook极简入门教程
  • 电子商务主要是干嘛的/平原县网站seo优化排名
  • h5制作微信小程序/页面优化的方法有哪些
  • 有哪些网站可以做h5/手机推广软文
  • 黑龙江省垦区建设协会网站/河南网站推广多少钱
  • 网站独立空间是什么意思/沈阳疫情最新消息
  • 做下载网站赚钱/活动营销推广方案