零暴露架构:基于Tailscale与Telegram Bot构建安全自托管AI助理

2026-05-10 21:44:315 阅读量

1. 项目概述:一个为个人AI助理打造的“安全堡垒”

如果你和我一样,既想享受自托管AI助理带来的私密性和控制感,又对把服务暴露在公网上感到不安,那么这个项目可能就是你在找的答案。 openclaw-secure 不是一个全新的应用,而是一套 安全优先、开箱即用 的部署方案,专门为个人用户设计,用于在VPS上安全地运行 OpenClaw 这个AI助理框架。它的核心价值在于,将一系列复杂的安全最佳实践,打包成一个有明确约束和验证的“部署旅程”,让你能在一个相对安全的环境中,拥有一个只属于你自己的Claude或GPT助手。

想象一下这个场景:你租了一台云服务器,传统的做法是安装应用、开放端口、配置防火墙,然后祈祷没有恶意扫描器盯上你。而 openclaw-secure 的思路截然不同。它从一开始就假设“公网即战场”,因此构建了一套 零信任 的访问模型。OpenClaw的服务网关(Gateway)被强制绑定在服务器的本地回环地址上,这意味着它从物理上就无法被外部网络直接访问。那么你怎么使用它呢?答案是通过两个安全的“隧道”: Tailscale 构建的私有Mesh VPN网络,以及 Telegram Bot 的轮询机制。前者让你像在局域网内一样安全访问管理界面,后者则提供了无需开放任何入站端口的聊天交互方式。整个架构就像给你的AI助理建造了一个带有双重门禁系统的安全屋,所有访问都必须经过严格的身份验证和加密通道。

这个项目特别适合那些有技术动手能力,重视隐私和安全,并且希望以Telegram作为主要交互界面的个人用户。它不是一个追求功能大而全的通用平台,而是一个 高度意见化、聚焦于单一安全路径 的解决方案。目前,它深度集成Hetzner云服务、Ubuntu 24.04和特定的软件栈,确保这条路径上的每一步都经过测试和验证。接下来,我将为你深入拆解这个安全堡垒的每一块砖石,从设计哲学到实操细节,并分享我在部署过程中积累的经验和踩过的坑。

2. 核心架构与安全设计哲学

2.1 “零暴露”网络架构深度解析

项目的架构图清晰地展示了一个“茧房”式的安全模型。一切设计的起点,是彻底否定“将服务端口直接暴露给公网”的传统做法。让我们拆解每一层防护:

