BOSh
文章321
标签521
分类135
315晚会 36氪 80后 ADB AI AI Agent AI PC AI 代理 AI 助手 AI 网关 AI 评测 AI代理 AI助手 AI处理器 AI大模型 AI安全 AI应用 AI智能体 AI网关 AMD API API 集成 AWS Agent Agentic AI AionUi Alwaysdata Android Apple Arch Linux Argo Tunnel Automation Backup Bash Bosh Bot Bot-hosting C++ CDN CEO CI/CD CLI CLI Proxy API CLIProxyAPI COMPUTEX CRM Chrome 插件 Claude Claude Opus 4.6 Cloudflare Code ConnectBot Credential Manager Ct8.pl CurrentEvents DNS Debian DeepSeek DenchClaw DevOps Devil Docker Elon Musk FreeLLMAPI GCP GEO GPL GPS GPU Gemini Gemini 3.1 Pro Ghostty Git GitHub GitHub Actions Gmail Go Gog Golang Google Google AI Pro Google API Google Gemini Google Photos Google Pixel HKUDS Hardware Hermes Hermes Agent Hexo HidenCloud Hugo Hyprland IPV6 Intel JavaScript Jetpack Compose John Turnus KDE KOSPI Karpathy Kimi-K2.5 Kotlin LINUX LLM LTS LaTeX Linux LiveUSB MW4L Markdow Markdown Matrix MemU Bot Mesh-Network MiniMax Musk NAT64 NIX NODE NVIDIA NVIDIA Build NanoClaw Netcatty Netlify Newsletter Node.js Nvidia Open WebUI OpenAI OpenAI 兼容接口 OpenAI兼容 OpenCLI OpenClaw P2P PDF 编译 Pacman PicoClaw Pixel Pixel 1 Pixel 12 Pixel11 Plasma Prismer Productivity Pura90 Python QClaw QQ机器人 Qualcomm Quickshell RAG RTX Spark Railway Reddit Rust SFTP SSH SeleniumBase Serv00 Serverless Skills SoC Subagent SuperCall Synapse Syncthing TPU TSMC Tailscale Telegram Telegram Bot Tensor Tensor G7 Tim Cook Tunnel Turnstile Ubuntu VLESS VPN VPS Vercel Wayland WeChat Web3 WebSSH WebSocket WebTransport Web开发 Windows WireGuard WorkBuddy X XChat XHTTP X热榜 YouTube ZeroClaw arXiv arch c++ cc-switch cloudflared ct8.pl email git hugo hyprmod i3wm iMessage iOS n8n nanobot node js ntfs pacman podman zz.ac 东海 两性关系 个人助理 中东 中东冲突 中东局势 中关村论坛 中南大学 中国 中美 乌克兰 习惯养成 云同步 云服务器 亚洲 人性 人教版 代理 代金券 以色列 任务管理 伊朗 伊朗危机 伊朗战争 伦理 体育 使用 俄乌战争 俄罗斯 保护主义 信息流 信息管理 停火 健康管理 光通信 免费VPS 免费主机 免费试用 全球动态 六年级 共和党 关系 养老金 内容工厂 内容生产 内容筛选 内网穿透 军事冲突 军事动态 军民融合 农村 分享 分配 创业 制裁 办公自动化 加密 加密货币 加沙 北斗 北韩 医学生 半导体 华为 协议分析 博客 博客助手 博客发布 博客部署成功 卫星 即时通讯 厄尔尼诺 原生 JS 去中心化 反向代理 反思 反爬虫 反重力 台海局势 台湾 命令 命令行 喷嚏网 国产 国产化 国产替代 国际 国际关系 国际局势 国际新闻 图卦 图说 地缘政治 域名邮箱 基础设施 多代理 多模态AI 大学分析 大模型 孙少平 学习 安全 安装 实时监控 家庭助理 家庭服务器 家装设计 小学 工业策略 工作总结 工作效率 工作流编排 工具 工具链 平凡的世界 平台责任 庞氏骗局 开发 开发实录 开源 开源软件 开源项目 张雪峰 微信 心理健康 快捷键 情感 慈善 战争 房地产 手机 技术分享 投资工具 指标看板 提示词工程 播客 收件箱清理 效率 效率工具 教程 教育制度 数学 数据分析 数据投毒 文件管理 文献管理 新能源汽车 新闻汇总 日历聚合 时事 时事总结 显卡 晨报 智能体 智能体生态 智能手机 服务器部署 朝鲜 极端天气 架构 架构实践 核协议 核武器 桌面Cowork 桌面环境 模型接入 模型配置 欧洲安全 每日图说 比亚迪 气候 油价 法律 活动运营 浏览器自动化 消息通道 消费者权益 深度学习 渔船 游戏开发 湘雅医院 潘石屹 热点新闻 熔断 版本更新 特朗普 生态系统 生活 生活自动化 生物识别 用例 甲骨文云 电池技术 症状追踪 白嫖 白嫖攻略 白山云 皮皮虾 监管 目标管理 知识库 社交媒体 社会保障 社会公平 社会百态 社会观察 科技 科普 科研助手 窗口管理 笔记 第一财经 算法 算法推荐 系统管理 纽森 组网 经济 经济观察 经验分享 编程 网关 网络 网络安全 网络摘录 网络穿透 美伊冲突 美伊谈判 美国 美国制裁 美国大选 美国政治 股灾 能源安全 脚本 腾讯 腾讯,龙虾,OpenClaw 腾讯云 自动化 自动化创作 自动化协作 自动化提醒 自动化流水线 自动化脚本 自动化运维 自建服务 自律教练 自托管 自由软件 芯片 草榴 行为改变 视频摘要 解锁 计算摄影 记录 许可证 论文写作 论文阅读 语义搜索 语音代理 读书 读书笔记 读后感 谷歌云 财报季 路遥 身份验证 轻量级 迁移 运维 进化论 远程访问 远程运维 选车 邀请确认 部署 部署指南 部署教程 量子计算 销售自动化 阅读感悟 随笔 隐私 霍尔木兹 霍尔木兹海峡 青蛙机 韩国股市 韩红 韬定律 项目管理 风险管理 飞书 高中生活 高可用 高考 高考志愿 鸽巢原理 麒麟 麒麟9050 黄仁勋 黎巴嫩 龙虾

