diff --git a/serv00keep.sh b/serv00keep.sh index 5c34058..54e0d62 100644 --- a/serv00keep.sh +++ b/serv00keep.sh @@ -1,3 +1,4 @@ + #!/bin/bash # 定义颜色 re="\033[0m" @@ -25,13 +26,11 @@ export resport=${resport:-''} devil binexec on >/dev/null 2>&1 USERNAME=$(whoami | tr '[:upper:]' '[:lower:]') HOSTNAME=$(hostname) -snb=$(hostname | awk -F '.' '{print $1}') +snb=$(hostname | cut -d. -f1) 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 @@ -42,43 +41,83 @@ 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" -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 +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 else -while IFS='|' read -r ip status; do -if [[ $status == "Accessible" ]]; then -echo "$ip: 可用" >> ip.txt +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 else -echo "$ip: 被墙 (Argo与CDN回源节点、proxyip依旧有效)" >> ip.txt -fi -done <<< "$response" +echo "$ARGO_DOMAIN" > $WORKDIR/ARGO_DOMAIN.log +ARGO_DOMAIN=$(<$WORKDIR/ARGO_DOMAIN.log) 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}') + +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) 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 +ps aux | grep '[r]un -c con' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2>&1 +sleep 1 +curl -sk "http://${snb}.${USERNAME}.serv00.net/up" > /dev/null 2>&1 +sleep 5 } okip(){ @@ -102,23 +141,6 @@ 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 | cut -d. -f1) +' > 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 + 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") @@ -513,10 +640,18 @@ else fi fi } -if [ -z "$ARGO_DOMAIN" ] && ! ps aux | grep '[t]unnel --u' > /dev/null; then + +if [ -f "$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}') +checkhttp=$(curl -o /dev/null -s -w "%{http_code}\n" "https://$argosl") +else +argogd=$(cat $WORKDIR/ARGO_DOMAIN.log 2>/dev/null) +checkhttp=$(curl --max-time 2 -o /dev/null -s -w "%{http_code}\n" "https://$argogd") +fi +if ([ -z "$ARGO_DOMAIN" ] && ! ps aux | grep '[t]unnel --u' > /dev/null) || [ "$checkhttp" -ne 404 ]; then ps aux | grep '[t]unnel --u' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2>&1 cfgo -elif [ -n "$ARGO_DOMAIN" ] && ! ps aux | grep '[t]unnel --n' > /dev/null; then +elif ([ -n "$ARGO_DOMAIN" ] && ! ps aux | grep '[t]unnel --n' > /dev/null) || [ "$checkhttp" -ne 404 ]; then ps aux | grep '[t]unnel --n' | awk '{print $2}' | xargs -r kill -9 > /dev/null 2>&1 cfgo else @@ -530,43 +665,19 @@ 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" +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" echo "$vl_link" > jh.txt -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)" +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)" echo "$vmws_link" >> jh.txt -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)" +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)" echo "$vmatls_link" >> jh.txt -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)" +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)" echo "$vma_link" >> jh.txt -hy2_link="hysteria2://$UUID@$IP:$hy2_port?sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2" +hy2_link="hysteria2://$UUID@$IP:$hy2_port?security=tls&sni=www.bing.com&alpn=h3&insecure=1#$snb-hy2-$USERNAME" echo "$hy2_link" >> jh.txt baseurl=$(base64 -w 0 < jh.txt) @@ -670,16 +781,16 @@ cat > sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json < sing_box.json <