diff --git a/serv00.sh b/serv00.sh index 75a470f..23eae60 100644 --- a/serv00.sh +++ b/serv00.sh @@ -10,23 +10,17 @@ yellow() { echo -e "\e[1;33m$1\033[0m"; } purple() { echo -e "\e[1;35m$1\033[0m"; } reading() { read -p "$(red "$1")" "$2"; } USERNAME=$(whoami | tr '[:upper:]' '[:lower:]') +HOSTNAME=$(hostname) +WORKDIR="${HOME}/domains/${USERNAME}.serv00.net/logs" snb=$(hostname | awk -F '.' '{print $1}') nb=$(hostname | cut -d '.' -f 1 | tr -d 's') -HOSTNAME=$(hostname) -hona=$(hostname | cut -d. -f2) -if [ "$hona" = "serv00" ]; then -address="serv00.net" +devil www add ${USERNAME}.serv00.net php > /dev/null 2>&1 +FILE_PATH="${HOME}/domains/${USERNAME}.serv00.net/public_html" keep_path="${HOME}/domains/${snb}.${USERNAME}.serv00.net/public_nodejs" -[ -d "$keep_path" ] || mkdir -p "$keep_path" -else -address="useruno.com" -fi -WORKDIR="${HOME}/domains/${USERNAME}.${address}/logs" -devil www add ${USERNAME}.${address} php > /dev/null 2>&1 -FILE_PATH="${HOME}/domains/${USERNAME}.${address}/public_html" [ -d "$FILE_PATH" ] || mkdir -p "$FILE_PATH" +[ -d "$keep_path" ] || mkdir -p "$keep_path" [ -d "$WORKDIR" ] || (mkdir -p "$WORKDIR" && chmod 777 "$WORKDIR") -curl -sk "http://${snb}.${USERNAME}.${hona}.net/up" > /dev/null 2>&1 +curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 devil binexec on >/dev/null 2>&1 read_ip() { @@ -53,12 +47,12 @@ read_uuid() { } read_reym() { - yellow "方式一:(推荐)使用${hona}自带域名,不支持proxyip功能:输入回车" + yellow "方式一:(推荐)使用Serv00自带域名,不支持proxyip功能:输入回车" yellow "方式二:使用CF域名(www.speedtest.net),支持proxyip+非标端口反代ip功能:输入s" yellow "方式三:支持其他域名,注意要符合reality域名规则:输入域名" reading "请输入reality域名 【请选择 回车 或者 s 或者 输入域名】: " reym if [[ -z "$reym" ]]; then - reym=$USERNAME.${address} + reym=$USERNAME.serv00.net elif [[ "$reym" == "s" || "$reym" == "S" ]]; then reym=www.speedtest.net fi @@ -82,24 +76,25 @@ if [[ -e $WORKDIR/config.json ]]; then hyp=$(jq -r '.inbounds[0].listen_port' $WORKDIR/config.json) vlp=$(jq -r '.inbounds[3].listen_port' $WORKDIR/config.json) vmp=$(jq -r '.inbounds[4].listen_port' $WORKDIR/config.json) -purple "检测到${hona}-sb-yg脚本已安装,执行端口替换,请稍等……" +purple "检测到Serv00-sb-yg脚本已安装,执行端口替换,请稍等……" sed -i '' "12s/$hyp/$hy2_port/g" $WORKDIR/config.json sed -i '' "33s/$hyp/$hy2_port/g" $WORKDIR/config.json sed -i '' "54s/$hyp/$hy2_port/g" $WORKDIR/config.json sed -i '' "75s/$vlp/$vless_port/g" $WORKDIR/config.json sed -i '' "102s/$vmp/$vmess_port/g" $WORKDIR/config.json -if [ "$hona" = "serv00" ]; then sed -i '' -e "17s|'$vlp'|'$vless_port'|" serv00keep.sh sed -i '' -e "18s|'$vmp'|'$vmess_port'|" serv00keep.sh sed -i '' -e "19s|'$hyp'|'$hy2_port'|" serv00keep.sh -fi -resservsb +bash -c 'ps aux | grep $(whoami) | grep -v "sshd\|bash\|grep" | awk "{print \$2}" | xargs -r kill -9 >/dev/null 2>&1' >/dev/null 2>&1 +sleep 1 +curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 +sleep 5 green "端口替换完成!" -ps aux | grep '[r]un -c con' > /dev/null && green "主进程启动成功,单节点用户修改下客户端三协议端口" || yellow "Sing-box主进程启动失败" +ps aux | grep '[r]un -c con' > /dev/null && green "主进程启动成功,单节点用户修改下客户端三协议端口,订阅链接用户更新下订阅即可" || yellow "Sing-box主进程启动失败,再次重置端口或者多刷几次保活网页,可能会自动恢复" if [ -f "$WORKDIR/boot.log" ]; then -ps aux | grep '[t]unnel --u' > /dev/null && green "Argo临时隧道启动成功,单节点用户在客户端host/sni更换临时域名" || yellow "Argo临时隧道启动失败" +ps aux | grep '[t]unnel --u' > /dev/null && green "Argo临时隧道启动成功,单节点用户在客户端host/sni更换临时域名,订阅链接用户更新下订阅即可" || yellow "Argo临时隧道启动失败,再次重置端口或者多刷几次保活网页,可能会自动恢复" else -ps aux | grep '[t]unnel --n' > /dev/null && green "Argo固定隧道启动成功" || yellow "Argo固定隧道启动失败,请先在CF更改隧道端口:$vmess_port,再重启下Argo隧道" +ps aux | grep '[t]unnel --n' > /dev/null && green "Argo固定隧道启动成功" || yellow "Argo固定隧道启动失败,请先在CF更改隧道端口:$vmess_port,多刷几次保活网页可能会自动恢复" fi fi } @@ -204,19 +199,15 @@ sleep 2 fastrun green "创建快捷方式:sb" echo - if [ "$hona" = "serv00" ]; then servkeep - fi cd $WORKDIR echo get_links cd purple "************************************************************" - purple "${hona}-sb-yg脚本安装结束" - purple "退出SSH" - purple "请再次连接SSH,查看主菜单,请输入快捷方式:sb" + purple "Serv00-sb-yg脚本安装结束,退出SHH" + purple "再次进入脚本时,请输入快捷方式:sb" purple "************************************************************" - sleep 2 kill -9 $(ps -o ppid= -p $$) >/dev/null 2>&1 } @@ -226,10 +217,11 @@ uninstall_singbox() { [Yy]) bash -c 'ps aux | grep $(whoami) | grep -v "sshd\|bash\|grep" | awk "{print \$2}" | xargs -r kill -9 >/dev/null 2>&1' >/dev/null 2>&1 rm -rf domains bin serv00keep.sh webport.sh - sed -i '' '/export PATH="\$HOME\/bin:\$PATH"/d' ~/.bashrc - source ~/.bashrc + #crontab -l | grep -v "serv00keep" >rmcron + #crontab rmcron >/dev/null 2>&1 + #rm rmcron purple "************************************************************" - purple "${hona}-sb-yg卸载完成!" + purple "Serv00-sb-yg卸载完成!" purple "欢迎继续使用脚本:bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00.sh)" purple "************************************************************" ;; @@ -243,12 +235,13 @@ reading "\n清理所有进程并清空所有安装内容,将退出ssh连接, case "$choice" in [Yy]) bash -c 'ps aux | grep $(whoami) | grep -v "sshd\|bash\|grep" | awk "{print \$2}" | xargs -r kill -9 >/dev/null 2>&1' >/dev/null 2>&1 - devil www del ${snb}.${USERNAME}.${address} > /dev/null 2>&1 - devil www del ${USERNAME}.${address} > /dev/null 2>&1 - sed -i '' '/export PATH="\$HOME\/bin:\$PATH"/d' ~/.bashrc - source ~/.bashrc + devil www del ${snb}.${USERNAME}.serv00.net > /dev/null 2>&1 + devil www del ${USERNAME}.serv00.net > /dev/null 2>&1 + #crontab -l | grep -v "serv00keep" >rmcron + #crontab rmcron >/dev/null 2>&1 + #rm rmcron purple "************************************************************" - purple "${hona}-sb-yg清理重置完成!" + purple "Serv00-sb-yg清理重置完成!" purple "欢迎继续使用脚本:bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00.sh)" purple "************************************************************" find ~ -type f -exec chmod 644 {} \; 2>/dev/null @@ -274,12 +267,9 @@ argo_configure() { fi if [[ "$argo_choice" == "g" || "$argo_choice" == "G" ]]; then reading "请输入argo固定隧道域名: " ARGO_DOMAIN - echo "$ARGO_DOMAIN" > ARGO_DOMAIN.log green "你的argo固定隧道域名为: $ARGO_DOMAIN" reading "请输入argo固定隧道密钥(当你粘贴Token时,必须以ey开头): " ARGO_AUTH - echo "$ARGO_AUTH" > ARGO_AUTH.log green "你的argo固定隧道密钥为: $ARGO_AUTH" - rm -rf boot.log else green "使用Argo临时隧道" fi @@ -345,7 +335,7 @@ public_key=$(echo "${output}" | awk '/PublicKey:/ {print $2}') echo "${private_key}" > private_key.txt echo "${public_key}" > public_key.txt openssl ecparam -genkey -name prime256v1 -out "private.key" -openssl req -new -x509 -days 3650 -key "private.key" -out "cert.pem" -subj "/CN=$USERNAME.${address}" +openssl req -new -x509 -days 3650 -key "private.key" -out "cert.pem" -subj "/CN=$USERNAME.serv00.net" cat > config.json << EOF { "log": { @@ -357,7 +347,7 @@ openssl req -new -x509 -days 3650 -key "private.key" -out "cert.pem" -subj "/CN= { "tag": "hysteria-in1", "type": "hysteria2", - "listen": "$(dig @8.8.8.8 +time=5 +short "web$nb.${hona}.com" | sort -u)", + "listen": "$(dig @8.8.8.8 +time=5 +short "web$nb.serv00.com" | sort -u)", "listen_port": $hy2_port, "users": [ { @@ -399,7 +389,7 @@ openssl req -new -x509 -days 3650 -key "private.key" -out "cert.pem" -subj "/CN= { "tag": "hysteria-in3", "type": "hysteria2", - "listen": "$(dig @8.8.8.8 +time=5 +short "cache$nb.${hona}.com" | sort -u)", + "listen": "$(dig @8.8.8.8 +time=5 +short "cache$nb.serv00.com" | sort -u)", "listen_port": $hy2_port, "users": [ { @@ -549,6 +539,7 @@ fi if [ -e "$(basename "${FILE_MAP[bot]}")" ]; then echo "$(basename "${FILE_MAP[bot]}")" > ag.txt agg=$(cat ag.txt) + rm -rf boot.log if [[ $ARGO_AUTH =~ ^[A-Z0-9a-z=]{120,250}$ ]]; then #args="tunnel --edge-ip-version auto --no-autoupdate --protocol http2 run --token ${ARGO_AUTH}" args="tunnel --no-autoupdate run --token ${ARGO_AUTH}" @@ -579,9 +570,9 @@ fi sleep 2 if ! pgrep -x "$(cat sb.txt)" > /dev/null; then red "主进程未启动,根据以下情况一一排查" -yellow "1、选择8重置端口,自动生成随机可用端口(重要)" -yellow "2、选择9重置" -yellow "3、当前${hona}服务器炸了?等会再试" +yellow "1、选择7重置端口,自动生成随机可用端口(重要)" +yellow "2、选择8重置" +yellow "3、当前Serv00服务器炸了?等会再试" red "4、以上都试了,哥直接躺平,交给进程保活,过会再来看" sleep 6 fi @@ -589,6 +580,7 @@ fi get_argodomain() { if [[ -n $ARGO_AUTH ]]; then + echo "$ARGO_DOMAIN" > gdym.log echo "$ARGO_DOMAIN" else local retry=0 @@ -612,15 +604,15 @@ get_argodomain() { get_links(){ argodomain=$(get_argodomain) echo -e "\e[1;32mArgo域名:\e[1;35m${argodomain}\e[0m\n" -vl_link="vless://$UUID@$IP:$vless_port?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$reym&fp=chrome&pbk=$public_key&type=tcp&headerType=none#$snb-reality-$USERNAME" +vl_link="vless://$UUID@$IP:$vless_port?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$reym&fp=chrome&pbk=$public_key&type=tcp&headerType=none#$snb-reality" echo "$vl_link" > jh.txt -vmws_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-$USERNAME\", \"add\": \"$IP\", \"port\": \"$vmess_port\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\", \"sni\": \"\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" +vmws_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws\", \"add\": \"$IP\", \"port\": \"$vmess_port\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\", \"sni\": \"\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" echo "$vmws_link" >> jh.txt -vmatls_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-tls-argo-$USERNAME\", \"add\": \"icook.hk\", \"port\": \"8443\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"tls\", \"sni\": \"$argodomain\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" +vmatls_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-tls-argo\", \"add\": \"icook.hk\", \"port\": \"8443\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"tls\", \"sni\": \"$argodomain\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" echo "$vmatls_link" >> jh.txt -vma_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-argo-$USERNAME\", \"add\": \"icook.hk\", \"port\": \"8880\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\"}" | base64 -w0)" +vma_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-argo\", \"add\": \"icook.hk\", \"port\": \"8880\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\"}" | base64 -w0)" echo "$vma_link" >> jh.txt -hy2_link="hysteria2://$UUID@$IP:$hy2_port?sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2-$USERNAME" +hy2_link="hysteria2://$UUID@$IP:$hy2_port?sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2" echo "$hy2_link" >> jh.txt baseurl=$(base64 -w 0 < jh.txt) @@ -724,16 +716,16 @@ cat > sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json < ${FILE_PATH}/${UUID}_v2sub.txt cat clash_meta.yaml > ${FILE_PATH}/${UUID}_clashmeta.txt cat sing_box.json > ${FILE_PATH}/${UUID}_singbox.txt -V2rayN_LINK="https://${USERNAME}.${address}/${UUID}_v2sub.txt" -Clashmeta_LINK="https://${USERNAME}.${address}/${UUID}_clashmeta.txt" -Singbox_LINK="https://${USERNAME}.${address}/${UUID}_singbox.txt" +V2rayN_LINK="https://${USERNAME}.serv00.net/${UUID}_v2sub.txt" +Clashmeta_LINK="https://${USERNAME}.serv00.net/${UUID}_clashmeta.txt" +Singbox_LINK="https://${USERNAME}.serv00.net/${UUID}_singbox.txt" cat > list.txt < webport.sh declare -f resallport >> webport.sh declare -f check_port >> webport.sh echo 'resallport' >> webport.sh chmod +x webport.sh +#if ! crontab -l 2>/dev/null | grep -q 'serv00keep'; then +#if [ -f "$WORKDIR/boot.log" ] || grep -q "trycloudflare.com" "$WORKDIR/boot.log" 2>/dev/null; then +#check_process="! ps aux | grep '[c]onfig' > /dev/null || ! ps aux | grep [l]ocalhost > /dev/null" +#else +#check_process="! ps aux | grep '[c]onfig' > /dev/null || ! ps aux | grep [t]oken > /dev/null" +#fi +#(crontab -l 2>/dev/null; echo "*/10 * * * * if $check_process; then /bin/bash serv00keep.sh; fi") | crontab - +#fi +#green "安装完毕,默认每10分钟执行一次,运行 crontab -e 可自行修改保活执行间隔" && sleep 2 +#echo green "开始安装多功能主页,请稍等……" -devil www del ${snb}.${USERNAME}.${hona}.net > /dev/null 2>&1 -devil www add ${USERNAME}.${hona}.net php > /dev/null 2>&1 -devil www add ${snb}.${USERNAME}.${hona}.net nodejs /usr/local/bin/node18 > /dev/null 2>&1 +devil www del ${snb}.${USERNAME}.serv00.net > /dev/null 2>&1 +devil www add ${USERNAME}.serv00.net php > /dev/null 2>&1 +devil www add ${snb}.${USERNAME}.serv00.net nodejs /usr/local/bin/node18 > /dev/null 2>&1 ln -fs /usr/local/bin/node18 ~/bin/node > /dev/null 2>&1 ln -fs /usr/local/bin/npm18 ~/bin/npm > /dev/null 2>&1 mkdir -p ~/.npm-global @@ -1248,10 +1250,10 @@ echo 'export PATH=~/.npm-global/bin:~/bin:$PATH' >> $HOME/.bash_profile && sourc rm -rf $HOME/.npmrc > /dev/null 2>&1 cd "$keep_path" npm install basic-auth express dotenv axios --silent > /dev/null 2>&1 -rm $HOME/domains/${snb}.${USERNAME}.${hona}.net/public_nodejs/public/index.html > /dev/null 2>&1 -devil www restart ${snb}.${USERNAME}.${hona}.net -curl -sk "http://${snb}.${USERNAME}.${hona}.net/up" > /dev/null 2>&1 -green "安装完毕,多功能主页地址:http://${snb}.${USERNAME}.${hona}.net" && sleep 2 +rm $HOME/domains/${snb}.${USERNAME}.serv00.net/public_nodejs/public/index.html > /dev/null 2>&1 +devil www restart ${snb}.${USERNAME}.serv00.net +curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 +green "安装完毕,多功能主页地址:http://${snb}.${USERNAME}.serv00.net" && sleep 2 } okip(){ @@ -1282,19 +1284,16 @@ if [[ -e $WORKDIR/config.json ]]; then mkdir -p "$HOME/bin" curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00.sh > "$SCRIPT_PATH" chmod +x "$SCRIPT_PATH" -if [[ ":$PATH:" != *":$HOME/bin:"* ]]; then - echo 'export PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc" - grep -qxF 'source ~/.bashrc' ~/.bash_profile 2>/dev/null || echo 'source ~/.bashrc' >> ~/.bash_profile - source ~/.bashrc -fi -if [ "$hona" = "serv00" ]; then + if [[ ":$PATH:" != *":$HOME/bin:"* ]]; then + echo "export PATH=\"\$HOME/bin:\$PATH\"" >> "$HOME/.bashrc" + source "$HOME/.bashrc" + fi curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/app.js -o "$keep_path"/app.js sed -i '' "15s/name/$snb/g" "$keep_path"/app.js sed -i '' "60s/key/$UUID/g" "$keep_path"/app.js sed -i '' "75s/name/$USERNAME/g" "$keep_path"/app.js sed -i '' "75s/where/$snb/g" "$keep_path"/app.js curl -sSL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00keep.sh -o serv00keep.sh && chmod +x serv00keep.sh -fi curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/index.html -o "$FILE_PATH"/index.html curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sversion | awk -F "更新内容" '{print $1}' | head -n 1 > $WORKDIR/v else @@ -1310,7 +1309,7 @@ ps aux | grep '[r]un -c con' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2 sbb=$(cat sb.txt) nohup ./"$sbb" run -c config.json >/dev/null 2>&1 & sleep 1 -curl -sk "http://${snb}.${USERNAME}.${hona}.net/up" > /dev/null 2>&1 +curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 sleep 5 if pgrep -x "$sbb" > /dev/null; then green "$sbb 主进程重启成功" @@ -1323,102 +1322,34 @@ red "未安装脚本,请选择1进行安装" && exit fi } -resargo(){ -if [[ -e $WORKDIR/config.json ]]; then -cd $WORKDIR -argogdshow(){ -if [ -f ARGO_AUTH.log ]; then -echo -argoport=$(jq -r '.inbounds[4].listen_port' config.json) -purple "如果你想设置原先的Argo固定隧道,请明确以下三点" -purple "1:已设置Argo固定域名:$(cat ARGO_DOMAIN.log)" -purple "2:固定隧道token:$(cat ARGO_AUTH.log)" -purple "3:检查CF官网的ARGO固定隧道端口:$argoport" -echo -fi -} -if [ -f boot.log ]; then -green "当前正在使用Argo临时隧道" -argogdshow -else -green "当前正在使用Argo固定隧道" -argogdshow -fi -argo_configure -ps aux | grep '[t]unnel --u' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2>&1 -ps aux | grep '[t]unnel --n' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2>&1 -agg=$(cat ag.txt) -if [[ ! -f boot.log ]] && [[ "$argo_choice" =~ (G|g) ]]; then -if [ "$hona" = "serv00" ]; then -sed -i '' -e "15s|''|'$(cat ARGO_DOMAIN.log)'|" ~/serv00keep.sh -sed -i '' -e "16s|''|'$(cat ARGO_AUTH.log)'|" ~/serv00keep.sh -fi -args="tunnel --no-autoupdate run --token $(cat ARGO_AUTH.log)" -else -rm -rf boot.log -if [ "$hona" = "serv00" ]; then -sed -i '' -e "15s|'$(cat ARGO_DOMAIN.log)'|''|" ~/serv00keep.sh -sed -i '' -e "16s|'$(cat ARGO_AUTH.log)'|''|" ~/serv00keep.sh -fi -args="tunnel --url http://localhost:$argoport --no-autoupdate --logfile boot.log --loglevel info" -fi - nohup ./"$agg" $args >/dev/null 2>&1 & - sleep 10 -if pgrep -x "$agg" > /dev/null; then - green "$agg Argo进程已启动" -else -for ((i=1; i<=5; i++)); do - red "$agg Argo进程未启动, 重启中...(尝试次数: $i)" - pkill -x "$agg" - nohup ./"$agg" "${args}" >/dev/null 2>&1 & - sleep 5 - if pgrep -x "$agg" > /dev/null; then - purple "$agg Argo进程已成功重启" - break - fi - if [[ $i -eq 5 ]]; then - red "$agg Argo进程重启失败,Argo节点暂不可用,其他节点依旧可用" - fi -done -fi -curl -sk "http://${snb}.${USERNAME}.${hona}.net/up" > /dev/null 2>&1 -purple "Argo域名:$(get_argodomain)" -cd -else -red "未安装脚本,请选择1进行安装" && exit -fi -} - menu() { clear echo "============================================================" green "甬哥Github项目 :github.com/yonggekkk" green "甬哥Blogger博客 :ygkkk.blogspot.com" green "甬哥YouTube频道 :www.youtube.com/@ygkkk" - green "${hona}-sb-yg三协议共存:vless-reality、Vmess-ws(Argo)、Hy2" + green "Serv00-sb-yg三协议共存:vless-reality、Vmess-ws(Argo)、Hy2" green "脚本快捷方式:sb" echo "============================================================" - green "1. 一键安装 ${hona}-sb-yg" + green "1. 一键安装 Serv00-sb-yg" echo "------------------------------------------------------------" - red "2. 卸载删除 ${hona}-sb-yg" + red "2. 卸载删除 Serv00-sb-yg" echo "------------------------------------------------------------" - green "3. 重启主进程 (修复主节点)" + green "3. 重启主进程 (修复节点)" echo "------------------------------------------------------------" - green "4. 切换并重启Argo临时/固定隧道" + green "4. 更新脚本" echo "------------------------------------------------------------" - green "5. 更新脚本" + green "5. 查看各节点分享/sing-box与clash订阅链接/反代IP/ProxyIP" echo "------------------------------------------------------------" - green "6. 查看各节点分享/sing-box与clash订阅链接/反代IP/ProxyIP" + green "6. 查看sing-box与clash配置文件" echo "------------------------------------------------------------" - green "7. 查看sing-box与clash配置文件" + yellow "7. 重置并随机生成新端口 (脚本安装前后都可执行)" echo "------------------------------------------------------------" - yellow "8. 重置并随机生成新端口 (脚本安装前后都可执行)" - echo "------------------------------------------------------------" - yellow "9. 清理所有服务进程与文件 (系统初始化)" + yellow "8. 清理所有服务进程与文件 (系统初始化)" echo "------------------------------------------------------------" red "0. 退出脚本" echo "============================================================" -ym=("$HOSTNAME" "cache$nb.${hona}.com" "web$nb.${hona}.com") +ym=("$HOSTNAME" "cache$nb.serv00.com" "web$nb.serv00.com") rm -rf $WORKDIR/ip.txt for host in "${ym[@]}"; do response=$(curl -sL --connect-timeout 5 --max-time 7 "https://ss.fkj.pp.ua/api/getip?host=$host") @@ -1438,7 +1369,7 @@ done if [[ ! "$response" =~ (unknown|not|error) ]]; then grep ':' $WORKDIR/ip.txt | sort -u -o $WORKDIR/ip.txt fi -green "${hona}服务器名称:${snb}" +green "Serv00服务器名称:${snb}" echo green "当前可选择的IP如下:" cat $WORKDIR/ip.txt @@ -1458,10 +1389,10 @@ insV=$(cat $WORKDIR/v 2>/dev/null) latestV=$(curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sversion | awk -F "更新内容" '{print $1}' | head -n 1) if [ -f $WORKDIR/v ]; then if [ "$insV" = "$latestV" ]; then -echo -e "当前 ${hona}-sb-yg 脚本最新版:${purple}${insV}${re} (已安装)" +echo -e "当前 Serv00-sb-yg 脚本最新版:${purple}${insV}${re} (已安装)" else -echo -e "当前 ${hona}-sb-yg 脚本版本号:${purple}${insV}${re}" -echo -e "检测到最新 ${hona}-sb-yg 脚本版本号:${yellow}${latestV}${re} (可选择5进行更新)" +echo -e "当前 Serv00-sb-yg 脚本版本号:${purple}${insV}${re}" +echo -e "检测到最新 Serv00-sb-yg 脚本版本号:${yellow}${latestV}${re} (可选择4进行更新)" echo -e "${yellow}$(curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sversion)${re}" fi echo -e "=========================================================" @@ -1471,7 +1402,7 @@ if pgrep -x "$sbb" > /dev/null; then green "Sing-box主进程运行正常" green "UUID密码:$showuuid" else -yellow "Sing-box主进程启动失败,建议选择8重置端口,再选择9卸载重装" +yellow "Sing-box主进程启动失败,尝试运行下保活网页、重启、重置端口" fi if [ -f "$WORKDIR/boot.log" ] && grep -q "trycloudflare.com" "$WORKDIR/boot.log"; then argosl=$(cat "$WORKDIR/boot.log" 2>/dev/null | grep -a trycloudflare.com | awk 'NR==2{print}' | awk -F// '{print $2}' | awk '{print $1}') @@ -1480,37 +1411,48 @@ checkhttp=$(curl -o /dev/null -s -w "%{http_code}\n" "https://$argosl") green "Argo临时域名:$argosl $check" fi if [ -f "$WORKDIR/boot.log" ] && ! grep -q "trycloudflare.com" "$WORKDIR/boot.log"; then -yellow "Argo临时域名暂时不存在" +yellow "Argo临时域名暂时不存在,保活过程中会自动恢复" fi if [ ! -f "$WORKDIR/boot.log" ]; then -argogd=$(cat $WORKDIR/ARGO_DOMAIN.log 2>/dev/null) +argogd=$(cat $WORKDIR/gdym.log 2>/dev/null) checkhttp=$(curl --max-time 2 -o /dev/null -s -w "%{http_code}\n" "https://$argogd") [ "$checkhttp" -eq 404 ] && check="域名有效" || check="域名可能无效" green "Argo固定域名:$argogd $check" fi -if [ "$hona" = "serv00" ]; then green "多功能主页如下 (支持保活、重启、重置端口、节点查询)" -purple "http://${snb}.${USERNAME}.${hona}.net" -fi +purple "http://${snb}.${USERNAME}.serv00.net" +#if ! crontab -l 2>/dev/null | grep -q 'serv00keep'; then +#if [ -f "$WORKDIR/boot.log" ] || grep -q "trycloudflare.com" "$WORKDIR/boot.log" 2>/dev/null; then +#check_process="! ps aux | grep '[c]onfig' > /dev/null || ! ps aux | grep [l]ocalhost > /dev/null" +#else +#check_process="! ps aux | grep '[c]onfig' > /dev/null || ! ps aux | grep [t]oken > /dev/null" +#fi +#(crontab -l 2>/dev/null; echo "*/2 * * * * if $check_process; then /bin/bash serv00keep.sh; fi") | crontab - +#purple "发现Serv00开大招了,Cron保活被重置清空了" +#purple "目前Cron保活已修复成功。打开 http://${USERNAME}.${USERNAME}.serv00.net/up 也可实时保活" +#purple "主进程与Argo进程启动中…………1分钟后可再次进入脚本查看" +#else +#green "Cron保活运行正常。打开 http://${USERNAME}.${USERNAME}.serv00.net/up 也可实时保活" +#fi else -echo -e "当前 ${hona}-sb-yg 脚本版本号:${purple}${latestV}${re}" -yellow "未安装 ${hona}-sb-yg 脚本!请选择 1 安装" +echo -e "当前 Serv00-sb-yg 脚本版本号:${purple}${latestV}${re}" +yellow "未安装 Serv00-sb-yg 脚本!请选择 1 安装" fi +#curl -sSL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00.sh -o serv00.sh && chmod +x serv00.sh echo -e "=========================================================" - reading "请输入选择【0-9】: " choice + reading "请输入选择【0-8】: " choice echo case "${choice}" in 1) install_singbox ;; 2) uninstall_singbox ;; 3) resservsb ;; - 4) resargo ;; - 5) fastrun && green "脚本已更新成功" && sleep 2 && sb ;; - 6) showlist ;; - 7) showsbclash ;; - 8) resallport ;; - 9) kill_all_tasks ;; + 4) fastrun && green "脚本已更新成功" && sleep 2 && sb ;; + 5) showlist ;; + 6) showsbclash ;; + 7) resallport ;; + 8) kill_all_tasks ;; 0) exit 0 ;; - *) red "无效的选项,请输入 0 到 9" ;; + *) red "无效的选项,请输入 0 到 8" ;; esac } menu diff --git a/serv00keep.sh b/serv00keep.sh index 9baefd9..5c34058 100644 --- a/serv00keep.sh +++ b/serv00keep.sh @@ -28,8 +28,10 @@ HOSTNAME=$(hostname) snb=$(hostname | awk -F '.' '{print $1}') nb=$(hostname | cut -d '.' -f 1 | tr -d 's') if [[ "$reset" =~ ^[Yy]$ ]]; then +#crontab -l | grep -v "serv00keep" >rmcron +#crontab rmcron >/dev/null 2>&1 +#rm rmcron bash -c 'ps aux | grep $(whoami) | grep -v "sshd\|bash\|grep" | awk "{print \$2}" | xargs -r kill -9 >/dev/null 2>&1' >/dev/null 2>&1 -devil www del ${snb}.${USERNAME}.serv00.net > /dev/null 2>&1 devil www del ${USERNAME}.serv00.net > /dev/null 2>&1 sed -i '/export PATH="\$HOME\/bin:\$PATH"/d' "${HOME}/.bashrc" >/dev/null 2>&1 source "${HOME}/.bashrc" >/dev/null 2>&1 @@ -40,83 +42,43 @@ find ~ -type d -empty -exec rmdir {} \; 2>/dev/null find ~ -exec rm -rf {} \; 2>/dev/null echo "重置系统完成" fi +sleep 2 devil www add ${USERNAME}.serv00.net php > /dev/null 2>&1 FILE_PATH="${HOME}/domains/${USERNAME}.serv00.net/public_html" WORKDIR="${HOME}/domains/${USERNAME}.serv00.net/logs" [ -d "$FILE_PATH" ] || mkdir -p "$FILE_PATH" [ -d "$WORKDIR" ] || (mkdir -p "$WORKDIR" && chmod 777 "$WORKDIR") -keep_path="${HOME}/domains/${snb}.${USERNAME}.serv00.net/public_nodejs" -[ -d "$keep_path" ] || mkdir -p "$keep_path" -if [[ -z "$ARGO_AUTH" ]] && [[ -f "$WORKDIR/ARGO_AUTH.log" ]]; then -ARGO_AUTH=$(<$WORKDIR/ARGO_AUTH.log) -elif [[ -z "$ARGO_AUTH" ]] && [[ ! -f "$WORKDIR/ARGO_AUTH.log" ]]; then -echo "$ARGO_AUTH" > $WORKDIR/ARGO_AUTH.log +read_ip(){ +ym=("$HOSTNAME" "cache$nb.serv00.com" "web$nb.serv00.com") +rm -rf ip.txt +for host in "${ym[@]}"; do +response=$(curl -sL --connect-timeout 5 --max-time 7 "https://ss.fkj.pp.ua/api/getip?host=$host") +if [[ "$response" =~ (unknown|not|error) ]]; then +dig @8.8.8.8 +time=5 +short $host | sort -u >> ip.txt +sleep 1 else -echo "$ARGO_AUTH" > $WORKDIR/ARGO_AUTH.log -ARGO_AUTH=$(<$WORKDIR/ARGO_AUTH.log) -fi -if [[ -z "$ARGO_DOMAIN" ]] && [[ -f "$WORKDIR/ARGO_DOMAIN.log" ]]; then -ARGO_DOMAIN=$(<$WORKDIR/ARGO_DOMAIN.log) -elif [[ -z "$ARGO_DOMAIN" ]] && [[ ! -f "$WORKDIR/ARGO_DOMAIN.log" ]]; then -echo "$ARGO_DOMAIN" > $WORKDIR/ARGO_DOMAIN.log +while IFS='|' read -r ip status; do +if [[ $status == "Accessible" ]]; then +echo "$ip: 可用" >> ip.txt else -echo "$ARGO_DOMAIN" > $WORKDIR/ARGO_DOMAIN.log -ARGO_DOMAIN=$(<$WORKDIR/ARGO_DOMAIN.log) +echo "$ip: 被墙 (Argo与CDN回源节点、proxyip依旧有效)" >> ip.txt +fi +done <<< "$response" fi - -if [[ -z "$UUID" ]] && [[ -f "$WORKDIR/UUID.txt" ]]; then -UUID=$(<$WORKDIR/UUID.txt) -elif [[ -z "$UUID" ]] && [[ ! -f "$WORKDIR/UUID.txt" ]]; then -UUID=$(uuidgen -r) -echo "$UUID" > $WORKDIR/UUID.txt -else -echo "$UUID" > $WORKDIR/UUID.txt -UUID=$(<$WORKDIR/UUID.txt) +done +if [[ ! "$response" =~ (unknown|not|error) ]]; then +grep ':' $WORKDIR/ip.txt | sort -u -o $WORKDIR/ip.txt +fi +if [[ -z "$IP" ]]; then +IP=$(grep -m 1 "可用" ip.txt | awk -F ':' '{print $1}') +if [ -z "$IP" ]; then +IP=$(okip) +if [ -z "$IP" ]; then +IP=$(head -n 1 ip.txt | awk -F ':' '{print $1}') fi -curl -sL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/app.js -o "$keep_path"/app.js -sed -i '' "15s/name/$snb/g" "$keep_path"/app.js -sed -i '' "60s/key/$UUID/g" "$keep_path"/app.js -sed -i '' "75s/name/$USERNAME/g" "$keep_path"/app.js -sed -i '' "75s/where/$snb/g" "$keep_path"/app.js -if [[ -z "$reym" ]] && [[ -f "$WORKDIR/reym.txt" ]]; then -reym=$(<$WORKDIR/reym.txt) -elif [[ -z "$reym" ]] && [[ ! -f "$WORKDIR/reym.txt" ]]; then -reym=$USERNAME.serv00.net -echo "$reym" > $WORKDIR/reym.txt -else -echo "$reym" > $WORKDIR/reym.txt -reym=$(<$WORKDIR/reym.txt) fi - -resallport(){ -portlist=$(devil port list | grep -E '^[0-9]+[[:space:]]+[a-zA-Z]+' | sed 's/^[[:space:]]*//') -if [[ -z "$portlist" ]]; then -yellow "无端口" -else -while read -r line; do -port=$(echo "$line" | awk '{print $1}') -port_type=$(echo "$line" | awk '{print $2}') -yellow "删除端口 $port ($port_type)" -devil port del "$port_type" "$port" -done <<< "$portlist" fi -check_port -hyp=$(jq -r '.inbounds[0].listen_port' $WORKDIR/config.json) -vlp=$(jq -r '.inbounds[3].listen_port' $WORKDIR/config.json) -vmp=$(jq -r '.inbounds[4].listen_port' $WORKDIR/config.json) -sed -i '' "12s/$hyp/$hy2_port/g" $WORKDIR/config.json -sed -i '' "33s/$hyp/$hy2_port/g" $WORKDIR/config.json -sed -i '' "54s/$hyp/$hy2_port/g" $WORKDIR/config.json -sed -i '' "75s/$vlp/$vless_port/g" $WORKDIR/config.json -sed -i '' "102s/$vmp/$vmess_port/g" $WORKDIR/config.json -sed -i '' -e "17s|'$vlp'|'$vless_port'|" serv00keep.sh -sed -i '' -e "18s|'$vmp'|'$vmess_port'|" serv00keep.sh -sed -i '' -e "19s|'$hyp'|'$hy2_port'|" serv00keep.sh -bash -c 'ps aux | grep $(whoami) | grep -v "sshd\|bash\|grep" | awk "{print \$2}" | xargs -r kill -9 >/dev/null 2>&1' >/dev/null 2>&1 -sleep 1 -curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 -sleep 5 } okip(){ @@ -140,6 +102,23 @@ okip(){ echo "$IP" } +uuidport(){ +if [[ -z "$UUID" ]]; then +if [ ! -e UUID.txt ]; then +UUID=$(uuidgen -r) +echo "$UUID" > UUID.txt +else +UUID=$( gdym.log - echo "$ARGO_DOMAIN" - else - local retry=0 - local max_retries=6 - local argodomain="" - while [[ $retry -lt $max_retries ]]; do - ((retry++)) - argodomain=$(cat boot.log 2>/dev/null | grep -a trycloudflare.com | awk 'NR==2{print}' | awk -F// '{print $2}' | awk '{print $1}') - if [[ -n $argodomain ]]; then - break - fi - sleep 2 - done - if [ -z ${argodomain} ]; then - argodomain="Argo临时域名暂时获取失败,Argo节点暂不可用" - fi - echo "$argodomain" - fi -} - - -if [ ! -f serv00keep.sh ]; then -curl -sSL https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00keep.sh -o serv00keep.sh && chmod +x serv00keep.sh -echo '#!/bin/bash -red() { echo -e "\e[1;91m$1\033[0m"; } -green() { echo -e "\e[1;32m$1\033[0m"; } -yellow() { echo -e "\e[1;33m$1\033[0m"; } -purple() { echo -e "\e[1;35m$1\033[0m"; } -USERNAME=$(whoami | tr '\''[:upper:]'\'' '\''[:lower:]'\'') -WORKDIR="${HOME}/domains/${USERNAME}.serv00.net/logs" -snb=$(hostname | awk -F '\''.'\'' '\''{print $1}'\'') -' > webport.sh -declare -f resallport >> webport.sh -declare -f check_port >> webport.sh -echo 'resallport' >> webport.sh -chmod +x webport.sh -green "开始安装多功能主页,请稍等……" -devil www del ${snb}.${USERNAME}.serv00.net > /dev/null 2>&1 -devil www add ${USERNAME}.serv00.net php > /dev/null 2>&1 -devil www add ${snb}.${USERNAME}.serv00.net nodejs /usr/local/bin/node18 > /dev/null 2>&1 -ln -fs /usr/local/bin/node18 ~/bin/node > /dev/null 2>&1 -ln -fs /usr/local/bin/npm18 ~/bin/npm > /dev/null 2>&1 -mkdir -p ~/.npm-global -npm config set prefix '~/.npm-global' -echo 'export PATH=~/.npm-global/bin:~/bin:$PATH' >> $HOME/.bash_profile && source $HOME/.bash_profile -rm -rf $HOME/.npmrc > /dev/null 2>&1 -cd "$keep_path" -npm install basic-auth express dotenv axios --silent > /dev/null 2>&1 -rm $HOME/domains/${snb}.${USERNAME}.serv00.net/public_nodejs/public/index.html > /dev/null 2>&1 -devil www restart ${snb}.${USERNAME}.serv00.net -green "安装完毕,多功能主页地址:http://${snb}.${USERNAME}.serv00.net" -fi - -if [[ "$resport" =~ ^[Yy]$ ]]; then -portlist=$(devil port list | grep -E '^[0-9]+[[:space:]]+[a-zA-Z]+' | sed 's/^[[:space:]]*//') -if [[ -z "$portlist" ]]; then -yellow "无端口" -else -while read -r line; do -port=$(echo "$line" | awk '{print $1}') -port_type=$(echo "$line" | awk '{print $2}') -yellow "删除端口 $port ($port_type)" -devil port del "$port_type" "$port" -done <<< "$portlist" -fi -check_port -fi -rm -rf $HOME/domains/${snb}.${USERNAME}.serv00.net/logs/* - - -cd $WORKDIR -ym=("$HOSTNAME" "cache$nb.serv00.com" "web$nb.serv00.com") -rm -rf ip.txt -for host in "${ym[@]}"; do -response=$(curl -sL --connect-timeout 5 --max-time 7 "https://ss.fkj.pp.ua/api/getip?host=$host") -if [[ "$response" =~ (unknown|not|error) ]]; then -dig @8.8.8.8 +time=5 +short $host | sort -u >> ip.txt -sleep 1 -else -while IFS='|' read -r ip status; do -if [[ $status == "Accessible" ]]; then -echo "$ip: 可用" >> ip.txt -else -echo "$ip: 被墙 (Argo与CDN回源节点、proxyip依旧有效)" >> ip.txt -fi -done <<< "$response" -fi -done -if [[ ! "$response" =~ (unknown|not|error) ]]; then -grep ':' $WORKDIR/ip.txt | sort -u -o $WORKDIR/ip.txt -fi -if [[ -z "$IP" ]]; then -IP=$(grep -m 1 "可用" ip.txt | awk -F ':' '{print $1}') -if [ -z "$IP" ]; then -IP=$(okip) -if [ -z "$IP" ]; then -IP=$(head -n 1 ip.txt | awk -F ':' '{print $1}') -fi -fi -fi - -if [[ -z "$vless_port" ]] || [[ -z "$vmess_port" ]] || [[ -z "$hy2_port" ]]; then -check_port -fi - +download_and_run_singbox() { if [ ! -s sb.txt ] && [ ! -s ag.txt ]; then DOWNLOAD_DIR="." && mkdir -p "$DOWNLOAD_DIR" && FILE_INFO=() FILE_INFO=("https://github.com/yonggekkk/Cloudflare_vless_trojan/releases/download/serv00/sb web" "https://github.com/yonggekkk/Cloudflare_vless_trojan/releases/download/serv00/server bot") @@ -658,19 +530,43 @@ yellow "2、RES选择y运行一次重置系统,再改为n(重要)" yellow "3、当前Serv00服务器炸了?等会再试" red "4、以上都试了,哥直接躺平,交给进程保活,过会再来看" fi +} +get_argodomain() { + if [[ -n $ARGO_AUTH ]]; then + echo "$ARGO_DOMAIN" > gdym.log + echo "$ARGO_DOMAIN" + else + local retry=0 + local max_retries=6 + local argodomain="" + while [[ $retry -lt $max_retries ]]; do + ((retry++)) + argodomain=$(cat boot.log 2>/dev/null | grep -a trycloudflare.com | awk 'NR==2{print}' | awk -F// '{print $2}' | awk '{print $1}') + if [[ -n $argodomain ]]; then + break + fi + sleep 2 + done + if [ -z ${argodomain} ]; then + argodomain="Argo临时域名暂时获取失败,Argo节点暂不可用" + fi + echo "$argodomain" + fi +} +get_links(){ argodomain=$(get_argodomain) echo -e "\e[1;32mArgo域名:\e[1;35m${argodomain}\e[0m\n" -vl_link="vless://$UUID@$IP:$vless_port?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$reym&fp=chrome&pbk=$public_key&type=tcp&headerType=none#$snb-reality-$USERNAME" +vl_link="vless://$UUID@$IP:$vless_port?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$reym&fp=chrome&pbk=$public_key&type=tcp&headerType=none#$snb-reality" echo "$vl_link" > jh.txt -vmws_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-$USERNAME\", \"add\": \"$IP\", \"port\": \"$vmess_port\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\", \"sni\": \"\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" +vmws_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws\", \"add\": \"$IP\", \"port\": \"$vmess_port\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\", \"sni\": \"\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" echo "$vmws_link" >> jh.txt -vmatls_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-tls-argo-$USERNAME\", \"add\": \"icook.hk\", \"port\": \"8443\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"tls\", \"sni\": \"$argodomain\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" +vmatls_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-tls-argo\", \"add\": \"icook.hk\", \"port\": \"8443\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"tls\", \"sni\": \"$argodomain\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)" echo "$vmatls_link" >> jh.txt -vma_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-argo-$USERNAME\", \"add\": \"icook.hk\", \"port\": \"8880\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\"}" | base64 -w0)" +vma_link="vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$snb-vmess-ws-argo\", \"add\": \"icook.hk\", \"port\": \"8880\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"auto\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/$UUID-vm?ed=2048\", \"tls\": \"\"}" | base64 -w0)" echo "$vma_link" >> jh.txt -hy2_link="hysteria2://$UUID@$IP:$hy2_port?sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2-$USERNAME" +hy2_link="hysteria2://$UUID@$IP:$hy2_port?sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2" echo "$hy2_link" >> jh.txt baseurl=$(base64 -w 0 < jh.txt) @@ -774,16 +670,16 @@ cat > sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json <