Linux主机自动注册NPS客户端(脚本化)

news2024/9/24 21:28:41

参考官方对API使用方法的定义:https://ehang-io.github.io/nps/#/

1、首先必须要在配置文件中开启 auth_key 并配置一个合适的密钥
在这里插入图片描述
2、修改脚本中的可变量参数,以适配自己的环境

#!/bin/bash
# 脚本使用说明:

# 脚本名称:npc_create.sh
# 编写人:清瞳清
# 编写时间:2023-12-10
# 描述:这是一个用于自动注册创建 NPC 的脚本。

# 定义变量
download_url=www.qingtongqing.cc
download_port=8080
port=8081
npcname=linux_amd64_client.tar.gz

# 下载软件
wgetnpc() {
    echo -e "\033[33m正在下载npc软件......\033[0m"
    mkdir -p /data/npc
    if wget -q -P /data/npc "http://$download_url:$download_port/$npcname"; then
        echo -e "\033[32mnpc软件下载成功......\033[0m"
    else
        echo -e "\033[31mnpc软件下载失败......\033[0m"
        exit 1
    fi
}

# 解压软件
tarxzf() {
    echo -e "\033[33m正在解压npc软件......\033[0m"
    if tar -xzf "/data/npc/$npcname" -C /data/npc && cp /data/npc/npc /usr/bin; then
        echo -e "\033[32mnpc软件解压安装成功......\033[0m"
    else
        echo -e "\033[31mnpc软件解压安装失败......\033[0m"
        exit 1
    fi
}

# 从配置文件中获取 auth_key
config_auth_key="qingtongqingc"  # 请将此处替换为实际的配置文件中的 auth_key

# 获取当前时间戳(以秒为单位)
timestamp=$(date +%s)

# 将配置文件中的 auth_key 和当前时间戳拼接起来
concatenated_string="${config_auth_key}${timestamp}"

# 对拼接后的字符串进行 MD5 哈希加密
new_auth_key=$(echo -n "$concatenated_string" | md5sum | awk '{print $1}')

# 随机生成16位的字符串作为密钥
random_variable=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)

# 随机生成20000-40000之间的端口号
random_port=$((20000 + RANDOM % 20001))

# 添加客户端
insert_data() {
    echo -e "\033[33m正在添加客户端......\033[0m"
    response=$(curl -s --request POST \
        --url "http://$download_url:$port/client/add" \
        --data "auth_key=$new_auth_key&timestamp=$timestamp&remark=$random_port&u=&p=&vkey=$random_variable&config_conn_allow=1&compress=0&crypt=0")
    if [[ $response == *"success"* ]]; then
        echo -e "\033[32m客户端添加成功......\033[0m"
    else
        echo -e "\033[31m客户端添加失败......\033[0m"
        exit 1
    fi
}

# 获取最后一个客户端ID和密钥
get_last_client_info() {
    response=$(curl -s --request POST \
        --url "http://$download_url:$port/client/list" \
        --data "auth_key=$new_auth_key&timestamp=$timestamp&search=&order=asc&offset=0&limit=300")
        #search代表搜索条件,order代表排序顺序,offset代表偏移量,limit代表限制返回结果的数量(如果存在数量很多出现分页的情况下建议把数值调大)
    get_last_client_id=$(echo "$response" | grep "Id" | awk -F ': ' '{print $2}' | tail -n 1 | tr -d ',')
    #取出返回结果中的Id字段,然后取最后一行,然后去掉逗号
    #get_last_client_key=$(echo "$response" | grep "VerifyKey" | tail -n 1 | tr -d '," ' | awk -F ':' '{print $2}')

    #取出返回结果中的Addr字段,然后取最后一行,然后去掉逗号和空格,然后以冒号为分隔符取第二个字段
    #get_last_client_addr=$(echo "$response" | grep "Addr" | tail -n 1 | tr -d '," ' | awk -F ':' '{print $2}')
}

# 添加TCP隧道
insert_tcp() {
    echo -e "\033[33m正在添加TCP隧道......\033[0m"
    #随机生成固定范围的端口号取决于配置文件中对端口适用范围的限制,如无限制请修改取值范围以免发生冲突
    if curl -s --request POST \
        --url "http://$download_url:$port/index/add" \
        --data "auth_key=$new_auth_key&timestamp=$timestamp&type=tcp&client_id=$get_last_client_id&remark=$random_variable&port=$random_port&target=22&local_path=&strip_pre=&password=" > /dev/null; then
        echo -e "\033[32mTCP隧道添加成功......\033[0m"
    else
        echo -e "\033[31mTCP隧道添加失败......\033[0m"
        exit 1
    fi
}


# 在Linux主机内添加NPS客户端
add_nps() {
    echo -e "\033[33m正在添加本机NPS客户端......\033[0m"
    if npc -server="$download_url:8024" -vkey="$random_variable" -type=tcp &> /var/log/npc.log &  then
        echo -e "\033[32m本机NPS客户端添加成功......\033[0m"
    else
        echo -e "\033[31m本机NPS客户端添加失败......\033[0m"
        exit 1
    fi
}


# 输出客户端的相关信息
add_success() {
    echo -e "\033[32m添加成功: \033[0m"
    echo '服务器名称: '$random_port'_client'
    echo "服务器地址: $download_url"
    echo "客户端ID: $get_last_client_id"
    echo "客户端端口: $random_port"
    echo "客户端密钥: $random_variable"
    echo -e "\033[35m快捷登录方式为 ssh $download_url $random_port\033[0m"
}

# 主函数
main() {
    wgetnpc
    tarxzf
    insert_data
    get_last_client_info
    insert_tcp
    add_nps
    add_success
}

