feat: auto-extract tunnel token from full cloudflared install command

This commit is contained in:
chunzhi 2026-04-12 13:01:20 +08:00
parent 0115f54b04
commit dbf7cc4a94

View File

@ -57,6 +57,20 @@ SKIP_CLOUDFLARED=false
ALLOW_ALL_PRINCIPALS=false ALLOW_ALL_PRINCIPALS=false
DRY_RUN=false DRY_RUN=false
# 从完整命令或纯 token 中提取 tunnel token
# 支持输入: "sudo cloudflared service install eyJ..." 或直接 "eyJ..."
extract_tunnel_token() {
local input="$1"
# 去掉首尾空白
input="$(echo "$input" | xargs)"
# 如果包含 "install",取最后一个参数作为 token
if [[ "$input" == *"install "* ]]; then
input="${input##*install }"
input="$(echo "$input" | awk '{print $1}')"
fi
echo "$input"
}
SSHD_CONFIG="/etc/ssh/sshd_config" SSHD_CONFIG="/etc/ssh/sshd_config"
CA_PUB_FILE="/etc/ssh/ca.pub" CA_PUB_FILE="/etc/ssh/ca.pub"
BACKUP_SUFFIX="bak.$(date +%Y%m%d_%H%M%S)" BACKUP_SUFFIX="bak.$(date +%Y%m%d_%H%M%S)"
@ -66,7 +80,7 @@ while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
--ca-pubkey) CA_PUBKEY="$2"; shift 2 ;; --ca-pubkey) CA_PUBKEY="$2"; shift 2 ;;
--login-user) LOGIN_USER="$2"; shift 2 ;; --login-user) LOGIN_USER="$2"; shift 2 ;;
--tunnel-token) TUNNEL_TOKEN="$2"; shift 2 ;; --tunnel-token) TUNNEL_TOKEN="$(extract_tunnel_token "$2")"; shift 2 ;;
--skip-cloudflared) SKIP_CLOUDFLARED=true; shift ;; --skip-cloudflared) SKIP_CLOUDFLARED=true; shift ;;
--allow-all-principals) ALLOW_ALL_PRINCIPALS=true; shift ;; --allow-all-principals) ALLOW_ALL_PRINCIPALS=true; shift ;;
--dry-run) DRY_RUN=true; shift ;; --dry-run) DRY_RUN=true; shift ;;
@ -143,13 +157,13 @@ prompt_missing_params() {
echo -e " ${CYAN}Tunnel Token 获取方式:${NC}" echo -e " ${CYAN}Tunnel Token 获取方式:${NC}"
echo " Cloudflare One → Networks → Tunnels → 选择/创建 Tunnel → Install connector" echo " Cloudflare One → Networks → Tunnels → 选择/创建 Tunnel → Install connector"
echo "" echo ""
echo " 控制台会给你一条类似这样的命令" echo " 直接把控制台给你的整条命令粘贴进来,脚本会自动提取 Token"
echo -e " ${GREEN}sudo cloudflared service install eyJhIjoiZDZjN2MwNT...${NC}" echo -e " ${GREEN}sudo cloudflared service install eyJhIjoiZDZjN2MwNT...${NC}"
echo "" echo ""
echo " 你只需要复制 eyJ 开头的那串 Token 粘贴到下面即可。" echo " (也可以只粘贴 eyJ... Token 部分;留空则跳过隧道服务注册)"
echo " (留空则跳过隧道服务注册,之后可手动执行)"
echo "" echo ""
read -rp "请输入 Tunnel Token: " TUNNEL_TOKEN read -rp "请粘贴命令或 Token: " TUNNEL_TOKEN_RAW
TUNNEL_TOKEN="$(extract_tunnel_token "$TUNNEL_TOKEN_RAW")"
fi fi
} }