使用Terraform自动化部署安全AI Agent服务器:Hetzner Cloud实战指南
基础设施即代码(IaC)是现代DevOps的核心实践,它通过声明式配置文件来定义和管理计算、网络、存储等资源。其核心原理是将基础设施的配置版本化、代码化,从而实现环境部署的一致性和可重复性。这项技术的核心价值在于彻底改变了传统手动运维模式,消除了配置漂移风险,使基础设施的创建、变更和销毁变得可预测、可审计。在应用场景上,IaC特别适用于需要快速搭建、频繁复制且对安全有严格要求的环境,例如部署AI
1. 项目概述与核心价值
最近在折腾一个AI Agent项目,需要一台能稳定运行、安全可控的服务器。自己手动去云平台点点点,配置系统、安全策略、依赖环境,一套流程下来少说也得半小时,还容易出错或遗漏步骤。更别提后续的维护和复现了。于是,我花时间把整个服务器初始化、安全加固和应用环境部署的过程,用Terraform写成了代码,也就是这个 clawdpad 项目。它的核心价值很简单: 用一行命令,在Hetzner Cloud上快速、安全地部署一个为运行OpenClaw AI Agent准备好的Ubuntu VPS ,整个过程自动化,最快两分钟内完成。
简单来说, clawdpad 是一个Terraform配置集。你只需要提供云平台的API密钥和你的SSH公钥,它就能帮你完成从创建虚拟机、配置防火墙、创建非root用户、加固SSH,到安装Node.js运行环境、甚至接入Tailscale私有网络的全过程。最终交付给你的,是一个开箱即用、符合安全最佳实践的“沙箱”,你只需要SSH登录进去,安装OpenClaw即可开始工作。这对于需要快速搭建AI Agent测试环境、演示环境,或者希望生产环境部署具备可重复性和版本控制能力的开发者来说,非常实用。
2. 核心设计思路与架构解析
2.1 为什么选择“基础设施即代码”?
手动管理服务器,尤其是在不同云服务商或不同项目间切换时,配置漂移(Configuration Drift)是个大问题。这次用A方法,下次可能就忘了某个关键的安全设置。Terraform作为“基础设施即代码”工具,将服务器、网络、安全组等资源定义为声明式的配置文件。这意味着:
- 可重复性 :
terraform apply命令在任何时间、任何地方(只要有权限)运行,都会创建出几乎完全一致的环境。 - 版本控制 :所有配置(包括安全规则)都可以用Git管理。你可以清晰地看到每次变更的历史,方便回滚和协作。
- 文档即代码 :
main.tf、variables.tf这些文件本身就是最准确、最实时的环境文档,避免了文档过时的问题。
在 clawdpad 的设计中,我不仅用Terraform创建了最基础的虚拟机,更重要的是将一系列“最佳实践”固化到了代码里,确保每次创建的服务器都自动达到一个较高的安全基线。
2.2 安全架构:纵深防御策略
这个项目的安全设计不是单点加固,而是构建了一个简单的纵深防御体系,主要包含三层:
- 云平台防火墙层 :在Hetzner Cloud控制平面配置防火墙规则。这是第一道关卡,直接在网络入口处过滤流量。默认只放行来自你指定IP地址(
allowed_ssh_ips)的SSH流量,以及整个Tailscale的CGNAT地址段(100.64.0.0/10)。其他所有入站流量(包括HTTP/HTTPS)默认全部拒绝。这相当于给你的服务器房子装了一个只认特定钥匙(IP)的大门。 - 操作系统访问控制层 :在服务器内部,通过
cloud-init脚本进行系统级加固。- 禁用Root直接登录 :创建专用的非root用户(默认为
openclaw),并赋予其免密sudo权限。这样即使SSH密钥泄露,攻击者也无法直接获得root权限。 - 强制密钥认证 :彻底关闭密码登录SSH,只允许使用SSH公钥认证。这基本杜绝了暴力破解密码的可能性。
- 最小化暴露面 :OpenClaw网关服务默认只绑定在
127.0.0.1(本地回环地址)。这意味着,即使有服务存在未公开的漏洞,从公网也无法直接访问到它。
- 禁用Root直接登录 :创建专用的非root用户(默认为
- 应用网络隔离层(可选但推荐) :通过集成Tailscale,构建了一个覆盖在公网之上的私有加密网络。你的OpenClaw服务虽然只监听本地端口,但可以通过Tailscale的安全隧道,从你的个人电脑、手机或其他已加入同一“Tailnet”的设备进行访问。服务地址会变成
https://openclaw.your-tailnet.ts.net这样的形式。这实现了“零信任网络”的雏形——不依赖公网IP和端口转发,访问完全基于设备身份认证。
这三层防御是递进关系。公网防火墙拦住了绝大部分扫描和攻击;系统加固增加了渗透难度;而Tailscale则将核心应用服务从公网彻底“隐藏”起来,只有受信任的设备才能触及。这种设计思路,对于部署像AI Agent这类可能处理敏感信息或需要长期在线的服务,尤为重要。
2.3 工具链选型理由
- Hetzner Cloud :选择它主要是出于性价比和可靠性的考虑。相比主流大厂,Hetzner的云服务器价格非常具有竞争力,并且网络质量和硬件性能在欧洲地区口碑很好。其提供的API功能完善,与Terraform有官方良好的Provider支持,非常适合自动化场景。项目默认的
cx23机型(2核4G)对于运行一个Node.js的AI Agent网关来说,入门完全足够。 - Terraform :作为业界最主流的基础设施即代码工具,生态成熟,学习资料丰富。Hetzner官方提供并维护其Provider,保证了稳定性和功能更新。
- Tailscale :基于WireGuard,配置极其简单,实现了“一键组网”。它完美解决了“如何安全访问内网服务”这个经典难题。相比自建VPN服务器,Tailscale省去了维护服务器、配置路由和防火墙规则的麻烦,并且其“魔法DNS”和访问控制列表功能非常强大。
- Ubuntu 24.04 LTS :选择最新的LTS版本,能获得更长的支持周期和更新的软件包。作为最流行的Linux发行版之一,其社区支持和问题解决方案也最丰富。
3. 前置准备与详细配置指南
3.1 本地环境准备
开始之前,你需要在本地开发机上准备好以下工具和账户。别担心,这个过程大部分是一次性的。
- 安装Terraform :访问 Terraform官网下载页 ,根据你的操作系统(Windows/macOS/Linux)下载对应的二进制包或使用包管理器安装。安装后,在终端运行
terraform version,确认版本号大于等于 1.0。 - 生成SSH密钥对 :如果你还没有SSH密钥,打开终端执行以下命令。全程按回车使用默认值即可,不建议设置密码(passphrase),以免自动化过程中需要交互。
这会在ssh-keygen -t ed25519 -C “your_email@example.com” -f ~/.ssh/id_ed25519_clawdpad~/.ssh/目录下生成两个文件:id_ed25519_clawdpad(私钥,务必妥善保管)和id_ed25519_clawdpad.pub(公钥,即将上传到服务器)。 - 获取Hetzner Cloud账户和API令牌 :
- 注册并登录 Hetzner Cloud控制台 。
- 创建一个新项目(例如命名为“OpenClaw”)。
- 进入该项目,在左侧导航栏点击 Security -> API Tokens 。
- 点击 Generate API Token 。在弹出窗口中,给令牌起个名字(如“terraform-deploy”),权限选择 Read & Write 。然后点击 Generate 。
- 重要 :立即复制生成的令牌字符串并保存到安全的地方(如密码管理器)。这个令牌只会显示一次,它相当于你账户在Hetzner Cloud的“万能密码”,拥有对该项目的完全控制权。
3.2 项目初始化与变量配置
拿到上述“原料”后,就可以开始配置部署了。
- 克隆代码库 :
git clone https://github.com/kudretyilmazz/clawdpad.git cd clawdpad - 配置变量文件 :项目提供了一个模板文件
terraform.tfvars.example。我们需要复制它并填写自己的信息。
现在用你喜欢的文本编辑器(如VSCode, Vim, Nano)打开cp terraform.tfvars.example terraform.tfvarsterraform.tfvars文件。你需要修改以下几个核心变量:
实操心得 :关于# 你的Hetzner Cloud API令牌 hcloud_token = “hcloud_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” # 你刚才生成的SSH公钥内容。可以用 cat 命令查看并复制。 # 例如:cat ~/.ssh/id_ed25519_clawdpad.pub ssh_public_key = “ssh-ed25519 AAAA… you@example.com” # 允许SSH连接的IP地址列表。格式为CIDR,/32表示单个IP。 # 强烈建议只添加你当前所在网络的公网IP。你可以通过访问 ipinfo.io/ip 快速获取。 allowed_ssh_ips = [“203.0.113.1/32”]allowed_ssh_ips,如果你使用家庭宽带,IP可能会变化。一种更灵活的方法是结合动态DNS服务,或者先设置一个较宽的IP段(如你的ISP提供的某个范围),待服务器创建并配置好Tailscale后,再修改防火墙规则,只允许Tailscale网络访问,并移除公网IP规则,实现完全的内网访问。
3.3 Tailscale集成配置详解(可选但推荐)
如果你决定使用Tailscale来获得更安全的访问方式,还需要进行以下配置:
- 注册Tailscale并获取认证密钥 :
- 访问 Tailscale官网 注册一个免费账户。免费账户对于个人使用完全足够,支持最多3个用户和100台设备。
- 登录后,进入 Admin Console -> Settings -> Keys 。
- 点击 Generate auth key 。在配置页面,我建议按如下设置:
- Reusable :选择 No 。这是一个一次性密钥,用完即废,更安全。
- Ephemeral :选择 No 。我们希望这台服务器作为一个持久节点存在于你的Tailnet中。
- Pre-authorize :勾选 Yes 。这样服务器加入网络时无需你在控制台手动点击批准。
- Expiry :设置为 1 hour 。这个密钥只在服务器初始化的
cloud-init阶段使用一次,1小时的有效期完全足够。
- 点击 Generate key ,然后复制生成的以
tskey-auth-开头的密钥字符串。
- 将密钥填入Terraform变量 :回到你的
terraform.tfvars文件,添加或修改变量:
注意事项 :一旦启用Tailscale,tailscale_auth_key = “tskey-auth-xxxxxxxxxxxxxxxxxxxxxxxx”clawdpad的cloud-init脚本会自动将Tailscale的整个CGNAT网段(100.64.0.0/10)添加到Hetzner防火墙的SSH允许列表中。这意味着,只要你的设备连入了同一个Tailnet,即使allowed_ssh_ips列表为空,你也能通过Tailscale网络SSH到服务器。你可以利用这一点,在后续的部署中完全关闭公网SSH,实现“隐身”。
4. 部署执行与服务器初始化全流程
4.1 执行Terraform部署
配置完成后,在项目根目录下按顺序执行以下命令。建议在执行前仔细阅读每个步骤的输出。
- 初始化Terraform :这个命令会下载并初始化Hetzner Cloud的Terraform Provider。
你会看到Terraform成功初始化的提示。terraform init - 生成执行计划 :这是最关键的一步。Terraform会分析你的配置文件,计算出将要创建、修改或销毁哪些资源,并展示一个详细的计划。
请仔细阅读输出。你应该会看到计划创建以下资源:一个SSH密钥(对应你的公钥)、一个防火墙(包含你定义的规则)、一台服务器(terraform plancx23类型,Ubuntu 24.04)。确认无误后,进入下一步。 - 应用配置并创建资源 :执行这个命令将真正开始在Hetzner Cloud上创建资源。
Terraform会再次显示执行计划,并询问你是否确认执行。输入terraform applyyes并按回车。 接下来,Terraform会调用Hetzner Cloud的API。大约30秒到1分钟后,你会看到Apply complete!的提示,并输出服务器的公网IP地址和SSH连接命令。
重要提醒 :此时,Terraform的任务已经完成,它报告成功仅代表Hetzner Cloud的虚拟机实例已经创建完毕并开机。但是,服务器内部的自动化配置脚本( cloud-init )才刚刚开始运行。这个脚本负责安装软件、创建用户、配置环境等所有“细化”工作,通常需要 1到2分钟 。
4.2 连接服务器与验证初始化
- 首次SSH连接 :使用Terraform输出的命令进行连接。用户名为
openclaw。
如果连接被拒绝或超时,请稍等一分钟再试,很可能是ssh openclaw@<你的服务器IP>cloud-init还在运行中。 - 监控初始化进度(推荐) :为了准确知道初始化何时完成,你可以在另一个终端窗口执行以下命令,实时查看初始化日志:
这个日志文件记录了自定义ssh openclaw@<你的服务器IP> ‘tail -f /var/log/cloud-init-custom.log’cloud-init脚本的执行详情。你需要耐心等待,直到看到类似以下的输出行:
看到这行提示,才意味着所有预配置(包括Node.js、npm全局路径、以及可选的Tailscale安装)都已100%完成。在此之前,请不要进行任何软件安装操作,以免环境不完整导致问题。=== Cloud-init completed successfully ===
4.3 初始化脚本详解
cloud-init 是云服务器启动时运行的标准服务。 clawdpad 项目中的 scripts/cloud-init.sh 脚本做了以下几件关键事情,了解它们有助于排查问题:
- 系统更新与基础工具安装 :首先执行
apt update && apt upgrade -y,确保系统是最新的,然后安装curl,git,vim等常用工具。 - 创建非root用户 :创建
openclaw用户,将其加入sudo组,并配置免密码sudo(通过NOPASSWD指令)。同时,将你提供的SSH公钥写入该用户的~/.ssh/authorized_keys文件。 - SSH安全加固 :在
/etc/ssh/sshd_config.d/目录下创建hardening.conf文件,强制启用公钥认证、禁用密码认证、禁用root登录。然后重启SSH服务使配置生效。 - 安装Node.js环境 :使用
nvm(Node Version Manager)安装指定的Node.js版本(默认为v24)。nvm允许每个用户独立管理Node版本,非常灵活。脚本还会配置npm的全局安装路径到用户目录下,避免使用需要root权限的系统路径。 - 可选:安装并配置Tailscale :如果提供了
tailscale_auth_key,脚本会下载Tailscale客户端,使用认证密钥将其加入你的Tailnet,并启用系统服务使其开机自启。
5. 在已部署服务器上安装与配置OpenClaw
当 cloud-init 完成后,你的服务器就已经是一个“OpenClaw-ready”的环境了。接下来是安装OpenClaw本体。
5.1 安装Homebrew与OpenClaw
通过SSH登录到服务器后,依次执行以下命令:
- 安装Homebrew :OpenClaw的某些技能(Skills)依赖Homebrew来安装特定工具(比如
ffmpeg、imagemagick)。虽然服务器环境是Linux,但Homebrew也提供了Linux版本。
安装脚本会给出后续步骤的提示。最关键的是将Homebrew添加到你的shell环境。对于默认的bash,执行:/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
执行echo ‘eval “$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)”’ >> ~/.bashrc eval “$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)”brew --version确认安装成功。 - 安装OpenClaw :由于
nvm和Node.js环境已在初始化时配置好,现在可以直接使用npm全局安装OpenClaw。
安装完成后,运行npm install -g openclaw@latestopenclaw --version检查是否安装成功。
5.2 OpenClaw网关初始化配置
OpenClaw的核心是一个网关服务。我们使用其内置的引导向导进行配置。
openclaw onboard --install-daemon
这个交互式向导会一步步问你几个关键配置问题。以下是我针对VPS部署场景的推荐配置,以及背后的考量:
| 配置项 | 推荐选择 | 原因解析 |
|---|---|---|
| 运行模式 | Manual | 手动模式给予你最大的控制权,可以清晰地看到每一步的配置,适合生产或准生产环境。 |
| 网关类型 | Local gateway | 网关将运行在这台VPS本机上,这是最常见和直接的部署方式。 |
| 绑定地址 | Loopback (127.0.0.1) | 这是安全的关键一步 。绑定到回环地址意味着网关服务只接受来自本机内部的连接。公网无法直接访问它,必须通过SSH隧道或Tailscale这样的“跳板”来连接。 |
| 认证方式 | Token auth | 生成一个Bearer Token用于API调用。相比Session或OAuth,Token方式更简单,适合机器对机器的认证。务必保管好生成的Token。 |
| 启用Tailscale Serve | Yes | 如果你使用了Tailscale,这个选项会将你的OpenClaw网关通过Tailscale的“MagicDNS”以HTTPS形式暴露出来,得到一个 https://openclaw.your-tailnet.ts.net 的固定访问地址,无需自己配置域名和SSL证书。 |
| 运行时 | Node | 选择Node.js运行时,与我们安装的环境一致。 |
| 系统服务 | systemd | 将OpenClaw网关注册为systemd服务,可以实现开机自启、自动重启、日志集中管理,是管理后台服务的最佳实践。 |
向导结束后,它会自动启动服务并打印出访问信息(如本地URL和Tailscale Serve的URL)。你可以立即验证服务状态:
systemctl status openclaw-gateway
如果看到 active (running) 的状态,恭喜你,OpenClaw网关已经成功运行起来了!现在,你可以通过Tailscale网络地址(如 https://openclaw.your-tailnet.ts.net )在浏览器中访问OpenClaw的Web界面,或者使用生成的Token通过API进行调用。
6. 高级配置、成本与安全深度解析
6.1 服务器规格选择与成本控制
Hetzner Cloud提供了多种服务器类型。 clawdpad 默认使用 cx23 ,这是一个平衡的选择。下表帮助你根据需求调整:
| 类型 | vCPU | 内存 | 硬盘 | 流量 | 月费(约) | 适用场景建议 |
|---|---|---|---|---|---|---|
| CX21 | 2 | 4 GB | 40 GB | 20 TB | ~ €3.49 | 默认推荐 。运行OpenClaw网关及少量技能完全足够,性价比最高。 |
| CX31 | 2 | 8 GB | 80 GB | 20 TB | ~ €5.49 | 如果需要运行更多或更耗内存的AI模型/技能,可以考虑升级。 |
| CX41 | 4 | 16 GB | 160 GB | 20 TB | ~ €9.49 | 用于开发测试多个复杂Agent,或预期有较高并发请求。 |
成本提示 :Hetzner Cloud按小时计费,但每月封顶价为表中所列月费。即使你月中创建服务器,月底删除,也只会按实际使用小时数计费,不会收取整月费用。这对于临时性的测试和开发非常友好。
修改服务器类型很简单,只需在 terraform.tfvars 文件中设置 server_type 变量,例如 server_type = “cx31” ,然后重新运行 terraform apply 。Terraform会先销毁旧服务器,再创建新规格的服务器。 注意:这会丢失服务器磁盘上的所有数据! 对于生产环境,务必先做好数据备份。
6.2 安全加固的补充措施
clawdpad 提供了基础的安全框架,但根据你的安全要求,还可以考虑以下增强措施:
- 启用自动安全更新 :虽然初始化时执行了
apt upgrade,但为了持续安全,可以启用无人值守升级。sudo apt install unattended-upgrades -y sudo dpkg-reconfigure --priority=low unattended-upgrades # 选择 Yes 启用 - 配置防火墙(UFW) :Hetzner Cloud防火墙是在云端控制的,在服务器内部再启用一层主机防火墙(如UFW)可以提供深度防御。但要注意规则不要冲突。一个简单的设置是只允许SSH(22)和Tailscale接口(默认是
tailscale0)的流量。sudo ufw allow 22/tcp sudo ufw allow in on tailscale0 sudo ufw --force enable - 使用Fail2ban :Fail2ban可以监控系统日志,当发现恶意扫描或密码爆破行为时,自动临时封禁IP地址。虽然我们禁用了密码登录,但安装Fail2ban仍是一个好习惯。
sudo apt install fail2ban -y sudo systemctl enable fail2ban - 定期备份OpenClaw数据 :OpenClaw的配置、技能、会话等数据默认存储在用户目录下(例如
/home/openclaw/.openclaw或/home/openclaw/clawd)。你应该定期将这些目录备份到其他安全位置(如另一台服务器、对象存储)。可以使用rsync或rclone工具,结合cron定时任务实现自动化备份。
6.3 不使用Tailscale的替代访问方案
如果你不想使用Tailscale,仍然可以通过SSH端口转发(隧道)来访问绑定在 127.0.0.1 的OpenClaw网关。
在你的本地电脑上执行:
ssh -L 3000:127.0.0.1:3000 -N openclaw@<你的服务器IP>
这个命令会在本地打开一个SSH连接,并将你本地 3000 端口的流量,通过加密的SSH隧道转发到服务器本地的 3000 端口(即OpenClaw网关)。
-L 3000:127.0.0.1:3000:建立本地端口转发。-N:表示不执行远程命令,只建立隧道。
保持这个终端窗口打开。然后,你可以在本地浏览器中访问 http://localhost:3000 ,实际上访问的就是远在VPS上、只监听本地的OpenClaw网关服务。
注意事项 :这种方法需要你一直保持SSH连接。断开连接,隧道就断了。你可以使用 tmux 或 screen 这样的终端复用工具来保持连接,或者使用 autossh 工具自动重连。但总体来说,Tailscale方案在便捷性和稳定性上更胜一筹。
7. 常见问题与故障排查实录
在实际部署和使用过程中,你可能会遇到以下问题。这里记录了我踩过的坑和解决方法。
7.1 部署阶段问题
问题1:运行 terraform apply 时提示 Error: unable to find ssh key 或认证失败。
- 可能原因 :Hetzner API令牌权限不足或已失效;提供的SSH公钥格式错误。
- 排查步骤 :
- 确认API令牌是在正确的项目中生成的,并且具有 Read & Write 权限。
- 重新生成一个API令牌并更新
terraform.tfvars。 - 检查
ssh_public_key变量值是否正确。确保它是完整的以ssh-ed25519 AAAA...或ssh-rsa AAAA...开头的一行字符串,没有多余的空格或换行。可以尝试用cat ~/.ssh/id_ed25519_clawdpad.pub | pbcopy(macOS)或cat ~/.ssh/id_ed25519_clawdpad.pub | xclip -sel clip(Linux)命令直接复制到剪贴板再粘贴。
问题2:SSH连接成功,但执行 sudo 命令时要求输入密码。
- 可能原因 :
cloud-init脚本中配置免密sudo的步骤可能因系统版本差异未完全生效。 - 解决方法 :手动为
openclaw用户配置免密sudo。# 在服务器上执行 echo “openclaw ALL=(ALL) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/90-openclaw sudo chmod 440 /etc/sudoers.d/90-openclaw
7.2 初始化与软件安装问题
问题3: cloud-init 日志卡住,长时间没有输出“completed successfully”。
- 可能原因 :网络问题导致
apt更新或下载软件包(如Tailscale、Node.js)超时;或者某个安装步骤交互式提示被挂起。 - 排查步骤 :
- 查看更详细的系统日志:
sudo tail -f /var/log/cloud-init-output.log。 - 检查
apt进程是否在运行:ps aux | grep apt。如果卡住,可以尝试sudo kill掉相关进程,但需谨慎。 - 最常见的是网络慢。可以等待更长时间(有时可达5-10分钟)。如果实在不行,可以手动执行
cloud-init脚本中的关键步骤(安装curl, git, nvm等)。
- 查看更详细的系统日志:
问题4:安装OpenClaw时, npm install -g openclaw 报权限错误。
- 可能原因 :
npm的全局安装路径没有正确配置,或者nvm环境未加载。 - 解决方法 :
- 确认Node.js已安装:
node --version和npm --version。 - 确认
nvm已加载。通常需要重新登录,或者手动执行source ~/.bashrc。 - 检查npm全局路径:
npm config get prefix。它应该指向用户主目录下的某个路径(如/home/openclaw/.nvm/versions/node/v24.x.x),而不是/usr。如果不是,在~/.bashrc中确保有export NPM_CONFIG_PREFIX=~/.npm-global之类的配置,并重新加载。
- 确认Node.js已安装:
7.3 Tailscale与网络访问问题
问题5:服务器已加入Tailscale,但在Tailscale Admin Console中看不到该设备,或者显示为“offline”。
- 可能原因 :服务器时间不同步;Tailscale客户端服务未运行;防火墙规则阻止了Tailscale流量。
- 排查步骤 :
- 在服务器上检查Tailscale服务状态:
sudo systemctl status tailscaled。确保它是active (running)。 - 检查Tailscale连接状态:
tailscale status。应该能看到你的设备名和分配的Tailscale IP(100.x.x.x)。 - 检查服务器时间:
date。如果时间偏差过大,会影响TLS连接。使用sudo timedatectl set-ntp true启用NTP同步。 - 在Hetzner Cloud控制台,检查服务器的防火墙规则,确保没有一条规则明确拒绝UDP流量(Tailscale使用UDP 41641端口)。
clawdpad创建的防火墙默认允许所有出站流量,所以问题通常不在这里。
- 在服务器上检查Tailscale服务状态:
问题6:可以通过Tailscale IP SSH到服务器,但无法通过 openclaw.your-tailnet.ts.net 域名访问OpenClaw网关。
- 可能原因 :OpenClaw的Tailscale Serve功能未正确启用;或者本地设备的Tailscale客户端DNS设置有问题。
- 排查步骤 :
- 在服务器上,检查OpenClaw网关的Serve配置:
tailscale serve status。应该能看到一个将https://openclaw.your-tailnet.ts.net代理到127.0.0.1:3000的配置。 - 如果Serve未启用,可以在OpenClaw网关所在目录(通常需要找到systemd服务的环境变量)手动启用:
sudo tailscale serve --set-path=/ https://openclaw.your-tailnet.ts.net 3000。但更建议通过openclaw onboard向导重新配置。 - 在你的本地电脑上,确保Tailscale客户端设置中的 “Use Tailscale DNS settings” 是开启的。这样你的系统才会解析
*.ts.net域名。
- 在服务器上,检查OpenClaw网关的Serve配置:
问题7:禁用公网SSH后( allowed_ssh_ips = [] ),无法通过任何方式连接服务器。
- 可能原因 :Tailscale未成功连接;或者防火墙规则更新失败,误删了Tailscale CGNAT网段规则。
- 预防与解决 :这是一个危险的操作。务必在确认Tailscale工作绝对正常后再进行。
- 预防 :在
terraform.tfvars中清空allowed_ssh_ips之前,先通过Tailscale SSH连接服务器,确保这条路径是通的。 - 解决 :如果已经被锁在外面,唯一的办法是通过Hetzner Cloud控制台的 救援模式 (Rescue Mode)启动服务器。救援模式会提供一个临时的Linux环境并挂载你的系统盘,你可以修改防火墙配置或SSH密钥文件来恢复访问。具体操作请参考Hetzner官方文档。这再次体现了在彻底关闭一条访问路径前,确保备用路径畅通的重要性。
- 预防 :在
通过这套自动化部署方案,我将原本繁琐、易出错的服务器搭建工作,变成了一个可重复、可审计、且深度集成了安全最佳实践的“一键式”流程。无论是用于快速搭建AI Agent的演示环境,还是作为生产部署的基线模板, clawdpad 都极大地提升了效率和安全性。希望这份详细的解析和实录,能帮助你顺利部署并理解其中的每一个环节。
更多推荐




所有评论(0)