Files
sing-box-yg/kp.sh
T
2025-03-21 14:39:46 +08:00

102 lines
6.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 定时设置:*/10 * * * * /bin/bash /root/kp.sh 每10分钟运行一次
# serv00变量添加规则:
# 推荐:为确保节点可用性,建议在Serv00网页不设置端口,脚本会随机生成有效端口,首次运行会中断SSH,请把RES设置为n再执行即可
# RES(必填):n表示每次不重置部署,y表示每次重置部署。REP(必填):n表示不重置随机端口(三个端口留空),y表示重置端口(三个端口留空)。SSH_USER(必填)表示serv00账号名。SSH_PASS(必填)表示serv00密码。REALITY表示reality域名(留空表示serv00官方域名:你serv00账号名.serv00.net)。SUUID表示uuid(留空表示随机uuid)。TCP1_PORT表示vless的tcp端口(留空表示随机tcp端口)。TCP2_PORT表示vmess的tcp端口(留空表示随机tcp端口)。UDP_PORT表示hy2的udp端口(留空表示随机udp端口)。HOST(必填)表示登录serv00服务器域名。ARGO_DOMAIN表示argo固定域名(留空表示临时域名)。ARGO_AUTH表示argo固定域名token(留空表示临时域名)。
# 必填变量:RES、REP、SSH_USER、SSH_PASS、HOST
# 注意[]"",:这些符号不要乱删,按规律对齐
# 每行一个{serv00服务器},一个服务也可,末尾用,间隔,最后一个服务器末尾无需用,间隔
ACCOUNTS='[
{"RES":"n", "REP":"n", "SSH_USER":"你的serv00账号名", "SSH_PASS":"你的serv00账号密码", "REALITY":"你serv00账号名.serv00.net", "SUUID":"自设UUID", "TCP1_PORT":"vless的tcp端口", "TCP2_PORT":"vmess的tcp端口", "UDP_PORT":"hy2的udp端口", "HOST":"s1.serv00.com", "ARGO_DOMAIN":"", "ARGO_AUTH":""},
{"RES":"y", "REP":"y", "SSH_USER":"123456", "SSH_PASS":"7890000", "REALITY":"time.is", "SUUID":"73203ee6-b3fa-4a3d-b5df-6bb2f55073ad", "TCP1_PORT":"", "TCP2_PORT":"", "UDP_PORT":"", "HOST":"s16.serv00.com", "ARGO_DOMAIN":"你的argo固定域名", "ARGO_AUTH":"eyJhIjoiOTM3YzFjYWI88552NTFiYTM4ZTY0ZDQzRmlNelF0TkRBd1pUQTRNVEJqTUdVeCJ9"}
]'
run_remote_command() {
local RES=$1
local REP=$2
local SSH_USER=$3
local SSH_PASS=$4
local REALITY=${5}
local SUUID=$6
local TCP1_PORT=$7
local TCP2_PORT=$8
local UDP_PORT=$9
local HOST=${10}
local ARGO_DOMAIN=${11}
local ARGO_AUTH=${12}
if [ -z "${ARGO_DOMAIN}" ]; then
echo "Argo域名为空,申请Argo临时域名"
else
echo "Argo已设置固定域名:${ARGO_DOMAIN}"
fi
remote_command="export reym=$REALITY UUID=$SUUID vless_port=$TCP1_PORT vmess_port=$TCP2_PORT hy2_port=$UDP_PORT reset=$RES resport=$REP ARGO_DOMAIN=${ARGO_DOMAIN} ARGO_AUTH=${ARGO_AUTH} && bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00keep.sh)"
echo "Executing remote command on $HOST as $SSH_USER with command: $remote_command"
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$remote_command"
}
if cat /etc/issue /proc/version /etc/os-release 2>/dev/null | grep -q -E -i "openwrt"; then
opkg update
opkg install sshpass curl jq
else
if [ -f /etc/debian_version ]; then
package_manager="apt-get install -y"
apt-get update >/dev/null 2>&1
elif [ -f /etc/redhat-release ]; then
package_manager="yum install -y"
elif [ -f /etc/fedora-release ]; then
package_manager="dnf install -y"
elif [ -f /etc/alpine-release ]; then
package_manager="apk add"
fi
$package_manager sshpass curl jq cron >/dev/null 2>&1 &
fi
echo "*****************************************************"
echo "*****************************************************"
echo "甬哥Github项目 github.com/yonggekkk"
echo "甬哥Blogger博客 ygkkk.blogspot.com"
echo "甬哥YouTube频道 www.youtube.com/@ygkkk"
echo "自动远程部署Serv00三合一协议脚本【VPS+软路由】"
echo "版本:V25.2.26"
echo "*****************************************************"
echo "*****************************************************"
count=0
for account in $(echo "${ACCOUNTS}" | jq -c '.[]'); do
count=$((count+1))
RES=$(echo $account | jq -r '.RES')
REP=$(echo $account | jq -r '.REP')
SSH_USER=$(echo $account | jq -r '.SSH_USER')
SSH_PASS=$(echo $account | jq -r '.SSH_PASS')
REALITY=$(echo $account | jq -r '.REALITY')
SUUID=$(echo $account | jq -r '.SUUID')
TCP1_PORT=$(echo $account | jq -r '.TCP1_PORT')
TCP2_PORT=$(echo $account | jq -r '.TCP2_PORT')
UDP_PORT=$(echo $account | jq -r '.UDP_PORT')
HOST=$(echo $account | jq -r '.HOST')
ARGO_DOMAIN=$(echo $account | jq -r '.ARGO_DOMAIN')
ARGO_AUTH=$(echo $account | jq -r '.ARGO_AUTH')
if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" -q exit; then
echo "🎉恭喜!✅第【$count】台服务器连接成功!🚀服务器地址:$HOST ,账户名:$SSH_USER"
if [ -z "${ARGO_DOMAIN}" ]; then
check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep [l]ocalhost:$TCP2_PORT > /dev/null"
else
check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep '[t]oken $ARGO_AUTH' > /dev/null"
fi
if ! sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$check_process" || [[ "$RES" =~ ^[Yy]$ ]]; then
echo "⚠️检测到主进程或者argo进程未启动,或者执行重置"
echo "⚠️现在开始修复或重置部署……请稍等"
output=$(run_remote_command "$RES" "$REP" "$SSH_USER" "$SSH_PASS" "${REALITY}" "$SUUID" "$TCP1_PORT" "$TCP2_PORT" "$UDP_PORT" "$HOST" "${ARGO_DOMAIN}" "${ARGO_AUTH}")
echo "远程命令执行结果:$output"
else
echo "🎉恭喜!✅检测到所有进程正常运行中 "
SSH_USER_LOWER=$(echo "$SSH_USER" | tr '[:upper:]' '[:lower:]')
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "
echo \"配置显示如下:\"
cat domains/${SSH_USER_LOWER}.serv00.net/logs/list.txt
echo \"====================================================\""
fi
else
echo "===================================================="
echo "💥杯具!❌第【$count】台服务器连接失败!🚀服务器地址:$HOST ,账户名:$SSH_USER"
echo "⚠️可能账号名、密码、服务器名称输入错误,或者当前服务器在维护中"
echo "===================================================="
fi
done