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

参考官方对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、测试结果如下,也可按自己喜欢的方式更改输出结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浏览器中的Python:Brython

简介 将 Python 代码转换为 JavaScript,使我们能够在浏览器中编写和运行 Python 代码。可以实现python和js代码相互调用。基于Python 3 实现,支持HTML5环境(提供了DOM对象和事件接口)。支持turtle绘图库,可以进行图像…

常用的系统存储过程

exec sp_databases ---列出服务器上所有的数据库信息 exec sp_help student ---查看学生表中的所有信息 exec sp_renamedb Myschool,MySchools ---更改数据库的名称 需要两个参数 一个是原来数据库的名称 一个是要改为的数据库名称 消息框显示:数据库 名称 MyS…

QT -CloudViewer工具

QT -CloudViewer工具 一、演示效果二、关键程序三、程序下载 一、演示效果 二、关键程序 void CloudViewer::doOpen(const QStringList& filePathList) {// Open point cloud file one by onefor (int i 0; i ! filePathList.size(); i) {timeStart(); // time startmycl…

年度巅峰对决:实在智能斩获36氪WISE2023未来商业之王!

近日,36氪「WISE2023商业之王大会」在北京盛大举办,「WISE2023商业之王 年度企业系列名册」随之正式重磅发布,实在智能作为中国AI准独角兽和RPA行业头部企业、超自动化解决方案提供商,凭借较强的综合实力登榜并荣获“WISE2023 未来…

Android蓝牙协议栈fluoride(六) - 设备管理(bt application)

在Android蓝牙协议栈fluoride(五) - 设备管理(bt application)中描述了设备管理中的API、状态机以及事件处理,接下来将描述设备管理中的功耗管理和上报到上层的事件。 功耗管理 连接策略 蓝牙设备有很大比例都是带电池的产品,那么功耗的高低直接决定了…

位1的个数

题目链接 位1的个数 题目描述 注意点 输入必须是长度为 32 的 二进制串 解答思路 位运算判断每一位是否为1 代码 public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int res 0;for (int i 0; i < 32; i) {res …

Java并发编程基础总结

进程和线程概念 什么进程 进程是系统运行的基本单位&#xff0c;通俗的理解我们计算机启动的每一个应用程序都是一个进程。如下图所示&#xff0c;在Windows中这一个个exe文件&#xff0c;都是一个进程。而在JVM下&#xff0c;每一个启动的Main方法都可以看作一个进程。 什么…

.Net Reactor 使用心得

主密钥是干嘛的&#xff1f; 1 若要创建有效的许可证文件&#xff0c;必须使用与用于生成受.NET Reactor保护的输出相同的主密钥来创建许可证。 2 主密钥是在创建项目时生成的&#xff01;必须保存该项目才能保留原始密钥。 dll而不是exe 由于使用的是.net6 生成的代码。 …

极智项目 | 实战烟雾火焰检测

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多项目分享 大家好&#xff0c;我是极智视界&#xff0c;本文来介绍 实战烟雾火焰检测。 本文介绍的 实战烟雾火焰检测项目&#xff0c;提供完整的可以一键执行的项目工程源码&#xff0c;获取方式有两个&#xff1a; (1…

【离散数学】——期末刷题题库(欧拉图和哈密顿图)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Springboot整合阿里云短信服务

目录 1.注册登录用户 2.点击AccessKey管理&#xff0c;开通使用子用户AccessKey 2.1点击进入AccessKey管理 2.2点击用户创建用户 2.3选择控制台创建 2.4权限修改 3.短信服务 4.创建Springboot项目使用SDK 4.1创建一个springboot项目 4.2导入阿里云短信Maven依赖 4.3…

唇彩行业分析:我国彩妆细分品类市场占比63%

唇部彩妆是指在唇部起到化妆修饰作用的产品&#xff0c;包括口红/唇膏、唇蜜/唇彩/唇釉、唇笔/唇线笔、唇泥四大类。总体来看&#xff0c;目前我国唇部彩妆细分品类主要集中在唇膏/口红、唇蜜/唇彩/唇釉。唇笔/唇线笔市场接受程度较低&#xff0c;这是由于唇笔/唇线笔的主要成分…

shell脚本定时自动备份mysql数据库和mysql恢复数据

1、设置一些测试的数据 创建一个database&#xff0c;一些tables和一些数据 create database test_bom default charset utf8 collate utf8_general_ci; use test_bom;create table users( id int not null primary key auto_increment, name varchar(64) not null, password…

通俗易懂:插入排序算法全解析(C++)

插入排序算法是一种简单直观的排序算法&#xff0c;它的原理就像我们玩扑克牌时整理手中的牌一样。下面我将用通俗易懂的方式来解释插入排序算法的工作原理。 假设我们手上有一副无序的扑克牌&#xff0c;我们的目标是将它们从小到大排列起来。插入排序算法的思想是&#xff0…

web实习三_JavaScript编程

编写 JavaScript 程序实现 输出“九九乘法表”&#xff08; 左下三角形形式 &#xff09;。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

qiankun中子系统变化透传到主系统调用主系统方法

1、首先在主系统中qiankun启动前把变动的参数初始化 2、初始化之后就可以通过全局状态通信把参数透传为全局 3、在微应用子系统main.js的qiankun的mount中获取到全局设备参数属性并是设置为子系统全局 4、在微应用子系统中需要去调主系统方法时就在那个地方改变透传过来的参数 …

如何性能测试中进行业务验证?

在性能测试过程中&#xff0c;验证HTTP code和响应业务code码是比较基础的&#xff0c;但是在一些业务中&#xff0c;这些参数并不能保证接口正常响应了&#xff0c;很可能返回了错误信息&#xff0c;所以这个时候对接口进行业务验证就尤其重要。下面分享一个对某个资源进行业务…

ros2+在Ubuntu上安装gazebo

Binary Installation on Ubuntu(Ubuntu上binary方式安装gazebo) Harmonic binaries are provided for Ubuntu Jammy (22.04) and Ubuntu 24.04 (when its released). &#xff08;在Ubuntu22.04或者24.04上都是安装Harmonic版本的gazebo&#xff09;The Harmonic binaries are…

issue unit

The Issue Unit issue queue用来hold住&#xff0c;已经dispatched&#xff0c;但是还没有执行的uops&#xff1b; 当一条uop的所有的operands已经ready之后&#xff0c;request请求会被拉起来&#xff1b;然后issue select logic将会从request bit 1的slot中&#xff0c;选择…

指令寻址(顺序寻址和跳跃寻址)

目录 一. 顺序寻址1.1 定长指令字结构1.2 变长指令字结构 二. 跳跃寻址 \quad 指令寻址:如何确定下一条指令的存放地址? \quad 一. 顺序寻址 \quad 1.1 定长指令字结构 \quad 主存按字编址 \quad 按字节编址 1.2 变长指令字结构 \quad 同种颜色代表一条指令 由于无法判断当前…