一言

文章归档

Cloudflare Argo 远程托管固定隧道脚本使用指南

Cloudflare Argo 远程托管固定隧道脚本使用指南

Cloudflare Argo 远程托管固定隧道脚本使用指南

本文介绍的 Bash 脚本专为自动化管理 Cloudflare Argo (Cloudflare Tunnel) 设计。通过集成 Cloudflare Zero Trust REST API,实现了一键创建远程托管隧道、自动配置域名路由、自动绑定 DNS 记录并输出连接器 Token 的全流程自动化,省去了手动编写本地 config.yml 和管理凭证文件的步骤。

功能特性

  • 一键开通固定隧道:输入隧道名、域名和本地服务端口,自动在云端完成所有映射配置。
  • 零配置文件依赖:采用 Cloudflare 官方推荐的 Remote Managed 架构,无需本地 credentials.json 或 config.yml。
  • 自动化 DNS 解析:创建隧道时同步完成 CNAME 解析记录的添加。
  • 一键生成连接器 Token:直接输出 Token,复制即可在任意机型(Linux、Windows、Docker 等)上快速部署连接器。
  • 人性化交互:支持在任意输入步骤中输入 0 安全返回主菜单。

前置准备

获取 Account ID 和 Zone ID

登录 Cloudflare 控制台,点击目标域名,进入概述页面,右侧 API 区域可以找到 Account ID 和 Zone ID,复制备用。

创建 API Token

需要在 Cloudflare 控制台创建一个自定义 API Token,权限设置如下:

  • Account | Cloudflare Tunnel | Edit
  • Zone | DNS | Edit

创建令牌后复制保存(只显示一次)。

填写到脚本中

打开脚本文件,找到配置文件区填入凭证:

1
2
3
CF_ACCOUNT_ID="你的Account_ID"
CF_API_TOKEN="你的API_Token"
CF_ZONE_ID="你的Zone_ID"

保存后运行 bash argo_tunnel.sh 即可。

菜单功能详解

启动脚本后的主菜单:

1
2
3
4
5
6
7
8
====================================================
Cloudflare Argo 固定隧道管理
====================================================
1) 查看所有固定隧道
2) 创建固定隧道 (包含域名配置与 Token 生成)
3) 删除固定隧道
0) 退出
----------------------------------------------------

查看/创建/删除隧道

  • 查看:列出当前账户下所有活跃隧道,显示 ID、名称、状态。
  • 创建:三步输入(隧道名、域名、本地服务地址),后台自动执行四步操作:创建隧道 → 配置路由 → 绑定 DNS → 提取 Token。
  • 删除:输入 Tunnel ID 清理云端隧道实例。

