Openclaw节点

除了Openclaw gateway外,openclaw还有节点,网关和节点的区别如下:

openclaw gateway(网关)

  • 主服务,运行在你的机器上
  • 管理:工具调用、权限控制、cron定时任务、内存记忆、会话路由
  • openclaw gateway start/stop 就是控制它
  • 它是唯一能调用 exec、cron、memory、sessions 等核心工具的“大脑”

openclaw node (节点)

  • 可以是本地子进程(比如你 spawn 的一个 subagent)
  • 也可以是远程节点(未来支持分布式时,比如另一台机器)
  • 不能独立运行,必须由 Gateway 指挥
  • 比如你用 sessions_spawn 创建的 ACP 编码会话,就是一个“节点”

总结:网关下发命令,节点干活

远程节点

opencalw节点使用的也是跟网关同样的一个安装包,只是启动的时候是通过节点模式来启动的而已,这里演示通过docker容器方式来启动节点,并连接到gateway

1、首先创建本地映射目录,把容器内部的目录映射出来,如下:

mkdir -p /data/openclaw && chown 1000:1000 openclaw

2、编辑docker.sh的脚本,这里的openclaw为openclaw:4.14内容如下:

#!/bin/bash
GATEWAY_HOME="192.168.49.244"
GATEWAY_TOKEN="ba6de6aa02328ed45dba2579d20f1621bda212fe75ef37a5"
docker run -d \
  --name openclaw-node \
  --restart unless-stopped \
  -v /data/openclaw:/home/node/.openclaw \
  -e OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
  -e OPENCLAW_GATEWAY_TOKEN="$GATEWAY_TOKEN" \
  ghcr.io/openclaw/openclaw:latest \
  openclaw node run \
  --host ${GATEWAY_HOME} \
  --port 18789 \
  --display-name "gateway-node-02"
  • GATEWAY_HOME: openclaw gateway的IP地址(主服务地址,有域名就用域名)
  • GATEWAY_TOKEN: 连接gateway需要的TOKEN,gateway配置openclaw.json中auth.token的值
  • OPENCLAW_ALLOW_INSECURE_PRIVATE_WS:允许在私有内网(非公网)中使用明文 WebSocket (ws://) 连接,绕过系统默认的安全检查
  • display-name:自定义节点名字

运行起来后,查看openclaw-node日志,可以看到出现批准请求,也就是需要gateway批准加入才行

3、在openclaw gateway端查看批准请求,如下:

openclaw devices list

查看已批准后的节点状态,如下:

openclaw nodes status

4、测试下gateway网关发送命令给节点去执行

要让 OpenClaw Gateway 给节点(Node)下发命令,核心是通过 openclaw nodes runopenclaw nodes invoke命令,通过 Gateway 的 WebSocket RPC 调用节点的 system.run能力。以下是具体步骤和关键点:

  • 节点类型:目标节点必须是 macOS 伴侣应用(Companion App)或无头节点主机(Headless Node Host)
  • 能力支持:节点需对外提供 system.run能力
  • 配对状态:节点已连接到 Gateway 并完成配对审批(使用 openclaw nodes approve

执行命令获取下gateway-node-02节点的磁盘信息,如下:

openclaw nodes run --node gateway-node-02 "df -h"

报错:

nodes run failed: GatewayClientRequestError: INVALID_REQUEST: SYSTEM_RUN_DENIED: approval requires a stable executable path

这个错误表明 OpenClaw 的安全策略正在发挥作用,使用的命令里包含了一个无法被解析为真实绝对路径的程序名(例如,一个只在 PATH环境变量里的名字,如 lspython),这在新策略下是不被允许的,推荐使用绝对路径,如下:

openclaw nodes run --node gateway-node-02 "/usr/bin/df -h"

还是报上面的错误,这通常是因为节点的执行审批(Exec Approvals)策略尚未对该路径放行。自 2026.3.x 版本起,OpenClaw 强制要求路径匹配和审批,仅提供路径不足以绕过安全检查,节点主机的 exec-approvals.json策略目前很可能处于默认的 allowlist(白名单)模式。由于 /usr/bin/df不在白名单中,且你没有设置自动放行,系统因找不到匹配的审批规则而拒绝执行,查看当前审批状态,如下:

openclaw approvals get --node gateway-node-02

标签