#!/usr/bin/env bash # 双链路代理验收:链路 101、站点 200、面板 200(带浏览器 UA) # # 用法: # ./verify-links.sh \ # --link <域名A>:/<路径> \ # --link <域名B>:/<路径> \ # --site <站点域名> \ # --panel https://<面板域名>/ --panel-auth user:secret # # 退出码:全部通过为 0,任一失败为 1 set -u UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" WS_KEY="dGhlIHNhbXBsZSBub25jZQ==" FAIL=0 CHECKS=0 check_link() { CHECKS=$((CHECKS+1)) local spec="$1" local host="${spec%%:*}" local path="${spec#*:}" local out out=$(curl -s -i --http1.1 \ -H "Upgrade: websocket" -H "Connection: Upgrade" \ -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: $WS_KEY" \ --max-time 20 "https://${host}${path}" 2>/dev/null | grep -oE "HTTP/1.1 (101|4[0-9][0-9]|5[0-9][0-9])" | head -1) if echo "$out" | grep -q "101"; then echo " PASS link ${host}${path} ${out}" else echo " FAIL link ${host}${path} 期望 101,实际 ${out:-无响应}" FAIL=1 fi } check_site() { CHECKS=$((CHECKS+1)) local host="$1" local code code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 20 "https://${host}/" 2>/dev/null) if [ "$code" = "200" ]; then echo " PASS site ${host} ${code}" else echo " FAIL site ${host} 期望 200,实际 ${code:-无响应}" FAIL=1 fi } check_panel() { CHECKS=$((CHECKS+1)) local url="$1" local auth="$2" local code if [ -n "$auth" ]; then code=$(curl -s -L -o /dev/null -w "%{http_code}" -u "$auth" -A "$UA" --max-time 25 "$url" 2>/dev/null) else code=$(curl -s -L -o /dev/null -w "%{http_code}" -A "$UA" --max-time 25 "$url" 2>/dev/null) fi if [ "$code" = "200" ]; then echo " PASS panel ${url} ${code}" else echo " FAIL panel ${url} 期望 200,实际 ${code:-无响应}" echo " 提示:aaPanel 及同类面板对非浏览器 UA 返回 404,本脚本已带浏览器 UA" FAIL=1 fi } while [ $# -gt 0 ]; do case "$1" in --link) check_link "$2"; shift 2 ;; --site) check_site "$2"; shift 2 ;; --panel) PANEL_URL="$2"; shift 2 ;; --panel-auth) PANEL_AUTH="$2"; shift 2 ;; -h|--help) sed -n '2,12p' "$0"; exit 0 ;; *) echo "未知参数:$1"; exit 2 ;; esac done if [ -n "${PANEL_URL:-}" ]; then check_panel "$PANEL_URL" "${PANEL_AUTH:-}" fi echo if [ "$CHECKS" -eq 0 ]; then echo "没有给任何检查项(--link / --site / --panel),这不叫通过" exit 2 fi if [ "$FAIL" -eq 0 ]; then echo "全部通过" else echo "存在失败项,按上面的 FAIL 行定位" fi exit "$FAIL"