main

3、测试结果如下,也可按自己喜欢的方式更改输出结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I Doc View在线文档预览系统cms.json存在RCE漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 i Doc View是一个在线文档解析应用,旨在提供便捷的文件查看和编辑服务。 漏洞概述 iDocView是一个在线文档I Doc View在线文档预览系统cmd.json 处存在命令执行漏洞,攻击者可通过此漏洞获…

【产品经理】需求池和版本树

在这个人人都是产品经理的时代,每位入行的产品人进阶速度与到达高度各有不同。本文作者结合自身三年产品行业的经历,根据案例拆解产品行业的极简研发过程、需求池、版本树、产品自我优化等相关具体方法论。 一、产品研发的极简过程 1. 产品概述 产品就…

第二证券:股票买卖五档什么意思?

股票生意五档是股票生意中的一个常见术语。它是指股票生意盘中最上面的五个报价。股票生意盘是股票商场上的生意报价汇总,其间卖盘代表了其时商场中卖方的报价,买盘代表了其时商场中买方的报价。 股票生意五档通常是指股票生意盘中最上面的五个报价&…

AR眼镜光学方案_AR眼镜整机硬件定制

增强现实(Augmented Reality,AR)技术通过将计算机生成的虚拟物体或其他信息叠加到真实世界中,实现对现实的增强。AR眼镜作为实现AR技术的重要设备,具备虚实结合、实时交互的特点。为了实现透视效果,AR眼镜需要同时显示真实的外部世…

差分法详解

前言 差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题,可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法,会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧! 文章目录 一维差分尾声…

3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

除了读取轻松外,HOOPS Communicator对超大模型的支持效果也非常好,它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型! 那么它是如何来实现对大模型的支持呢? 我们将从以下几个方面与大家分享:最低帧率…

算法的时间复杂度是什么?

算法的时间复杂度是什么? 时间复杂度的概念 时间复杂度是用来估算出程序的运行时间的。我们通常会估计算法的操作单元数量,来代表程序消耗的时间。 随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近…

线性回归在数据库中的应用

简介 今天看到微信群有人问,如何知道数据库一年的磁盘增量?如果没有研究过统计学,IT人员对于这个问题就只能靠经验了去断定了。没经验的往往都是回复扩容越大越好。当然未来的事情我们是无法预料的。本博主就通过简单的线性回归做一个计算&am…

12. IO

1.File类 • File 类代表与平台无关的文件和目录。 • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 1).File的常用方法 在这里插入图片描述 2).遍历给定目录所有文件 …

QT-坦克大战游戏

QT-坦克大战游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "score.h" Score::Score(){health30; maxHealthhealth;QLabel *label1 new QLabel(this);label1->setFrameStyle(QFrame::Plain | QFrame::Box);label1->setStyle…

SpringCloud面试题——Sentinel

一:什么是Sentinel? Sentinel是一个面向分布式架构的轻量级服务保护框架,实现服务降级、服务熔断、服务限流等功能 二:什么是服务降级? 比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备…

干货|你必须要知道的机器视觉常识!

Part.1 机器视觉是什么 机器视觉是一种能够模拟人类视觉系统的技术,是计算机的“慧眼”,能够使计算机理解和解释图像或视频中的信息。 机器视觉包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术…

设计模式-状态(State)模式

目录 开发过程中的一些场景 状态模式的简单介绍 状态模式UML类图 类图讲解 适用场景 Java中的例子 案例讲解 什么是状态机 如何实现状态机 SpringBoot状态自动机 优点 缺点 与其他模式的区别 小结 开发过程中的一些场景 我们在平时的开发过程中,经常会…

C++ Qt开发:ProgressBar进度条组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

EasyExcel处理表头的缓存设置

在学习EasyExcel 时会发现针对使用类模型配置表头相关属性时&#xff0c;EasyExcel 会使用到缓存技术以提升表头的解析速度如下代码&#xff1a; 这些参数再何时设置的哪&#xff1f; 在easyExcel 基础参数设置中会有这个参数filedCacheLocation 。默认采用的使用线程级别的…

MVVM前端设计模式的发展与应用

在MVC模式中&#xff0c;随着代码量越来越大&#xff0c;Controller主要用来处理各种逻辑和数据转化的Controller首当其冲&#xff0c;变得非常庞大&#xff0c;MVC的简写变成了Massive-View-Controller&#xff08;意为沉重的Controller&#xff09; 我曾经接手老项目&#x…

什么是rocketmq❓

在大规模分布式系统中&#xff0c;各个服务之间的通信是至关重要的&#xff0c;而RocketMQ作为一款分布式消息中间件&#xff0c;为解决这一问题提供了强大的解决方案。本文将深入探讨RocketMQ的基本概念、用途&#xff0c;以及在实际分布式系统中的作用&#xff0c;并对Produc…

CBTC上海新能源锂电池展览会奋战华东!2024携手共赢!

2024CBTC上海新能源锂电池技术展览会|上海锂离子电池生产设备展览会 时 间&#xff1a;2024年7月24&#xff5e;26日 地 点&#xff1a;国家会展中心&#xff08;上海虹桥&#xff09; 发展前景&#xff1a; 随着科技的不断进步&#xff0c;锂电池市场逐渐成为全球能源市场的…

GD32f103系列教程—(SPI DMA方式软件实现篇)

DMA知识简介: DMA 控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据&#xff0c;而无需 CPU 的介入&#xff0c;从而使 CPU 可以专注在处理其他系统功能上。 项目中需要采用DMA方式传输数据的原因&#xff1a;如果仅仅采用SPI接口进行寄存器通信&…