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')

        # 提取sysname
        sysname = 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']  # 返回节点的UUID
    return 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} 不存在")
        return

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

相关推荐
西门吹雪@13228 分钟前
阿里云服务器-centos部署定时同步数据库数据-dbswitch
服务器·数据库·阿里云
auspicious航2 小时前
PostgreSQL 常用SQL操作命令
数据库·sql·postgresql
Ten peaches2 小时前
苍穹外卖(订单状态定时处理、来单提醒和客户催单)
java·数据库·sql·springboot
冼紫菜2 小时前
Spring 项目无法连接 MySQL:Nacos 配置误区排查与解决
java·spring boot·后端·mysql·docker·springcloud
gbase_lmax2 小时前
gbase8s数据库 tcp连接不同阶段的超时处理
网络·数据库·网络协议·tcp/ip
Aliano2172 小时前
Pinecone向量库 VS Redis
数据库·redis·缓存·pinecone向量库
爬呀爬的水滴2 小时前
02 mysql 管理(Windows版)
数据库·mysql
IT成长日记3 小时前
【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
数据库·hive·sqoop·关系型数据库同步·增量数据导入
芯辰则吉--模拟芯片3 小时前
模拟Sch LVS Sch 方法
服务器·数据库·lvs