环境说明:我的环境是H3C网络设备环境

一、在linux系统环境下通过Python脚本获取交换机信息,IP地址和设备名称一一对应,脚本如下:

cat get_device-sysname.py
import re
from netmiko import ConnectHandler
from concurrent.futures import ThreadPoolExecutor, as_completed# 定义设备信息和登录凭据
device_type = 'hp_comware'
username = 'yan' #以实际为准
password = 'Ywb@1' #以实际为准# 从文件中读取交换机IP地址
with open('ping_successes_20250507_110259.txt') as f:ips = f.read().strip().splitlines()# 定义要提取系统名称的正则表达式
regex_sysname = r"sysname\s+(.*)"# 定义处理单个设备的函数
def process_device(ip):try:print(f"Connecting to device {ip}")# 定义设备参数device = {'device_type': device_type,'host': ip,'username': username,'password': password,'secret': password,  # 密码也用作enable密码'global_delay_factor': 2,  # 增加延迟因子,确保命令执行完整}# 连接设备net_connect = ConnectHandler(**device)# 发送'dis cur'命令并获取输出output_dis_cur = net_connect.send_command('dis cur')# 提取sysnamesysname = re.search(regex_sysname, output_dis_cur, re.IGNORECASE).group(1).strip()# 断开连接net_connect.disconnect()# 返回结果return f"{ip},{sysname}"except Exception as e:return f"{ip},ERROR: {str(e)}"# 使用ThreadPoolExecutor并发处理
with ThreadPoolExecutor(max_workers=20) as executor:future_to_ip = {executor.submit(process_device, ip): ip for ip in ips}with open('sysname_results.txt', 'w') as output_file:for future in as_completed(future_to_ip):result = future.result()output_file.write(result + '\n')print(f"Processed result: {result}")print("All tasks are completed.")

文档说明

ping_successes_20250507_110259.txt-------交换机IP地址内容文档

sysname_results.txt---------------------------------运行脚本后生成设备IP地址和设备名称一一对应信息

生成信息格式如下

10.50.229.3 ,1#Office_Buding_1F-east-Acc2-Sec

二、但是还缺少相关信息,要添加一台设备到JumpServer上,完整信息如下

10.50.229.3,1#Office_Buding_1F-east-Acc2-Sec,16,yab,Yqa2ws,Security-Office building

16-------------------是设备平台的地址,我这里是H3C

平台ID查看方式:

  • 登录 JumpServer 管理后台(Web界面)

  • 左侧导航栏点击 资产管理 > 平台列表

  • 点进进入相关平台,就可以显示平台的ID信息

yab,Yqa2ws-------这是登录设备的账号和密码,最好上面脚本的保持一致

Security-Office building------这里是设备所有的节点信息。

我的设备平台、账号密码、设备所归属的节点都是一直的,所有我是通过sed工具,统一进行信息的添加的

三、

设备信息都准确后进行设备统一添加

1、获取你JumpServer的API信息

curl -X POST http://localhost/api/v1/authentication/auth/ \   #localhost改为你JumpServer的IP地址
     -H 'Content-Type: application/json' \
     -d '{"username": "admin", "password": "admin"}'    #改为实际账号密码

 

cat add_device-to-JumpServer.py
import requests
import json# JumpServer 配置
jumpserver_url = 'http://10.32.254.233'  # JumpServer的URL
api_token = 'PXz1DVBMxeBsFMeyUsTbkAZ2yWE9aACKFEqg'  # API Token
headers = {'Content-Type': 'application/json','Authorization': f'Bearer {api_token}'
}# 设备文件路径
device_file = 'sysname_results.txt'# 获取节点ID
def get_node_uuid(node_name):url = f'{jumpserver_url}/api/v1/assets/nodes/'response = requests.get(url, headers=headers)if response.status_code == 200:nodes = response.json()for node in nodes:if node['name'] == node_name:return node['id']  # 返回节点的UUIDreturn None# 添加设备到JumpServer
def add_device_to_jumpserver(ip, hostname, platform, username, password, node_name):node_id = get_node_uuid(node_name)if not node_id:print(f"节点 {node_name} 不存在")returnurl = f'{jumpserver_url}/api/v1/assets/hosts/'# 请求参数,包含设备的基本信息payload = {"name": hostname,"address": ip,"platform": platform,  # 平台ID,H3C为16"admin_user": {"username": username,"password": password},"nodes": [node_id],  # 使用节点的UUID"is_active": True}# 发送请求添加主机response = requests.post(url, headers=headers, data=json.dumps(payload))if response.status_code == 201:print(f'设备 {hostname} 添加成功')else:print(f'设备 {hostname} 添加失败: {response.text}')# 读取文件并逐行添加设备
with open(device_file, 'r') as file:for line in file:# 解析6个字段ip, hostname, platform, username, password, node_name = line.strip().split(',')add_device_to_jumpserver(ip, hostname, platform, username, password, node_name)

运行完后等1分钟就可以在WEB端看到设备已经添加

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

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

相关文章

理解字、半字与字节 | 从 CPU 架构到编程实践的数据类型解析

注:本文为 “字、半字、字节” 相关文章合辑。 略作重排,未全校。 如有内容异常,请看原文。 理解计算机体系结构中的字、半字与字节 在计算机科学中,理解“字 (Word)”、“半字 (Half-Word)”和“字节 (Byte)”等基本数据单元的…

数据库实验10 函数存储

数据库实验10 一、实验目的 掌握函数和存储过程的定义方法,包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理,区分标量函数与表值函数的应用场景,掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…

2025 RSAC|大语言模型应用风险与厂商攻防新策略

