模式
- 本地(这台 Mac):所有内容都在笔记本上运行;不涉及 SSH。
- 通过 SSH 远程(默认):OpenClaw 命令在远程主机上运行。应用使用
-o BatchMode、你选择的身份/密钥以及本地端口转发来建立 SSH 连接。 - 远程直连(ws/wss):不使用 SSH 隧道;应用直接连接到网关 URL(局域网、Tailscale、Tailscale Serve,或公共 HTTPS 反向代理)。
远程传输
- SSH 隧道(默认):使用
ssh -N -L ...将网关端口转发到 localhost。由于隧道是回环的,网关看到的节点 IP 为127.0.0.1。 - 直接(ws/wss):直接连接到网关 URL。网关会看到真实的客户端 IP。
ControlMaster 或 ForkAfterAuthentication,它也能监控并重启确切的进程。
SSH 主机密钥验证默认是严格的,因为网关凭据会通过此隧道传输。若要采用受管理的 SSH 别名自身的信任行为,可通过 openclaw-mac configure-remote 设置 --ssh-host-key-policy openssh,或直接将 gateway.remote.sshHostKeyPolicy 设置为 "openssh"。在启用之前,请检查别名以及任何匹配的 Host * 或系统配置。更改 SSH 目标(在应用中或通过 configure-remote)会将策略重置回 strict,除非你为新目标再次明确启用。
在 SSH 隧道模式下,发现的 LAN/tailnet 主机名会保存为 gateway.remote.sshTarget。应用会将 gateway.remote.url 保持为本地隧道端点(例如 ws://127.0.0.1:18789),这样 CLI、Web Chat 和本地 node-host 服务都使用相同的回环传输。当发现结果同时包含原始 Tailnet IP 和稳定主机名时,应用会优先使用 Tailscale MagicDNS 或 LAN 名称,以便连接在地址变化后更能持续可用。如果本地隧道端口与远程网关端口不同,请将 gateway.remote.remotePort 设置为远程主机上的端口。
远程模式下的浏览器自动化由 CLI node host 拥有,而不是原生 macOS 应用节点。应用会在可能时启动已安装的 node host 服务;要在该 Mac 上启用浏览器控制,请使用 openclaw node install ... 和 openclaw node start 安装/启动它(或者在前台运行 openclaw node run ...),然后将目标指向那个具备浏览器能力的节点。
远程主机前置条件
- 安装 Node + pnpm,并构建/安装 OpenClaw CLI(
pnpm install && pnpm build && pnpm link --global)。 - 确保
openclaw在非交互式 shell 的 PATH 中(如有需要,创建符号链接到/usr/local/bin或/opt/homebrew/bin)。 - 对于 SSH 传输:请设置基于密钥的 SSH 身份验证。为在局域网外获得稳定可达性,推荐使用 Tailscale IP。
macOS 应用设置
要在不经过欢迎流程的情况下预配置应用,请通过 SSH:openclaw-mac connect, wizard, 和 configure-remote 会按以下顺序解析当前配置:OPENCLAW_CONFIG_PATH,然后是 $OPENCLAW_STATE_DIR/openclaw.json,最后是 ~/.openclaw/openclaw.json。这两种配置方式都会写入该当前文件,标记引导已完成,并让应用在下次启动时接管所选传输方式。--local-port/--remote-port 默认为 18789。其他标志:--password、--identity <path>、--ssh-host-key-policy <strict|openssh>、--project-root <path>、--cli-path <path>、--json。运行 openclaw-mac configure-remote --help 查看完整参考。
也可以通过 UI 进行配置:
- 打开 设置 -> 通用。
- 在 OpenClaw 运行 下,选择 远程 并设置:
- 传输方式:SSH 隧道 或 直接(ws/wss)。
- SSH 目标:
user@host(可选:port)。如果网关位于同一 LAN 且广播了 Bonjour,请从发现列表中选择它以自动填充此字段。 - 网关 URL(仅直接方式):
wss://gateway.example.ts.net(本地/LAN 则使用ws://...)。 - 身份文件(高级):你的密钥路径。
- 项目根目录(高级):用于命令的远程检出路径。
- CLI 路径(高级):可运行的
openclaw入口点/二进制文件的可选路径(如果已通告则会自动填充)。
- 点击 测试远程。成功表示远程
openclaw status --json已正确运行。失败通常意味着 PATH/CLI 有问题;退出码 127 表示远程未找到 CLI。 - 健康检查和 Web Chat 现在会自动通过所选传输方式运行。
Web 聊天
- SSH 隧道:通过转发的 WebSocket 控制端口(默认 18789)连接到网关。
- 直接(ws/wss):直接连接到配置的网关 URL。
- 没有单独的 Web 聊天 HTTP 服务器。
权限
- 远程主机需要与本地相同的 TCC 授权(Automation、Accessibility、屏幕录制、麦克风、语音识别、通知)。请在该机器上运行一次 onboarding 以授予这些权限。
- 节点通过
node.list/node.describe公布其权限状态,以便代理了解可用内容。
安全说明
- 优先在远程主机上使用 loopback 绑定,并通过 SSH、Tailscale Serve 或受信任的 Tailnet/LAN 直连 URL 进行连接。
- 默认情况下,SSH 隧道要求目标主机密钥已经被信任。请先信任该主机密钥(将其添加到已配置的 known-hosts 文件中),或者为你接受其 OpenSSH 信任策略的受管别名显式设置
gateway.remote.sshHostKeyPolicy: "openssh"。 - 如果将 Gateway 绑定到非 loopback 接口,则需要有效的 Gateway 身份验证:token、密码,或使用
gateway.auth.mode: "trusted-proxy"的具备身份感知能力的反向代理。 - 直接的
wss://连接会对操作/控制流量和 Mac companion 节点应用同一证书策略。请设置gateway.remote.tlsFingerprint以进行显式 pinning。若未设置,应用会在正常的 macOS 信任验证成功后,才记录首次使用的 pin。 - 参见 安全 和 Tailscale。
WhatsApp 登录流程(远程)
- 在远程主机上运行
openclaw channels login --channel whatsapp --verbose。使用手机上的 WhatsApp 扫描二维码。 - 如果认证过期,请在该主机上重新运行登录。健康检查会显示链接问题。
故障排查
通知声音
使用openclaw nodes notify 从脚本中为每条通知选择声音,例如: