远程访问 OpenClaw Control UI 的避坑指南与两种方案

今天在尝试用我的本机设备访问局域网内另一个设备上 OpenClaw 的 Control UI,但是发现这个东西没那么好设置。

说明:Control UI 可以控制 OpenClaw 的各种设置,暴露在网上是比较危险的。我是让它只在局域网里面可用,所以问题不大。对于不懂网络的人,不建议随便改这些东西。

常规思路

需要先设置把 binding 改成 lan,也就是 0.0.0.0,也就是让 OpenClaw Control UI 可以接收并监听所有 IP 来的请求。而默认的是 local,也就是 127.0.0.1,它只能接收本机请求。

然后要设置 allow list,只有在 allow list 里的 IP 访问,它才会正常工作。

但是当我这么设置了以后,发现它还是报错了:control ui requires device identity (use HTTPS or localhost secure context)。我又加了 allowInsecureAuth: true,但是仍然无效。

以上这几点都可以直接编辑 ~/.openclaw/openclaw.json 文件,编辑完成后运行 openclaw gateway restart 重启 gateway 生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"gateway": {
"port": 18789,
"mode": "local",
"bind": "lan",
"controlUi": {
"enabled": true,
"allowedOrigins": [
"*",
"http://localhost:18789",
"http://127.0.0.1:18789"
],
"allowInsecureAuth": true
},
"auth": {
"mode": "token",
"token": "xxx"
},
"tailscale": {
"mode": "off",
"resetOnExit": false
}
},
}

于是我就找到了这个 GitHub issue。看起来,为了安全,OpenClaw 要求必须走 HTTPS。

control ui requires device identity (use HTTPS or localhost secure context) · Issue #32473 · openclaw/openclaw

当然,我也按照 AI 给的方式配置了 HTTPS 的证书,然而还是没有效果,他又报了一个新的错误 pairing required。AI 说,这是因为我设置的 auth 是 pair 模式,而不是 token 模式,但是可以看到截图里,其实我设置的就是 token 模式。

所以直接放弃了这种方式,劝大家也不要浪费时间试这个了。

简化思路:SSH Tunnel

于是我尝试了一个更简单的办法,直接用 SSH 设置一个 Tunnel,发现很好用。

首先需要给 OpenClaw 所在的设备配置 SSH server,这个网上有很多教程,就不赘述了。

配好了以后,在本机运行下面的命令,把 USERIP 分别替换成 OpenClaw 设备上的用户名和局域网 IP 地址:

1
ssh -L 8080:127.0.0.1:18789 USER@IP

这样本机 8080 端口的数据流量,就会转发到 OpenClaw 设备的 18789 端口,于是本机就可以直接访问 localhost:8080,从而访问这个 dashboard 了。

由于我设置的是 token 模式,还需要在 dashboard 上手动输入 token,点击确认就能进去了

这个很简单,把配置文件里的mode改成password,然后设置一个password就可以了。

1
2
3
4
"auth": {
"mode": "password",
"password": "test"
},

AI 自动实现反向代理

前面这种方式只能用于电脑,如果你想手机上局域网也可以访问,更简单的办法是在 OpenClaw 所在的设备上运行一个反向代理。

既然 AI 可以自动写代码,这个问题就很好解决了。我直接给“小龙虾”(OpenClaw)发了一条消息:

我想在你的设备上建一个反向代理,用 Node.js 代码实现,PM2 管理。当我在局域网里面访问你这个设备上的 9000 端口时,直接代理到 control UI 对应的 18789 端口。

过了几分钟,它就在自己的设备上用 Node.js 写了一个反向代理。我实际去看了代码也不复杂,没多少行。

然后我在局域网里其他设备上,通过浏览器HTTPS访问这个设备的 IP 地址,加 9000 端口,就可以看到这个 dashboard 了。同样也要输入 password / token。

快速记录一下这个问题,希望对有需要的人有帮助。

如果觉得文章有帮助,欢迎分享转发,也欢迎关注我的公众号“搬砖的小明”,及时获取更新

公众号:搬砖的小明