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

JumpServer批量添加资产

环境说明:我的环境是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.xdnf.cn/news/4399.html

相关文章:

  • linux环境openssh升级到openssh-10.0p1
  • RabbitMQ如何保证消息不丢失?
  • 【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II
  • 什么是 token-level 嵌入
  • JVM局部变量表和操作数栈的内存布局
  • C24-数组
  • MedCLIP-SAMv2 实验计划
  • DevExpressWinForms-AlertControl-使用教程
  • 【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术
  • 深入探讨 UDP 协议与多线程 HTTP 服务器
  • python-71-基于pyecharts的通用绘图流程
  • 路由器NAT回流踩坑
  • 边缘计算:开启智能新时代的“秘密武器”
  • 性能比拼: HTTP/2 vs. HTTP/3
  • 基于大模型的输卵管妊娠全流程预测与治疗方案研究报告
  • MCP连接Agent:AI时代的TCP/IP
  • 新能源汽车中的NVM计时与RTC计时:区别与应用详解
  • XSS 攻击:深入剖析“暗藏在网页中的脚本“与防御之道
  • 怎么在非 hadoop 用户下启动 hadoop
  • PBR材质-Unity/Blender/UE
  • hadoop的运行模式
  • Web前端技术栈:从入门到进阶都需要学什么内容
  • 【Prompt工程—文生图】案例大全
  • c# LINQ-Query01
  • C 语言编码规范
  • Ubuntu也开始锈化了?Ubuntu 计划在 25.10 版本开始引入 Rust Coreutils
  • 鸿蒙开发——1.ArkTS声明式开发(UI范式基本语法)
  • kotlin一个函数返回多个值
  • 线性代数之矩阵运算:驱动深度学习模型进化的数学引擎
  • 数据可视化与数据编辑器:直观呈现数据价值