如何使用 Token 启动连接器?

命令行方式

1
cloudflared tunnel run --token <你的_TOKEN>

Docker 方式(推荐)

1
2
docker run -d --name argo-connector --restart always \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <你的_TOKEN>

常用技巧与注意事项

  1. 中途退出:任何输入步骤按 0 回车即安全返回主菜单。
  2. 依赖自动补全:首次运行自动检测安装 curl 和 jq。
  3. DNS 冲突处理:域名已存在 CNAME/A 记录时不会覆盖,会提示跳过。

完整脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/env bash

# ==============================================================================
# Cloudflare Argo 远程托管固定隧道管理脚本
# ==============================================================================

CF_ACCOUNT_ID="********************"
CF_API_TOKEN="********************"
CF_ZONE_ID="********************"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'

pause() { echo ""; read -r -p "按回车键返回主菜单..."; }

check_env() {
if [[ "$CF_ACCOUNT_ID" == *"你的"* || "$CF_API_TOKEN" == *"你的"* || "$CF_ZONE_ID" == *"你的"* ]]; then
echo -e "${RED}[X] 请先配置 CF_ACCOUNT_ID、CF_API_TOKEN 和 CF_ZONE_ID!${NC}"
exit 1
fi
if ! command -v jq &> /dev/null || ! command -v curl &> /dev/null; then
echo -e "${BLUE}--> 正在自动安装基础依赖 (curl, jq)...${NC}"
if command -v pacman &> /dev/null; then sudo pacman -Sy --noconfirm jq curl
elif command -v apt &> /dev/null; then sudo apt update && sudo apt install -y jq curl
elif command -v yum &> /dev/null; then sudo yum install -y jq curl
fi
fi
}

list_tunnels() {
echo -e "\n${CYAN}====== 当前 Argo 固定隧道列表 ======${NC}"
RESPONSE=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/cfd_tunnel?is_deleted=false" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
SUCCESS=$(echo "$RESPONSE" | jq -r '.success // false')
if [ "$SUCCESS" != "true" ]; then
echo -e "${RED}[X] 获取列表失败:${NC}"; echo "$RESPONSE" | jq '.errors'; pause; return
fi
TOTAL=$(echo "$RESPONSE" | jq '.result | length')
if [ "$TOTAL" -eq 0 ]; then
echo -e "${YELLOW}当前没有活跃的隧道。${NC}"
else
echo "$RESPONSE" | jq -r '.result[] | "ID: \(.id) | 名称: \(.name) | 状态: \(.status)"'
fi
pause
}

