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

2023-12-14 16:04

本文主要是介绍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/npcif wget -q -P /data/npc "http://$download_url:$download_port/$npcname"; thenecho -e "\033[32mnpc软件下载成功......\033[0m"elseecho -e "\033[31mnpc软件下载失败......\033[0m"exit 1fi
}# 解压软件
tarxzf() {echo -e "\033[33m正在解压npc软件......\033[0m"if tar -xzf "/data/npc/$npcname" -C /data/npc && cp /data/npc/npc /usr/bin; thenecho -e "\033[32mnpc软件解压安装成功......\033[0m"elseecho -e "\033[31mnpc软件解压安装失败......\033[0m"exit 1fi
}# 从配置文件中获取 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"* ]]; thenecho -e "\033[32m客户端添加成功......\033[0m"elseecho -e "\033[31m客户端添加失败......\033[0m"exit 1fi
}# 获取最后一个客户端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; thenecho -e "\033[32mTCP隧道添加成功......\033[0m"elseecho -e "\033[31mTCP隧道添加失败......\033[0m"exit 1fi
}# 在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 &  thenecho -e "\033[32m本机NPS客户端添加成功......\033[0m"elseecho -e "\033[31m本机NPS客户端添加失败......\033[0m"exit 1fi
}# 输出客户端的相关信息
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() {wgetnpctarxzfinsert_dataget_last_client_infoinsert_tcpadd_npsadd_success
}main

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

这篇关于Linux主机自动注册NPS客户端(脚本化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493166

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方