背景
OpenClaw 是一个强大的浏览器自动化框架,其核心服务通常运行在服务器端(如群晖 NAS),而控制端则是本地的 Chrome 浏览器插件 OpenClaw Browser Relay。插件默认只连接本地的 127.0.0.1:18792,无法直接与远程服务通信。因此,我们需要建立一条安全的隧道,将远程服务的端口映射到本地,让插件'以为'服务就在本地。
本文记录了在群晖 NAS(通过 Docker 运行 OpenClaw)与 Windows 本地电脑之间实现这一目标的全过程,包括踩坑与解决方案。所有敏感信息均已脱敏。
环境
- 远程服务器:群晖 DS220+,IP
192.168.1.100(示例) - OpenClaw 部署方式:Docker Compose(容器名
openclaw-openclaw-gateway-1) - 本地电脑:Windows 11,PowerShell
- 目标:通过 SSH 隧道,将群晖上的 OpenClaw 服务端口映射到本地的
18792,使浏览器插件能远程控制浏览器。
第一步:SSH 隧道基础尝试
最初的想法很简单:在本地执行 SSH 端口转发命令,将远程端口映射到本地。
ssh -L 18792:127.0.0.1:18792 [email protected] -N
遇到的错误
错误 1:ssh: command not found(Windows 未安装 OpenSSH 客户端)
解决:在 Windows 设置中安装'OpenSSH 客户端'可选功能,或通过 PowerShell 安装。
错误 2:channel 2: open failed: administratively prohibited: open failed
原因:群晖的 SSH 服务默认禁用了 TCP 端口转发。
解决:以 root 登录群晖,编辑 /etc/ssh/sshd_config,确保以下两行存在且未被注释:
AllowTcpForwarding yes
PermitOpen any
然后重启 SSH 服务:
synoservicectl --restart sshd
错误 3:Permission denied, please try again.(密码错误或认证失败)
排查:直接用 ssh [email protected] 测试登录,确认密码无误。最终通过 ssh -v 调试发现是密码输入问题,重试后成功。
第二步:隧道终于建立,但本地访问被拒绝
再次执行 SSH 隧道命令:
ssh -L 18792:127.0.0.1:18792 [email protected] -N
输入密码后,窗口停留在光标闪烁状态(正常)。但浏览器访问 http://127.0.0.1:18792 时,SSH 窗口出现错误:
channel 2: open failed: connect failed: Connection refused
这说明本地 18792 端口已经监听,但转发到远程的 127.0.0.1:18792 时,远程没有服务在监听。显然,OpenClaw 并没有监听这个端口。