create_argo_tunnel() {
echo -e "\n${CYAN}====== 创建 Argo 固定隧道 ======${NC}"
read -r -p "1. 请输入隧道名称 (输入 0 返回): " TUNNEL_NAME
if [[ "$TUNNEL_NAME" == "0" || -z "$TUNNEL_NAME" ]]; then return; fi
read -r -p "2. 请输入绑定的完整域名 (例如 app.yourdomain.com, 输入 0 返回): " FULL_DOMAIN
if [[ "$FULL_DOMAIN" == "0" || -z "$FULL_DOMAIN" ]]; then return; fi
read -r -p "3. 请输入本地服务地址 (默认 http://localhost:8001, 输入 0 返回): " LOCAL_SERVICE
if [ "$LOCAL_SERVICE" == "0" ]; then return; fi
LOCAL_SERVICE=${LOCAL_SERVICE:-"http://localhost:8001"}

echo -e "\n${BLUE}--> [1/4] 正在云端创建远程托管隧道 [$TUNNEL_NAME]...${NC}"
CREATE_RESP=$(curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/cfd_tunnel" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"name\":\"${TUNNEL_NAME}\",\"config_src\":\"cloudflare\"}")
if [ "$(echo "$CREATE_RESP" | jq -r '.success // false')" != "true" ]; then
echo -e "${RED}[X] 隧道创建失败:${NC}"; echo "$CREATE_RESP" | jq '.errors'; pause; return
fi
TUNNEL_ID=$(echo "$CREATE_RESP" | jq -r '.result.id')
echo -e "${GREEN}[✔] 隧道创建成功!Tunnel ID: ${TUNNEL_ID}${NC}"

echo -e "${BLUE}--> [2/4] 正在配置云端应用程序路由 ($FULL_DOMAIN -> $LOCAL_SERVICE)...${NC}"
ROUTE_DATA=$(jq -n --arg hostname "$FULL_DOMAIN" --arg service "$LOCAL_SERVICE" \
'{config: {ingress: [{hostname: $hostname, service: $service}, {service: "http_status:404"}]}}')
ROUTE_RESP=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/cfd_tunnel/${TUNNEL_ID}/configurations" \
-H "Authorization: Bearer ${CF_API_TOKEN}" -H "Content-Type: application/json" --data "$ROUTE_DATA")
if [ "$(echo "$ROUTE_RESP" | jq -r '.success // false')" != "true" ]; then
echo -e "${RED}[X] 云端路由设置失败:${NC}"; echo "$ROUTE_RESP" | jq '.errors'
else
echo -e "${GREEN}[✔] 云端路由规则配置完毕!${NC}"
fi

echo -e "${BLUE}--> [3/4] 正在添加 DNS CNAME 记录...${NC}"
DNS_RESP=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records" \
-H "Authorization: Bearer ${CF_API_TOKEN}" -H "Content-Type: application/json" \
--data "{\"type\":\"CNAME\",\"name\":\"${FULL_DOMAIN}\",\"content\":\"${TUNNEL_ID}.cfargot.com\",\"proxied\":true}")
if [ "$(echo "$DNS_RESP" | jq -r '.success // false')" != "true" ]; then
echo -e "${YELLOW}[!] DNS 绑定未成功 (可能域名已存在解析),请手动确认。${NC}"
else
echo -e "${GREEN}[✔] DNS CNAME 绑定成功!${NC}"
fi

echo -e "${BLUE}--> [4/4] 正在生成连接器 Token...${NC}"
TOKEN_RESP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/cfd_tunnel/${TUNNEL_ID}/token" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
TOKEN=$(echo "$TOKEN_RESP" | jq -r '.result // empty')

if [ -n "$TOKEN" ]; then
echo -e "\n${GREEN}=================== 创建完成 ===================${NC}"
echo -e "${BLUE}域名:${NC} ${FULL_DOMAIN} -> ${LOCAL_SERVICE}"
echo -e "${BLUE}Tunnel ID:${NC} ${TUNNEL_ID}"
echo -e "${BLUE}连接器 Token:${NC}"; echo -e "${YELLOW}${TOKEN}${NC}"
echo -e "${GREEN}================================================${NC}"
echo -e "${CYAN}在客户端只需运行:${NC}"
echo -e "cloudflared tunnel run --token ${TOKEN}"
else
echo -e "${RED}[X] 获取 Token 失败。${NC}"
fi
pause
}

delete_argo_tunnel() {
echo -e "\n${CYAN}====== 删除 Argo 隧道 ======${NC}"
read -r -p "请输入要删除的 Tunnel ID (输入 0 返回): " TUNNEL_ID
if [[ "$TUNNEL_ID" == "0" || -z "$TUNNEL_ID" ]]; then return; fi
echo -e "${BLUE}--> 正在删除云端隧道...${NC}"
RESPONSE=$(curl -s -X DELETE "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/cfd_tunnel/${TUNNEL_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
SUCCESS=$(echo "$RESPONSE" | jq -r '.success // false')
if [ "$SUCCESS" == "true" ]; then
echo -e "${GREEN}[✔] 隧道删除成功!${NC}"
else
echo -e "${RED}[X] 删除失败:${NC}"; echo "$RESPONSE" | jq '.errors'
fi
pause
}

main_menu() {
check_env
while true; do
clear
echo -e "${CYAN}====================================================${NC}"
echo -e "${CYAN} Cloudflare Argo 固定隧道管理 ${NC}"
echo -e "${CYAN}====================================================${NC}"
echo -e " 1) 查看所有固定隧道"
echo -e " 2) 创建固定隧道 (包含域名配置与 Token 生成)"
echo -e " 3) 删除固定隧道"
echo -e " 0) 退出"
echo -e "${CYAN}----------------------------------------------------${NC}"
read -r -p "请选择操作 [0-3]: " CHOICE
case "$CHOICE" in
1) list_tunnels ;;
2) create_argo_tunnel ;;
3) delete_argo_tunnel ;;
0) echo -e "${GREEN}退出程序。${NC}"; exit 0 ;;
*) echo -e "${RED}无效选项!${NC}"; pause ;;
esac
done
}

main_menu

本文由 BOSH 的博客助手 HerMes 整理 🛡️

原文链接:[本地上传]

本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/48291.html
版权声明:本文由BoSh发布,部分内容来源于网络。