RSA大会全球影响力及2025年LLM热议概览 作为全球规模最大、影响力最深远的网络安全盛会之一,RSA大会每年汇聚数万名业界人士共商安全趋势。在2025 RSAC上,生成式人工智能(Generative AI)尤其是大型语言模型(LLM&#x…

网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…

Transformer数学推导——Q55 证明跨层残差跳跃(Cross-Layer Skip Connections)的信息融合效率

该问题归类到Transformer架构问题集——残差与归一化——残差连接。请参考LLM数学推导——Transformer架构问题集。 1. 引言 在深度学习的发展历程中,网络结构的不断创新推动着模型性能的持续提升。跨层残差跳跃(Cross-Layer Skip Connections&#xf…

41.寻找缺失的第一个正数:原地哈希算法详解

文章目录 引言问题描述方法思路:原地哈希算法算法步骤 完整代码实现关键代码解析复杂度分析示例说明总结 引言 在算法面试和数据处理中,寻找缺失的第一个正数是一个经典问题。题目要求给定一个未排序的整数数组,找到其中缺失的最小正整数&am…

matlab 中function的用法

matlab 中function的用法 前言介绍1. 基本语法示例(1)可以直接输出(2)调用函数 2.输入参数和输出参数示例多输入参数和输出参数定义一个函数,计算两个数的和与差:调用该函数: 3. 默认参数示例 4…

HarmonyOS开发之基于子窗口实现应用内悬浮窗

鸿蒙开发:基于子窗口实现应用内悬浮窗(含完整代码示例) 在现代移动应用中,悬浮窗/悬浮球是一种非常实用的交互方式,常用于展示快捷入口、实时通知、视频播放等场景。例如: 聊天应用中的小助手按钮视频应用的画中画功能游戏或工具类…

可以下载blender/fbx格式模型网站

glbxz.com glbxz.com可以下载blender/fbx格式模型。当然里面有免费的

250505_HTML

HTML 1. HTML5语法与基础标签1.1 HTML5特性1.1.1 空白折叠现象1.1.2 转义字符 1.2 HTML注释1.3 基础标签1.3.1 div标签1.3.2 标题标签1.3.3 段落标签1.3.4 title1.3.5 meta 1.4 html骨架1.4.1 DTD1.4.2 html标签1.4.3 head与body标签 1.5 div标签详解1.5.1 常见class类名 1.6 列…

数据封装的过程

数据的封装过程 传输层 UDP 直接将数据封装为UDP数据报​,添加UDP头部(8B)。 要点: UDP首部简单,无连接不可靠、无重传、无拥塞控制,适用于实时性要求较高的通讯;不需要源端口或不想计算检…

面向AGI的语言认知操作系统形式化模型

邹晓辉融智学语言数据库体系的数学表达 ——面向AGI的语言认知操作系统形式化模型 1. 基础定义与符号系统 设语言宇宙 L 为所有语言要素的集合,其结构可分解为: LY(言)U(语)A(用) 其中: YPGS (音/形/义三元组) U⋃…

基于 Spring Boot 瑞吉外卖系统开发(十)

基于 Spring Boot 瑞吉外卖系统开发(十) 修改菜品 修改菜品是在原有的菜品信息的上对菜品信息进行更新,对此修改菜品信息之前需要将原有的菜品信息在修改界面进行展示,然后再对菜品信息进行修改。 修改菜品分为回显菜品信息和更…

Three.js和WebGL区别、应用建议

Three.js 和 WebGL 是用于在浏览器中创建 3D 图形的两种技术,它们之间有明显的区别和适用场景。 对于一般数据展示和模型展示而言,应用更多的是three.js,毕竟相对学习成本来说webGL跟高,需要投入更多的精力和基础功能的开发和验证上。而three.js封装了webGL的功能,开发相对…

【Vue】移动端开发(Uni-app、Taro)

个人主页:Guiat 归属专栏:Vue 文章目录 1. Uni-app 与 Taro 简介1.1 什么是 Uni-app?1.2 什么是 Taro?1.3 Uni-app vs Taro(对比图) 2. 项目初始化与目录结构2.1 初始化 Uni-app 项目2.2 初始化 Taro 项目&…

自定义SpringBoot Starter-笔记

SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目,结构如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…

linux >!

Linux 中 >! 符号的含义与用法 ‌基本定义‌在 Linux Shell 中,>! 是由 > 和 ! 组合的特殊符号,主要用于 ‌强制覆盖文件‌。其行为与常规的 > 类似,但额外添加了忽略潜在限制的功能。 ‌典型场景‌绕过 noclobber 限制‌: 若 Shell 启用了 noclobber 选项(默…

共铸价值:RWA 联合曲线价值模型,撬动现实资产生态

摘要 本文提出了一种针对真实资产(RWA)产业的联合曲线激励模型,将劳动与数据贡献映射为曲线价值,并基于固定档位与指数衰减奖励发放总计 2.1亿积分。该模型结合了去中心化定价与平滑递减机制,不仅为早期贡献者提供更高…

java安全入门

文章目录 java基础知识this变量方法可变参数构造方法继承的关键字protected super阻止继承方法重载向上转型和向下转型多态抽象接口static静态字段default方法 包final内部类 java序列化与反序列化反射urldns链动态代理类加载器(ClassLoader)双亲委派模型…

前端基础之《Vue(14)—组件通信(1)》

一、什么是组件通信 1、通信是组件或模块之间的数据交互。 2、组件多重通信就形成了数据流,数据流管理的优劣决定了产品能否上线,返工是否频繁的问题。 3、Vue中有哪些常见的通信方案? 组件树的概念: 在Vue中,组件…