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

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端看到设备已经添加

相关文章:

  • 时间序列数据集增强构造方案(时空网络建模)
  • python 使用 mongodb 的一些方法
  • 综述:语言模型的发展及大模型推理优化
  • 5. HTML 转义字符:在网页中正确显示特殊符号
  • MongoDB培训文档大纲(超详细)
  • 2025-05-07-FFmpeg视频裁剪(尺寸调整,画面比例不变)
  • PDF解析新范式:Free2AI工具实测
  • MySQL CTE (Common Table Expressions) 详解
  • 【前端基础】6、CSS的文本属性(text相关)
  • CSS详细学习笔记
  • FAST-LIO笔记
  • SPL量化 BBIC(多空指标)
  • 代码随想录第36天:动态规划9(序列问题)
  • 机器学习简单概述
  • Open CASCADE学习|ApplicationFramework 框架使用指南
  • 数字化转型-4A架构之应用架构
  • IvorySQL 再次走进北京大学研究生开源公选课
  • ICode国际青少年编程竞赛—Python—4级训练场—复杂嵌套循环
  • Golang的linux运行环境的安装与配置
  • Spark和Hadoop之间的联系
  • 汉斯·季默:不会指挥的声音工程师终成音乐“大神”
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 中国社科院:网文市场超430亿元,作者破3000万人
  • 央行设立服务消费与养老再贷款,额度5000亿元
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 湖南省邵阳市副市长仇珂静主动向组织交代问题,接受审查调查