OpenClaw AI助手入门教程-云端openclaw控制本地电脑(安全反向隧道方式)
说明
- 本教程将引导你使用 SSH 反向隧道,将内网中的本地电脑安全地连接到云端 OpenClaw Gateway,并通过 WebChat 等聊天界面发送自然语言指令,远程控制本地浏览器打开指定网页。这是 OpenClaw 节点功能的典型应用场景,适用于本地无公网 IP 但需要被云端管控的环境。
适用场景
- 本地电脑位于 NAT 或防火墙后,无法直接被公网访问。
- 你有一台具有公网 IP 的云服务器,用于运行 OpenClaw Gateway。
- 希望通过云端 AI 助手(集成到 WebChat、飞书、Telegram 等)向本地电脑下发命令,例如打开浏览器、执行脚本等。
- 需要安全的加密通道,并希望保留命令执行的审批机制。
前提条件
云服务器(公网 IP):
- 已安装 Docker 和 Docker Compose。
- 已部署 OpenClaw Gateway 服务,并确保其监听端口(默认为
18789)可被本地访问(建议监听127.0.0.1或0.0.0.0,但通过隧道连接时只需 localhost 即可)。 - 已获取 Gateway 的访问令牌(
gateway.auth.token)。 - 可选:已配置 WebChat 或其他聊天机器人集成,以便发送自然语言指令。
本地电脑(Mac / Linux / Windows):
- 已安装 Node.js 和 npm。
- 已全局安装 OpenClaw CLI:
npm install -g openclaw@latest。 - 已安装浏览器(Chrome 或 Chromium)及 OpenClaw 浏览器扩展(用于接收打开网页的命令)。
- 能够通过 SSH 登录云服务器(建议配置 SSH 密钥免密登录)。
网络:
- 本地电脑可以访问互联网,并能建立 SSH 连接到云服务器。
整体步骤概览
- 定义环境变量(本地电脑和云端需保持一致的关键信息)。
- 在本地建立 SSH 反向隧道,将本地端口映射到云服务器的 Gateway 端口。
- 在本地启动 OpenClaw 节点,通过隧道连接云端 Gateway。
- 在云端批准该节点。
- 测试节点命令执行,体验审批流程。
- 通过 WebChat 发送自然语言指令,控制本地浏览器打开网页。## 整体步骤概览
具体实施
- 设置环境变量
为了后续命令简洁且不易出错,先在本地电脑的终端中定义以下变量(根据实际情况替换值):
# SSH 登录云服务器的地址,格式 user@host
export CLOUD_SERVER="root@your-server-ip"
# 本地监听端口(用于节点连接,可自定义,如 18888)
export LOCAL_PORT=18888
# 云端 Gateway 监听端口(默认为 18789)
export REMOTE_PORT=18789
# 从云端获取的 Gateway 访问令牌
export TOKEN="your-gateway-token-here"
# 给本地节点起一个易识别的名称(将显示在云端节点列表中)
export NODE_NAME="My-Local-PC-Via-Tunnel"
- 提示:令牌可以从云服务器上通过 docker compose exec openclaw-gateway openclaw config get gateway.auth.token 获取。
- 建立 SSH 反向隧道
在本地电脑执行以下命令,该命令会在后台建立一条持久化的 SSH 隧道,将本地的 $LOCAL_PORT 转发到云服务器的 127.0.0.1:$REMOTE_PORT,即 Gateway 服务所在的地址。
ssh -f -N -T \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=3 \
-o ExitOnForwardFailure=yes \
-L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT \
$CLOUD_SERVER
#参数解释:
-f:认证后转入后台运行。
-N:不执行远程命令,仅用于端口转发。
-T:禁用伪终端分配。
-L:本地端口转发,格式 本地端口:目标主机:目标端口。此处将本地 $LOCAL_PORT 收到的流量转发到云服务器的 127.0.0.1:$REMOTE_PORT。
ServerAliveInterval/CountMax:保持隧道活跃,防止因超时被断开。
ExitOnForwardFailure:如果端口转发失败(如端口被占用),则立即退出。
- 隧道建立后,你可以通过 ps aux | grep ssh 查看进程。为了确保隧道长期稳定,建议使用 autossh 替代原生命令
- 在本地启动 OpenClaw 节点连接隧道
隧道生效后,本地节点就可以通过 127.0.0.1:$LOCAL_PORT 连接到云端的 Gateway。执行:
export OPENCLAW_GATEWAY_TOKEN="$TOKEN"
openclaw node run \
--host 127.0.0.1 \
--port $LOCAL_PORT \
--display-name "$NODE_NAME" \
--node-id "node-$(date +%s)" # 可选,生成唯一 ID,便于管理
#说明:
--host 和 --port 指向本地的隧道入口。
--display-name 将在云端节点列表中显示为友好的名称。
--node-id 可以自定义,如果不指定,系统会自动生成一个唯一 ID。
执行后,节点会尝试连接 Gateway 并进入等待批准状态。终端会输出类似“paring required”的信息。
- 这里不少教程有差异的地方。很多描述这里会出现终端会输出类似“Waiting for approval...”,然后云端再批准。但是我这里就是提示要配对。实际是放在devices里面,角色标为node
- 在云端批准该节点
登录云服务器,在云端执行以下命令查看待批准的节点列表:
docker compose exec openclaw-gateway node dist/index.js devices list
你会看到类似输出:
Pending (1)
┌──────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────┬────────────┬────────┬────────┐
│ Request │ Device │ Role │ IP │ Age │ Flags │
├──────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────┼────────────┼────────┼────────┤
│ 6f167694-8e7c-4ba4 │ Master-Mac-website │ node │ │ 1m ago │ │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────┴────────────┴────────┴────────┘
记下节点的 ID(例如 6f167694-8e7c-4ba4),然后批准它:
docker compose exec openclaw-gateway node dist/index.js devices approve 6f167694-8e7c-4ba4
现在节点状态应变为 Paired 列表里,表示已成功连接并可用:
docker compose exec openclaw-gateway node dist/index.js devices list
- 测试节点命令(体验审批流程)
为了验证节点是否正常工作,可以在云端执行一条简单命令,例如 echo 'hello',使用源码方式:
docker compose exec openclaw-gateway node dist/index.js nodes run \
--node "$NODE_NAME" \
--raw "echo 'hello'"
- 由于默认安全级别可能为 full,此时命令不会立即执行,而是创建一个待审批请求。你会在集成的 WebChat(或其他审批界面)中看到一条待审批的通知,点击 “Allow once” 即可批准该次执行。批准后,命令结果会返回,本地终端的输出会显示在云端执行命令的界面上。
提示:如果你希望取消每次手动审批,可以修改默认安全级别为 none(风险较高)或 restricted,但请确保在可信环境中操作。
- 通过 WebChat 发送自然语言指令打开本地浏览器
如果云端 Gateway 已经与 WebChat(或其他聊天机器人)集成,你可以直接在聊天窗口输入自然语言指令来控制本地节点。
在 WebChat 中发送类似以下消息:
打开节点 My-Local-PC-Via-Tunnel 的浏览器,访问 www.ncnynl.com
Gateway 会解析指令,并将其转换为节点命令:openclaw browser open。同样,如果安全级别为 full,你需要先在 WebChat 中点击 “Allow once” 批准该次执行。批准后,本地电脑的默认浏览器(需已安装扩展并处于启用状态)将自动打开并跳转到 www.ncnynl.com
验证与排错
- 检查隧道是否正常工作
在本地执行:
curl http://127.0.0.1:$LOCAL_PORT/api/v1/health
如果返回 {"status":"ok"} 或类似信息,说明隧道已连通 Gateway
- 隧道自动重连
原生的 SSH -f 后台进程在网络断开后不会自动重连。建议使用 autossh 实现自动重连:
autossh -M 0 -f -N -T \
-o ServerAliveInterval=60 \
-o ExitOnForwardFailure=yes \
-L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT \
$CLOUD_SERVER
- 节点无法连接常见原因
令牌错误:重新获取令牌并检查环境变量。
隧道失效:确认 SSH 进程存活,或使用 autossh。
Gateway 未监听 localhost:在云端检查 netstat -tlnp | grep $REMOTE_PORT,确保监听地址包含 127.0.0.1。
安全注意事项
令牌保密:$TOKEN 是 Gateway 的访问凭证,切勿泄露。建议通过环境变量临时设置,不要写入脚本文件或共享。
SSH 密钥安全:建议为隧道单独创建 SSH 密钥,并限制其用途(如 command="echo 'port forwarding only'"),降低风险。
防火墙策略:云服务器安全组仅需开放 SSH 端口(22)给本地 IP,Gateway 端口 18789 无需对外暴露,只监听 localhost 即可。
审批机制:即使建立了隧道,命令执行仍需手动批准,这是防止未授权操作的重要防线。可根据实际需求调整安全级别,但请谨慎。
总结
通过 SSH 反向隧道,你可以轻松将内网中的本地电脑接入云端的 OpenClaw Gateway,实现安全的远程控制。结合 WebChat 等自然语言界面,你只需发送一句话,就能让远方的电脑自动打开浏览器、执行脚本,甚至操作文件。这种模式既利用了云端的计算和 AI 能力,又保留了本地设备的物理交互能力,是 OpenClaw 节点功能的高级应用。
现在,尝试让你的云端 AI 助手帮你远程打开本地浏览器,访问你喜欢的网站吧!如果在实践中遇到任何问题,欢迎查阅 OpenClaw 官方文档或社区讨论。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


















