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

网站制作 深圳信科网络公司对比网站

网站制作 深圳信科网络,公司对比网站,农业公园网站建设,徐州制作手机网站目录 脚本概述 代码解析 导入模块 日志配置 核心函数config_device 主程序逻辑 使用说明 脚本优化建议 完整代码 脚本概述 这是一个使用Python编写的网络设备批量配置脚本,主要功能是通过SSH协议批量登录多台网络设备(如路由器、交换机等&…

目录

  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.dtcms.com/a/494970.html

相关文章:

  • 百度旗下所有app列表温州seo排名优化
  • 怎样做让百度收录网站域名设计方案翻译
  • 【whistle】whistle的安装和代理配置
  • 智能油脂润滑系统:降低维护成本与提升生产效率的双赢之道
  • CC17-加油站
  • 【办公类-120-01】20251016 UIBOT下载小说做成docx
  • RestTemplate发送Post请求报错:414 URI Too Long
  • 热力图:从逸出数据到宏观模式识别
  • 解决 gf / gau 与 Oh-My-Zsh 别名冲突的两种办法
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序:社群经济的数字化重构路径
  • 【详解vtkVoxelContoursToSurfaceFilter】:从有序XY平面轮廓生成三维表面
  • 版本控制器Git
  • 网站版建设南通制作企业网站
  • 网站后台管理系统的重要技术指标收录快的门户网站
  • 降本增效:如何用RustFS将企业存储TCO降低50%?
  • 当AI遇到信息系统:以AI+用户推荐的标签生命周期为例——标签为什么需要“死亡“?
  • 数据结构入门 (九):线索的“寻路”指引 —— 详解线索二叉树
  • wordpress 织梦十堰网站优化
  • Vue+ts 如何实现父组件和子组件通信
  • 广告制作网站源码高端网站设计公司
  • cpp-stub工作原理详细举例解析
  • 香港服务器CPU中E5和Gold的区别
  • linux shell编程实战 02 变量与交互式输入
  • 网站下载怎么做如何建一个免费试用网站
  • 【LeetCode热题100(45/100)】二叉树展开为链表
  • VUE封装axios调用
  • python的scikit-image库的功能介绍(亲测)
  • 做go分析的网站第一成品网站超市
  • ArrayList和LinkedList的区别
  • PinWin,一个窗口置顶工具