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

~全新升级的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
port=8080
npcname=linux_amd64_client.tar.gz

# 下载软件
wgetnpc() {
    echo -e "\033[33m正在下载npc软件......\033[0m"
    yum -y install wget > /dev/null
    yum -y install vim > /dev/null
    mkdir -p /npc1/npc
    if wget -q -P /npc1/npc "https://$download_url/npc/$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 "/npc1/npc/$npcname" -C /npc1/npc && cp /npc1/npc/npc /usr/bin/npc1; 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=3000")
        #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() {
    cat <<EOF > /usr/lib/systemd/system/npc1.service
[Unit]
Description=NPC Client Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/npc1 -server=$download_url:8024 -vkey=$random_variable -type=tcp &> /var/log/npc1.log &
Restart=always

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload && systemctl restart npc1
}

# 输出客户端的相关信息
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 "客户端地址: $get_last_client_addr"
}


add_success2() {
    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 >> /npc1/nps.txt
    add_success2
}

main


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

Docker Desktop 是一款流行的容器平台,它允许开发者在本地计算机上轻松地管理和运行 Docker 容器。要使用 Docker搭建 NPS (Node Package Script) 客户端,你可以按照以下步骤操作: 1. **安装 Docker Desktop**: - 首先访问 Docker 的官方网站下载适合你操作系统的版本并安装。 - 安装过程中,确保设置好 Docket 虚拟驱动,如 Hyper-V(Windows)或 VirtualBox。 2. **创建一个新的 Docker 映像**: 使用 Dockerfile,这是一个包含了构建镜像所有指令的文本文件。例如,创建一个简单的 Dockerfile 可能包含: ``` FROM node:latest WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "npm", "start" ] ``` 这里假设你的 NPS服务依赖于 Node.js,并且有一个名为 `package.json` 的文件用于管理依赖。 3. **构建 Docker 映像**: 打开命令行工具,进入包含 Dockerfile 的目录,然后运行 `docker build -t your-image-name .`,这会根据 Dockerfile 构建一个新的镜像。 4. **运行 Docker 容器**: 创建一个名为 `nps-client` 的新容器,运行 `docker run -p 8080:8080 your-image-name`, `-p` 参数将主机的 8080 端口映射到容器内的 8080 端口,使得外部可以访问。 5. **验证 NPS客户端是否运行正常**: 访问 `http://localhost:8080` 或者如果你配置了其他端口,替换为你机器的实际 IP 和端口号,看是否能看到 NPS客户端的服务运行起来了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值