第一层:服务隔离(OpenClaw Gateway绑定 127.0.0.1 这是最根本的约束。在常规部署中,OpenClaw Gateway会监听 0.0.0.0:18789 ,意味着接受来自任何网络接口的连接。 openclaw-secure 通过配置强制其只绑定到 127.0.0.1:18789 。从操作系统网络栈的角度看,这个端口只对服务器本机进程可见。即使防火墙配置失误,外部攻击者也无法直接触及这个服务端点,因为它根本不在公网路由表上。这实现了网络层面的物理隔离。

第二层:访问通道加密与身份化(Tailscale & Telegram) 服务被锁起来了,合法的用户如何进入?项目提供了两条经过身份验证的加密通道:

  1. Tailscale (私有Mesh VPN) :Tailscale基于WireGuard协议,在你的VPS、个人电脑、手机等设备间建立一个加密的虚拟局域网。加入这个网络需要你的账户授权,设备间通信是端到端加密的。部署后,你可以通过 tailscale-ip:18789 在浏览器中访问OpenClaw的Web界面,就像访问本地网络中的设备一样。关键点在于,Tailscale连接是由设备客户端主动发起的出站连接,VPS上无需为Tailscale开放任何额外的 入站 端口。
  2. Telegram Bot (出站轮询) :这是与AI助理交互的主要方式。Bot通过Telegram提供的长轮询API获取消息。这意味着,是运行在VPS上的Bot进程 主动、持续地 向Telegram服务器发起HTTPS请求,询问“有没有我的新消息?”。整个过程中,VPS没有任何需要被Telegram服务器回调的公开端点(即开放的端口)。这完美规避了因为托管一个Webhook而需要暴露公网IP和端口的安全风险。

第三层:双重防火墙防御(Hetzner Cloud Firewall + UFW) 即使前面两层已经足够坚固,项目仍坚持部署两道防火墙,践行“深度防御”原则。

  • Hetzner云防火墙 :在云平台层面配置的网络ACL,在流量到达你的VPS实例之前进行过滤。在这里,只允许TCP 2222端口(SSH)和Tailscale所需的协议端口(如UDP 41641)的入站流量。端口18789 绝对不在允许列表中
  • UFW (Uncomplicated Firewall) :在Ubuntu操作系统内部运行的软件防火墙。它的规则与云防火墙保持一致或更严格,作为第二道防线。即使攻击者以某种方式绕过了云防火墙(例如通过云平台漏洞),UFW仍然能将其阻挡在外。

这种“零暴露”架构,将攻击面压缩到了极致。攻击者能看到的,只是一个仅开放了非标准SSH端口、运行着自动更新和入侵防御的Ubuntu服务器,核心业务服务对他们而言是完全隐形的。

2.2 关键安全规则及其背后的逻辑

项目文档中明确列出了几条“不可协商”的硬性安全规则。理解它们背后的“为什么”,比记住规则本身更重要:

  • R1 & R2: 网关仅绑定回环地址且永不暴露18789端口 这不仅是配置,更是一种安全姿态的声明。它确保了任何网络层面的错误配置(如防火墙误开)、未来新增服务时的疏忽,或是应用本身的漏洞,都不会意外地将网关暴露出去。因为服务绑定在 127.0.0.1 ,所以从设计上就不可能被外部直接访问。

  • R3: 对话管理策略强制为 pairing OpenClaw支持几种对话模式, pairing (配对)模式是最严格的。在此模式下,每个新的Telegram用户首次与Bot交互时,会被置于一个“等待配对”的状态,而不会立即开始对话。管理员需要在OpenClaw的Web界面(通过Tailscale访问)中手动审核并批准这个配对请求。这防止了任何人只要拿到你的Bot Token就能与之聊天,实现了基于用户ID的白名单控制。

  • R4: SSH仅密钥认证,禁用密码及root直接登录 SSH是VPS最大的入站攻击面。禁用密码登录彻底消除了暴力破解和密码泄露的风险。禁用root直接登录则增加了攻击者提权的难度,他们必须先攻破一个普通用户账户,再寻找提权漏洞。使用非标准端口(2222)虽然不算真正的安全措施(安全通过隐匿),但可以显著减少自动化脚本的扫描噪音和日志体量。

  • R5: 禁用ClawHub技能市场 这是一个基于现实威胁模型的决策。ClawHub作为第三方技能集市,其代码质量和安全审核难以保证。一个恶意的技能可能窃取对话历史、执行未经授权的系统命令或泄露环境变量。对于追求极致安全的个人部署,最稳妥的方式就是完全切断这个潜在的风险源。

  • R6: 默认禁用 elevated (提权) 模式 在OpenClaw中, elevated 模式允许AI助理执行更高权限的操作(如运行特定的shell命令)。默认关闭此功能,遵循了“最小权限原则”。即使Bot的对话上下文被某种方式泄露或篡改,攻击者也无法直接通过它来操控服务器。

这些规则共同构成了一套“安全基线”,部署脚本和验证工具会确保你的系统符合这套基线。这比单纯提供一份“安全建议”文档要有力得多,因为它通过自动化手段将建议转化为了强制性的配置状态。

3. 环境准备与前置条件详解

3.1 硬件与云服务选型:为什么是Hetzner?

项目明确推荐Hetzner Cloud的 cpx22 cx22 机型,这并非随意选择,而是基于成本、性能和项目目标权衡后的结果。

成本效益分析 :对于个人AI助理这种轻量级、常驻的服务,其资源需求通常是CPU和内存比磁盘和带宽更重要。Hetzner Cloud在同价位(约每月5-6欧元)的VPS中,提供的vCPU和内存配置往往比DigitalOcean、Linode或AWS Lightsail更具竞争力。 cpx22 机型(2 vCPU, 4GB内存)对于运行Node.js的OpenClaw网关和一些基础技能来说已经绰绰有余。将服务费用控制在每月一杯咖啡的价格以内,对于个人项目来说至关重要,这提高了项目的可持续性。

技术契合度 :项目初期聚焦于单一平台,可以深度集成该平台的特有功能。例如,部署指南可以精确地指导如何在Hetzner控制台创建防火墙规则、配置SSH密钥,甚至使用其CLI工具 hcloud 进行自动化。这种深度集成减少了用户在多个平台间切换和查找文档的认知负担,让部署流程更加线性。当然,这也意味着如果你执着于使用AWS或Google Cloud,就需要自己适配网络和安全组配置,失去了项目提供的“开箱即用”保障。

实操建议

  1. 注册与验证 :访问Hetzner Cloud官网注册。新账号通常需要支付少量验证费用(如1欧元)并通过身份验证(上传护照或身份证),这是为了降低滥用。准备好你的支付方式(信用卡或PayPal)。
  2. 选择数据中心 :选择离你物理位置最近的数据中心,以获得更低的网络延迟。例如,欧洲用户可选德国纽伦堡或芬兰。虽然Tailscale和Telegram的流量对延迟不敏感,但未来你通过Tailscale进行SSH或Web管理时,低延迟体验更好。
  3. 创建项目与SSH密钥 :在控制台内,先创建一个项目(例如“OpenClaw”),然后进入“Security > SSH Keys”部分。这是关键一步:将你本地机器的 公钥 (通常是 ~/.ssh/id_ed25519.pub ~/.ssh/id_rsa.pub 的内容)添加到这里。Hetzner会在创建服务器时自动将此公钥注入到 root 用户的 authorized_keys 文件中。请务必保管好本地的私钥。

注意 :如果你没有SSH密钥对,在本地终端运行 ssh-keygen -t ed25519 -C “[email protected] 生成。Ed25519算法比传统的RSA更安全高效。全程按回车使用默认路径和空密码(或设置一个强密码)即可。

3.2 本地开发环境与工具链配置

项目推荐使用AI编程助手(如Claude Code、Cursor)来引导部署,这本身就是一个有趣的实践。但即使你选择手动部署,本地也需要一些基础工具。

必需工具清单

  • Git :用于克隆项目仓库。macOS通常已预装,Windows用户可安装Git for Windows,Linux用户通过包管理器安装。
  • SSH客户端 :系统自带。你需要确保能使用密钥进行连接。
  • Node.js 18+ (仅用于本地脚本) :项目中的一些验证脚本可能用Node.js编写。虽然VPS上需要Node.js 22来运行OpenClaw,但本地只需安装LTS版本用于运行工具脚本。建议使用 nvm 管理Node版本。
  • Tailscale客户端 :前往Tailscale官网下载并安装对应你操作系统的客户端。用你的账户登录(推荐使用GitHub、Google等SSO方式注册,非常方便)。

AI助手环境准备(以Cursor为例)

  1. 安装Cursor编辑器。
  2. 打开Cursor,使用其内置的终端或命令面板,克隆仓库: git clone https://github.com/tusharbhasin/openclaw-secure.git
  3. 在Cursor中打开克隆下来的项目文件夹。
  4. 你可以直接将项目 README 中的“启动提示词”发送给Cursor的AI聊天面板。更有效的方法是,先让AI助手阅读项目的 AGENTS.md 文件,这个文件通常包含了给AI的特定指令和上下文,能帮助它更好地理解部署流程。

网络与账户检查

  • Telegram Bot Token :这是整个项目的关键。打开Telegram,搜索 @BotFather 这个官方Bot。发送 /newbot 指令,按照提示设置机器人的名字和用户名。创建成功后, BotFather 会给你一个长字符串,格式类似 1234567890:ABCdefGhIJKlmNoPQRsTUVwxyZ 立即妥善保存这个Token,它只显示一次 。这个Token就是你的Bot的密码,任何人获得它都可以控制你的Bot。
  • Tailscale网络 :确保你的Tailscale客户端已登录,并且网络状态正常。你可以访问 https://login.tailscale.com/admin/machines 查看已注册的设备。稍后VPS也会作为一台设备加入这个网络。

完成以上准备,你就拥有了搭建安全堡垒所需的所有“建材”和“蓝图”。接下来,我们将进入核心的建造阶段。

4. 逐步部署实操指南

4.1 步骤一:服务器初始化与安全加固

创建VPS是整个部署的基石,这一步必须严格遵循安全规范。

在Hetzner控制台创建服务器

  1. 进入你的项目,点击“Add Server”。
  2. 选择镜像 :在“Images”标签下,选择“Ubuntu 24.04”。这是项目明确测试和支持的版本,能确保最大的兼容性。
  3. 选择机型 :选择“Shared vCPU”下的“CPX22”或“CX22”。两者的区别在于CPX系列使用AMD EPYC处理器,性能更优。对于AI助理场景,CPX22是性价比之选。
  4. 配置网络 :这里先保持默认。我们将在创建后单独配置防火墙,实现更清晰的策略分离。
  5. 添加SSH密钥 :在“SSH Keys”部分,选择你之前上传的密钥。 切勿勾选“Enable SSH password authentication” 。这是禁用密码登录的关键。
  6. 命名并创建 :给服务器起个名字,例如 openclaw-secure-vps ,然后点击“Create & Buy Now”。服务器会在几十秒内启动。

首次SSH连接与基础安全配置 : 服务器创建后,控制台会显示其IPv4地址。由于我们使用了非标准SSH端口(2222)且尚未配置防火墙,我们需要先通过标准端口22进行初始连接和配置。

# 使用root用户和默认端口22连接,-i指定你的私钥路径
ssh -i ~/.ssh/id_ed25519 root@<你的服务器IP>

连接成功后,立即执行以下加固操作:

# 1. 更新系统并安装基础工具
apt update && apt upgrade -y
apt install -y ufw fail2ban unattended-upgrades

# 2. 配置UFW防火墙(先放行SSH,再启用)
ufw allow 22/tcp comment 'Initial SSH for setup'
ufw enable # 系统会提示可能断开现有连接,输入y确认

# 3. 修改SSH配置,强化安全
nano /etc/ssh/sshd_config

sshd_config 文件中,找到并修改或确保以下行:

Port 2222                    # 更改SSH端口
PermitRootLogin prohibit-password # 禁止root密码登录(密钥仍可登录)
PasswordAuthentication no    # 禁用密码认证
PubkeyAuthentication yes     # 启用密钥认证

保存退出后,重启SSH服务: systemctl restart sshd 重要:不要立即关闭当前连接!

测试新端口连接 : 打开一个新的本地终端窗口,尝试用新端口连接,确保配置生效:

ssh -i ~/.ssh/id_ed25519 -p 2222 root@<你的服务器IP>

如果连接成功,说明新SSH端口配置正确。此时,你可以回到第一个SSH会话,将UFW规则中的旧SSH端口删除,并添加新端口规则:

ufw delete allow 22/tcp
ufw allow 2222/tcp comment 'SSH on non-standard port'

最后,配置 fail2ban 来保护SSH:

# 复制SSH的jail配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

找到 [sshd] 部分,确保 enabled = true ,并且 port = 2222 (如果已修改端口)。然后启动并启用服务:

systemctl enable --now fail2ban

4.2 步骤二:构建私有网络与核心服务安装

安装并加入Tailscale : Tailscale的安装极其简单,它是我们安全访问的基石。

# 添加Tailscale的GPG密钥和仓库
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | tee /etc/apt/sources.list.d/tailscale.list

# 安装Tailscale
apt update
apt install -y tailscale

# 启动Tailscale并登录
tailscale up

执行 tailscale up 后,命令行会显示一个认证链接。 复制这个链接,在你的本地浏览器中打开它 。用你的Tailscale账户登录并授权此设备。授权成功后,回到SSH终端,你会看到连接成功的提示。你可以运行 tailscale ip 来获取VPS在Tailscale网络中的100.x.x.x地址。

安装Node.js 22 : OpenClaw Gateway需要Node.js 22环境。Ubuntu 24.04的默认仓库可能不是最新版,建议使用NodeSource仓库。

# 使用NodeSource安装脚本
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs

# 验证安装
node --version # 应显示 v22.x.x
npm --version

部署OpenClaw Gateway : 现在开始部署核心应用。

# 1. 创建一个非root用户来运行服务(安全最佳实践)
adduser --system --group openclaw
# 可以不为该用户设置密码,因为我们不会用它直接登录

# 2. 切换到该用户的家目录进行操作
sudo -u openclaw -i
cd /home/openclaw

# 3. 克隆OpenClaw仓库(使用非root用户)
git clone https://github.com/openclaw/openclaw.git
cd openclaw

# 4. 安装依赖
npm install

注意 :务必使用 sudo -u openclaw -i 切换用户上下文来执行克隆和安装。这能确保所有生成的文件(如 node_modules )权限归 openclaw 用户所有,避免后续用systemd服务运行时出现权限问题。

4.3 步骤三:关键配置与安全约束实施

这是将“安全理念”落地的核心环节。我们需要创建OpenClaw的配置文件,并确保其严格遵守项目定义的硬规则。

生成基础配置 : 首先,使用OpenClaw自带的工具生成一个基础配置文件模板。

# 确保仍在 openclaw 用户环境下,且在 /home/openclaw/openclaw 目录中
npm run configure

这个命令会启动一个交互式向导,询问你一些问题。对于本项目,关键答案如下:

零暴露架构:基于Tailscale与Telegram Bot构建安全自托管AI助理

  • Gateway Port :输入 18789 (虽然我们只绑定到本地,但仍需一个端口号)。
  • Bind Address 必须输入 127.0.0.1 。这是硬规则R1。
  • Telegram Bot Token :粘贴你从 @BotFather 那里获取的Token。
  • 对话管理策略 :选择 pairing 。这是硬规则R3。
  • 启用ClawHub技能市场? 选择 no 。这是硬规则R5。
  • 默认启用提权模式? 选择 no 。这是硬规则R6。

向导结束后,它会在 ~/.openclaw/ 目录下生成一个 openclaw.json 配置文件。

手动编辑与验证配置 : 自动生成的配置可能不完全符合我们的要求,需要手动检查和编辑。

nano ~/.openclaw/openclaw.json

你需要重点关注并确保以下部分:

{
  “gateway”: {
    “port”: 18789,
    “host”: “127.0.0.1”, // 必须是127.0.0.1,不能是0.0.0.0
    “enableWebUI”: true // 建议开启,以便通过Tailscale访问管理界面
  },
  “telegram”: {
    “enabled”: true,
    “token”: “YOUR_BOT_TOKEN_HERE”,
    “dmPolicy”: “pairing” // 必须是 “pairing”
  },
  “clawhub”: {
    “enabled”: false // 必须是 false
  },
  “elevated”: false // 必须是 false
}

保存文件后,强烈建议使用项目提供的验证脚本进行检查(你需要先从项目仓库获取这个脚本):

# 假设你已经将 openclaw-secure 仓库克隆到了 /home/openclaw/ 目录下
bash /home/openclaw/openclaw-secure/scripts/validate-config.sh ~/.openclaw/openclaw.json

这个脚本会逐项检查配置是否违反硬安全规则,并给出明确的通过或失败提示。

4.4 步骤四:配置系统服务与最终访问设置

创建Systemd服务单元 : 为了让OpenClaw Gateway在系统启动时自动运行,并在崩溃后重启,我们将其配置为systemd服务。

# 切换回root用户
exit

# 创建服务文件
nano /etc/systemd/system/openclaw-gateway.service

将以下内容粘贴进去,注意修改 User Group WorkingDirectory 路径为你实际的值:

[Unit]
Description=OpenClaw Gateway Service
After=network.target tailscale.service
Wants=tailscale.service

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw/openclaw
Environment=“NODE_ENV=production”
ExecStart=/usr/bin/npm start
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

这里的关键点:

  • After=tailscale.service Wants=tailscale.service 确保服务在Tailscale网络就绪后才启动,避免网络不可用。
  • User Group 指定用我们创建的 openclaw 非特权用户运行,遵循最小权限原则。
  • Restart=on-failure 确保服务意外退出时会自动重启。

然后启用并启动服务:

systemctl daemon-reload
systemctl enable --now openclaw-gateway.service

# 检查服务状态和日志
systemctl status openclaw-gateway.service
journalctl -u openclaw-gateway.service -f --since “1 hour ago”

查看日志,确认服务启动成功,没有报错,并且日志显示网关正在 127.0.0.1:18789 上监听。

配置Hetzner云防火墙 : 现在回到Hetzner控制台,为你的服务器添加一道外部防线。

  1. 进入你的项目,导航到“Security > Firewalls”。
  2. 点击“Create Firewall”,命名为 openclaw-secure-fw
  3. 添加入站规则
    • 规则1 :协议 TCP ,端口 2222 ,源IP 0.0.0.0/0 (或你的家庭公网IP段更安全),描述“SSH Access”。
    • 规则2 :协议 UDP ,端口 41641/udp (Tailscale通信端口),源IP 0.0.0.0/0 ,描述“Tailscale”。
    • 注意 绝对不要添加任何关于端口 18789 的规则 。这是硬规则R2。
  4. 出站规则 :默认允许所有出站流量即可。
  5. 创建完成后,在防火墙详情页,将你的VPS实例添加到“Applied To”标签中。

最终连接测试

  1. 通过Tailscale访问Web UI :在你的本地电脑(已安装并登录Tailscale客户端),打开浏览器,访问 http://<你的VPS的Tailscale IP>:18789 。你应该能看到OpenClaw的Web管理界面。这是验证服务是否在本地回环正常工作的直接方式。
  2. 与Telegram Bot互动 :在Telegram中找到你的Bot(通过其用户名),发送 /start 。由于设置了 pairing 模式,Bot会回复你,告诉你需要等待配对。
  3. 完成配对 :在刚才通过Tailscale打开的Web UI中,通常会有“配对请求”或“用户管理”的界面。你应该能看到你的Telegram用户名或ID在等待批准。批准该请求。
  4. 开始聊天 :回到Telegram,再次给你的Bot发送消息。现在你应该能正常收到AI助理的回复了!

至此,一个基于“零暴露”架构的私人AI助理已经部署完成。它安静地运行在你的VPS上,对外界完全隐形,只有通过Tailscale加密隧道或经过配对的Telegram账号才能与之交互。

5. 日常运维、问题排查与进阶技巧

5.1 基础运维操作与监控

部署完成只是开始,稳定的运行离不开日常的维护。

服务管理命令

  • 查看状态 sudo systemctl status openclaw-gateway.service
  • 查看实时日志 sudo journalctl -u openclaw-gateway.service -f
  • 重启服务 (例如更新配置后): sudo systemctl restart openclaw-gateway.service
  • 停止服务 sudo systemctl stop openclaw-gateway.service
  • 启动服务 sudo systemctl start openclaw-gateway.service

系统健康检查

  • 检查Tailscale连接 :在VPS上运行 tailscale status ,查看是否显示为 active direct 连接。
  • 检查端口监听 :运行 sudo ss -tlnp | grep 18789 ,应该只看到监听在 127.0.0.1:18789 ,而不是 0.0.0.0:18789
  • 检查防火墙规则 sudo ufw status verbose 确保只有2222和必要的Tailscale端口开放。
  • 检查资源使用 htop sudo systemctl status openclaw-gateway.service 查看服务占用的内存和CPU。

自动化安全更新 : 在初始化时我们安装了 unattended-upgrades ,但默认可能只启用安全更新。建议进行配置以确保关键包及时更新:

sudo dpkg-reconfigure --priority=low unattended-upgrades
# 在交互界面中,选择“Yes”自动下载并安装安全更新。

你也可以编辑 /etc/apt/apt.conf.d/50unattended-upgrades 来定制更新哪些仓库和包。

5.2 常见问题与故障排查实录

即使按照指南操作,也可能会遇到问题。以下是我在部署和帮助他人时遇到的典型问题及解决方法。

问题1:通过Tailscale IP无法访问Web UI (18789端口)

  • 症状 :浏览器显示“无法连接”或“连接被拒绝”。
  • 排查步骤
    1. 确认服务运行 sudo systemctl status openclaw-gateway.service 状态是否为 active (running) ?查看日志是否有错误。
    2. 确认绑定地址 sudo ss -tlnp | grep 18789 。输出必须是 LISTEN 0 4096 127.0.0.1:18789 。如果显示 0.0.0.0:18789 ,说明配置错误,违反了R1规则。检查并修正 openclaw.json 中的 host 字段。
    3. 确认Tailscale连通性 :在VPS上 ping <你的本地设备Tailscale IP> ,反之亦然。如果不通,检查Tailscale后台管理页面,确认两台设备都在线且已授权。
    4. 本地防火墙 :检查你本地电脑的防火墙是否阻止了对18789端口的访问。可以临时关闭防火墙测试。

问题2:Telegram Bot 无响应

  • 症状 :给Bot发消息,一直显示“已发送”但无回复。
  • 排查步骤
    1. 检查Token :确认 openclaw.json 中的 telegram.token 是否正确,没有多余空格或引号。
    2. 检查服务日志 sudo journalctl -u openclaw-gateway.service -f ,然后尝试给Bot发消息。观察日志中是否有关于Telegram API的错误,如“ETELEGRAM”或“ECONNREFUSED”。可能是网络问题或Token无效。
    3. 检查配对状态 :确认 dmPolicy pairing 。如果是,你需要在Web UI中批准用户的配对请求。如果Web UI里没有看到请求,可能是你的Telegram用户ID没有被正确识别。检查日志中是否有新的配对请求记录。
    4. Bot是否被禁用 :在Telegram中搜索你的Bot,如果找不到或者显示“此Bot已被禁用”,可能是违反了Telegram的政策,需要联系 @BotFather

问题3:SSH无法通过新端口(2222)连接

  • 症状 ssh -p 2222 ... 连接超时或被拒绝。
  • 排查步骤
    1. 确认UFW规则 sudo ufw status 查看是否允许2222/tcp。
    2. 确认SSH配置 sudo cat /etc/ssh/sshd_config | grep Port 确认端口是2222。
    3. 确认服务监听 sudo ss -tlnp | grep sshd 看是否在监听 :2222
    4. 确认Hetzner防火墙 :登录Hetzner控制台,检查防火墙规则是否已正确应用到该服务器,并且规则中允许TCP 2222。
    5. 重启SSH服务 sudo systemctl restart sshd 注意 :如果你当前只有这一个SSH连接,重启服务会断开连接!确保你有通过控制台恢复访问的途径(如Hetzner的救援模式或Web Console)。

问题4:服务启动失败,报权限错误

  • 症状 systemctl status 显示失败,日志中有 EACCES permission denied
  • 原因 :通常是因为文件或目录的权限不属于 openclaw 用户。例如,用root用户克隆了代码,或者 node_modules 目录权限不对。
  • 解决
# 停止服务
sudo systemctl stop openclaw-gateway.service
# 将OpenClaw目录的所有权递归地更改为openclaw用户和组
sudo chown -R openclaw:openclaw /home/openclaw/openclaw
# 重新启动服务
sudo systemctl start openclaw-gateway.service

5.3 备份、升级与数据迁移

配置备份 : 最重要的资产是你的 ~/.openclaw/openclaw.json 配置文件(内含Bot Token)和可能产生的对话数据(如果OpenClaw支持持久化存储)。定期备份它们。

# 在VPS上,可以将配置压缩备份
sudo -u openclaw tar -czf /tmp/openclaw-backup-$(date +%Y%m%d).tar.gz -C /home/openclaw .openclaw
# 然后使用scp或rsync将备份文件下载到本地
scp -P 2222 root@<你的服务器IP>:/tmp/openclaw-backup-*.tar.gz .

OpenClaw版本升级 : 由于项目锁定特定版本,升级需谨慎。建议流程:

  1. 在测试环境或低峰期进行。
  2. 备份当前配置和数据。
  3. 停止服务: sudo systemctl stop openclaw-gateway.service
  4. 切换到 openclaw 用户,进入代码目录,拉取更新:
    sudo -u openclaw -i
    cd /home/openclaw/openclaw
    git pull origin main # 或你使用的特定版本分支
    npm install
    
  5. 检查新版本是否有破坏性配置变更。比较新的默认配置与你的 openclaw.json
  6. 退出 openclaw 用户,重启服务并观察日志: sudo systemctl start openclaw-gateway.service && sudo journalctl -u openclaw-gateway.service -f

迁移到新服务器 : 如果你需要更换VPS提供商或升级服务器,迁移步骤如下:

  1. 在新服务器上重复 第4章 的所有步骤,直到“安装OpenClaw Gateway”之前。
  2. 在旧服务器上,备份完整的 openclaw 用户家目录(包含代码和 .openclaw 配置)。
  3. 将备份传输到新服务器,并恢复至 /home/openclaw/ ,确保权限正确 ( chown -R openclaw:openclaw /home/openclaw )。
  4. 在新服务器上安装Node.js依赖: sudo -u openclaw -i 然后 cd /home/openclaw/openclaw && npm install
  5. 配置systemd服务文件(内容相同)。
  6. 更新你的Tailscale和Telegram配置(通常无需更改,除非IP或域名变了)。
  7. 在新服务器上启动服务,关闭旧服务器服务。

5.4 安全加固进阶与个性化

使用更严格的SSH配置 : 编辑 /etc/ssh/sshd_config ,可以考虑添加:

AllowUsers your_username # 只允许特定用户登录(如果你创建了非root用户)
ClientAliveInterval 300 # 客户端无活动300秒后发送保活消息
ClientAliveCountMax 2 # 最多发送2次,之后断开连接
MaxAuthTries 3 # 每次连接最大认证尝试次数

修改后需重启SSH服务。

配置日志监控 : 可以安装 logwatch 或配置远程日志服务器(如使用 rsyslog 发送到本地另一台机器),以便集中分析和审计。对于个人项目,定期手动检查 /var/log/auth.log (SSH登录日志)和 journalctl -u fail2ban (查看被封禁的IP)也是一个好习惯。

个性化你的AI助理 : OpenClaw的核心能力可以通过“技能”扩展。虽然禁用了ClawHub,但你仍然可以手动添加自定义技能。

  1. 在OpenClaw的Web UI中,通常有管理技能的界面。
  2. 你可以寻找社区开源、经过审核的技能,将其代码放置到OpenClaw的技能目录中(具体路径参考OpenClaw文档)。
  3. 手动编辑 openclaw.json 配置文件,在 skills 部分启用你添加的技能。
  4. 重要 :只添加你信任的来源的技能。手动审查代码,确保它没有执行危险操作或泄露隐私。

设置自动化健康检查 : 可以写一个简单的cron作业,定期检查服务是否存活,并在失败时通知你(例如通过Telegram Bot给自己发消息)。

# 编辑root用户的crontab:sudo crontab -e
# 添加一行,每5分钟检查一次
*/5 * * * * systemctl is-active --quiet openclaw-gateway.service || (echo “OpenClaw service is down!” | send_telegram_message.sh)

你需要先实现 send_telegram_message.sh 脚本,利用curl调用Telegram Bot API发送消息。

部署和运维这样一个系统,最大的收获不仅仅是拥有了一个私人AI工具,更是在实践中深入理解了“安全不是功能,而是属性”这句话。它贯穿于从架构设计、工具选型到每一行配置的每一个决定中。 openclaw-secure 项目提供了一条经过验证的、固执己见的路径,极大地降低了个人用户构建安全自托管服务的门槛。当你看到自己的AI助理在完全私密的环境中稳定运行时,那种掌控感和安全感,是使用任何公有云API都无法比拟的。

本文地址:https:///news/9_252.html/news/9_10542.html