openclaw node¶
运行一个无头节点主机,它连接到 Gateway WebSocket,并默认在本机上暴露
system.run / system.which。使用 --commands 可以限制通告的命令面,例如限制为只读会话共享。
在 macOS 上,菜单栏应用已经将此节点主机运行时嵌入其自身的节点连接,并添加原生 Mac 能力。只有在 Mac 上有意想要一个不带应用的无头节点时,才使用 openclaw node run。同时运行两者会为同一台机器创建两个节点身份。
为什么使用节点主机?¶
当你希望智能体在其他机器上运行命令,而不需要在那些机器上安装完整的 macOS 伴侣应用时,请使用节点主机。
常见用例:
- 在远程 Linux/Windows 机器上运行命令(构建服务器、实验机器、NAS)。
- 在 Gateway 上保持执行沙箱化,但将已批准的运行委托给其他主机。
- 为自动化或 CI 节点提供轻量级、无头的执行目标。
执行仍受节点主机上的执行审批和每个智能体允许列表保护,因此你可以保持命令访问范围明确且显式。
openclaw node run 可以在连接后发布插件或 MCP 支持的工具。
Gateway 默认信任来自已配对节点的描述符,同时要求每个描述符的命令保持在节点的已批准命令面内。智能体将每个被接受的描述符视为普通插件工具,但执行仍通过 node.invoke,因此断开节点会将该工具从新的智能体运行中移除。Gateway 操作员可以使用 gateway.nodes.pluginTools.enabled: false 禁用发布。
对于声明式 MCP 工具,请在节点机器上的 openclaw.json 中,在 nodeHost.mcp.servers 下添加标准 MCP 服务器结构,然后重启节点主机。节点会声明受审批控制的 mcp.tools.call.v1 命令族,并在连接后发布列出的工具;之后更改服务器列表不需要重新配对。参见节点托管的 MCP 服务器。
浏览器代理(零配置)¶
如果节点上未禁用 browser.enabled,节点主机会自动通告一个浏览器代理。这让智能体可以在该节点上使用浏览器自动化,而无需额外配置。
默认情况下,代理会暴露节点的正常浏览器配置文件面。如果你设置 nodeHost.browserProxy.allowProfiles,代理将变得受限:非允许列表中的配置文件目标会被拒绝,并且持久配置文件的创建/删除路由会通过代理被阻止。
如有需要,请在节点上禁用它:
运行(前台)¶
对于一次粘贴式入门,请使用openclaw connect。它接受一次性加入 URL 或与 --pair 相同的设置代码形式,然后运行此节点主机运行时。
或者粘贴来自 Control UI 设备页面的短生命周期节点设置链接:
选项:
--host <host>: Gateway WebSocket 主机(默认:127.0.0.1)--pair <code-or-url>: 从设置代码或oc-pair://URL 读取 Gateway 端点、引导令牌、TLS 模式以及可选证书固定。显式 Gateway 标志会覆盖来自--pair的值。--pair-if-needed <code-or-url>: 使用与--pair相同的端点选项,但在存在已保存的设备令牌时优先使用它。监督进程可以在配对后重启同一命令。不能与--pair组合使用。--port <port>: Gateway WebSocket 端口(默认:18789)--context-path <path>: Gateway WebSocket 上下文路径(例如/openclaw-gw)。会追加到 WebSocket URL。--tls: 为 Gateway 连接使用 TLS--no-tls: 即使本地 Gateway 配置启用了 TLS,也强制使用明文 Gateway 连接--tls-fingerprint <sha256>: 预期的 TLS 证书指纹(sha256)--node-id <id>: 覆盖存储在共享 SQLite 状态中的客户端实例 ID(不会重置配对)--display-name <name>: 覆盖节点显示名称--session-host: 为此前台进程托管 worker 会话,而不更改已保存的 worker 托管偏好--commands <ids>: 持久化一个精确的逗号分隔命令允许列表(可重复);仅通告可用匹配项及其所需能力。禁用计算机使用、技能、插件工具、MCP 服务器和 worker 托管。省略该标志会保留已保存的列表。--all-commands: 通告完整的默认命令面,并忘记任何已保存的--commands允许列表。不能与--commands组合使用。--share-installed-apps: 在 macOS 上,通过device.apps通告已安装应用--no-share-installed-apps: 禁用已安装应用共享
节点主机的 Gateway 认证¶
--pair 在首次连接时使用一个 10 分钟有效的一次性引导令牌。配对后,重连使用持久设备凭据。管理员签发的引导注册会批准该设备及其首次声明的命令面,包括已声明的 system.run。后续的命令、能力或权限扩展仍需要 openclaw nodes approve。Gateway 命令策略和节点主机的执行审批仍是独立的关卡。本地执行审批默认为 full,且 ask: "off";如果该访问范围过宽,请在使用设置链接前配置它们。node install --pair 被有意设为不可用,因为短生命周期的 bearer 设置链接不应持久化到服务参数中。
对于受管理的前台进程,--pair-if-needed 会在重启之间复用原生设备令牌存储;它不会保留单独的注册标记。请保留节点状态目录。设置代码过期后,只要已保存的身份和节点令牌存在,并且每个选定的 Gateway 端点都与已保存的 Gateway 范围匹配,节点仍可以重连。已过期的引导令牌绝不会被发送。已过期的设置代码不能注册新的状态目录,也不能替换已吊销的设备令牌;需要时请提供新的代码。显式 --pair 仍会拒绝已过期的设置代码。
openclaw node run 和 openclaw node install 会从配置/环境变量中解析 Gateway 认证(node 命令没有 --token/--password 标志):
- 首先检查
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD。 - 当使用已配对的节点凭据重新连接到已保存的 Gateway 端点时,使用该凭据并跳过配置认证。显式的环境变量覆盖仅提供其自身凭据。
- 否则,应用本地配置回退:
gateway.auth.token/gateway.auth.password。 - 在本地模式下,节点主机有意不继承
gateway.remote.token/gateway.remote.password。 - 如果配置回退选择了未解析的
gateway.auth.token/gateway.auth.passwordSecretRef,则节点认证解析会以失败关闭方式处理(不会通过远程回退掩盖)。 - 在
gateway.mode=remote中,远程客户端字段(gateway.remote.token/gateway.remote.password)也会根据远程优先级规则成为可用项。 - 节点主机认证解析只遵循
OPENCLAW_GATEWAY_*环境变量。
已保存的端点包含其主机、端口、TLS 模式和上下文路径。更改其中任何一项都会恢复正常的配置/环境变量认证解析。因此,节点可以与本地 Gateway 共享其状态目录,同时重新连接到另一个已配对的 Gateway,而无需在重启时发送本地 Gateway 的密码。
对于位于 Cloudflare Access 后面的 Gateway,请在 openclaw connect、openclaw node
run 或 openclaw node install 之前同时设置 CF_ACCESS_CLIENT_ID 和
CF_ACCESS_CLIENT_SECRET。节点会将环境变量 SecretRef 存储在其规范的
gateway.cloudflareAccess.clientId 和 clientSecret 连接键下。已安装的服务会将这些值保存在受管服务环境文件中,而不是服务参数或内联 supervisor 定义中。Access 凭据要求 HTTPS/WSS;明文 HTTP/WS 会在 SecretRef 解析之前失败,而不带凭据的明文节点路由保持不变。参见
无法托管节点的 Gateway 部署。
对于连接到明文 ws:// Gateway 的节点,回环、私有 IP 字面量、.local 以及 Tailnet *.ts.net 主机均被接受。对于其他受信任的私有 DNS 名称,请设置 OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1;如果没有设置,节点启动会以失败关闭方式处理,并要求你使用 wss://、SSH 隧道或 Tailscale。这是一个进程环境选项,而不是 openclaw.json 配置键。
当安装命令环境中存在该变量时,openclaw node install 会将其持久化到受监督的节点服务中。
服务(后台)¶
将无头节点主机安装为用户服务(macOS 上使用 launchd,Linux 上使用 systemd,Windows 上使用 Windows Task Scheduler)。
选项:
--host <host>:Gateway WebSocket 主机(默认:127.0.0.1)--port <port>:Gateway WebSocket 端口(默认:18789)--context-path <path>:Gateway WebSocket 上下文路径(例如/openclaw-gw)。会追加到 WebSocket URL。--tls:为 Gateway 连接使用 TLS--no-tls:即使本地 Gateway 配置启用了 TLS,也强制使用明文 Gateway 连接--tls-fingerprint <sha256>:预期的 TLS 证书指纹(sha256)--node-id <id>:覆盖存储在共享 SQLite 状态中的客户端实例 ID(不会重置配对)--display-name <name>:覆盖节点显示名称--commands <ids>:为已安装的服务持久化命令允许列表(可重复),限制与node run相同。--all-commands:通告完整的默认命令面,并忘记任何已保存的--commands允许列表。不能与--commands组合使用。--share-installed-apps:在 macOS 上,通过device.apps通告已安装的应用程序--no-share-installed-apps:禁用已安装应用程序共享--runtime <node|bun>:服务运行时(默认:node)。Bun 1.4+ 且具备 WAL-reset-safenode:sqlite是显式选择;仍推荐 Node。--runtime-path <path>:固定一个通过运行时能力检查的绝对 Node/Bun 可执行文件。--force:如果已安装,则重新安装/覆盖
显式固定会保存在机器状态元数据中,并在重启和强制重新安装之间保留。使用另一个 --runtime-path 替换它,
或使用不带 --runtime-path 的 openclaw node install --runtime node --force
返回自动选择。不可用或不支持的固定会失败,而不是静默选择另一个运行时。对包含空格的路径加引号。
将 OPENCLAW_WRAPPER 设置为可执行包装文件,以代替所选运行时和 CLI 入口点。包装器会接收 node run 和
连接参数;它必须启动 OpenClaw 并转发这些参数。
如果安装报告运行时探测失败,请检查错误中提到的可执行文件和工作目录。例如,使用
runuser 切换用户时,请先切换到目标用户可以读取的目录。探测失败并不意味着已安装的 Node 版本不受支持;升级
建议仅针对缺失或不受支持的运行时。
Linux(systemd 用户服务): 安装后运行
sudo loginctl enable-linger <user>。 如果没有启用 lingering,systemd --user会在你最后一个 SSH 会话结束时拆除节点服务, 因此节点会在注销后静默离线。 当检测到 lingering 已禁用时,openclaw node install会打印此警告。
管理服务:
openclaw node status
openclaw node start
openclaw node stop
openclaw node restart
openclaw node uninstall
使用 openclaw node run 运行前台节点主机(无服务)。
要删除已保存的命令允许列表,请在前台运行 openclaw node run --all-commands
,或使用
openclaw node install --force --all-commands 重新安装服务。重置是持久的;
替换后的服务参数不再携带 --commands。
服务命令接受 --json 以输出机器可读格式。
当没有安装受管节点服务时,node start 和 node restart 会打印安装提示并以非零状态退出;请先运行 openclaw node install。停止一个不存在的服务仍然是成功的空操作。
节点主机在进程内重试 Gateway 重启和网络关闭。如果 Gateway 报告终止性 token/密码/引导身份验证暂停,节点主机会记录关闭详情并以非零状态退出,以便 launchd/systemd/Task Scheduler 使用新的配置和凭据重启它。在设备配对待处理期间,节点会持续重连,采用指数退避,上限为 30 秒,并在批准后自动连接。
自动更新¶
长时间运行的打包 node run 进程和已安装的节点服务默认每小时检查一次更新。新版本会在独立的节点运行时中准备,同时保留全局 CLI 包和同位置的 Gateway 不变。激活会等待命令、终端、worker、插件工作、待处理输出和清理均处于空闲状态。然后节点会带着现有身份、配对、设置和启动选项重启。自动激活之间至少间隔 12 小时;没有会中断繁忙工作的截止时间。
在节点机器上使用以下命令禁用:
update.checkOnStart: false 和 OPENCLAW_NO_AUTO_UPDATE=1 也会禁用节点自动更新。Gateway 的 update.auto.enabled 偏好设置是独立的。源码检出、原生应用节点、私有 worker、dev 和 extended-stable 安装不会自动应用。需要数据库迁移的版本会推迟到常规更新流程。参见 无头节点更新。
配对¶
首次连接会在 Gateway 上创建一个待处理的设备配对请求(role: node)。
当 Gateway 主机可以非交互式地 SSH 到节点主机(同一用户、受信任的主机密钥)时,待处理请求会被自动批准:Gateway 会通过 SSH 在节点主机上运行 openclaw node identity --json,并在设备密钥完全匹配时批准。此功能默认开启;有关要求和禁用方法(gateway.nodes.pairing.sshVerify: false),参见 SSH 验证设备自动批准。
否则,请通过以下方式手动批准:
设备批准允许连接;命令面需要单独批准。在设备批准待处理期间,节点会持续重连,采用指数退避,上限为 30 秒。批准后,其下一次重连会在 Gateway 上创建一个独立的命令面请求:
openclaw nodes pending
openclaw nodes approve <nodeRequestId>
openclaw nodes describe --node <idOrNameOrIp>
如果较旧的客户端已经报告重连已暂停,请使用 openclaw node restart 重启已安装的节点,或停止并重新运行一次其前台 openclaw node run 命令。
设备请求 ID 和节点请求 ID 是不同的。初始未批准的命令面没有有效命令。SSH 验证和引导注册可以自动批准第一个命令面;后续扩展需要批准。在扩展等待期间,之前已批准且仍然声明并被允许的命令保持有效。
检查 Gateway 用于验证的本地节点身份:
它会打印 state/openclaw.sqlite 中 primary 行的设备 ID 和公钥,并且永远不会创建数据库或新身份。
在严格管控的节点网络中,Gateway 操作员可以明确选择自动批准来自受信任 CIDR 的首次节点配对:
此功能默认禁用(autoApproveCidrs 未设置)。它仅适用于来自 Gateway 信任的客户端 IP 的全新 role: node 配对,且未请求任何 scope。操作员/浏览器客户端、Control UI、WebChat,以及 role、scope、元数据或公钥升级仍需要手动批准。
受信任网络的设备批准不会批准节点的命令面。检查 openclaw nodes pending 并批准独立的命令面请求。
如果节点使用更改后的身份验证详情(role/scopes/公钥)重试配对,则之前的待处理请求会被取代,并创建新的 requestId。批准前请再次运行 openclaw devices list。
身份与配对状态¶
无头节点将其客户端实例 ID 与 Gateway 用于配对和路由的签名设备身份分开。此状态位于 OpenClaw 状态目录中(默认为 ~/.openclaw,或设置时为 $OPENCLAW_STATE_DIR):
| 状态 | 用途 |
|---|---|
state/openclaw.sqlite (config_machine_state, 键 nodeHost.config) |
客户端实例 ID、显示名称和 Gateway 连接元数据。客户端将此 ID 作为 instanceId 发送。 |
state/openclaw.sqlite (device_identities, primary) |
签名的 Ed25519 密钥对和派生的设备 ID。对于签名连接,此设备 ID 是路由节点 ID 和配对身份。 |
state/openclaw.sqlite (device_auth_tokens) |
已配对设备 token,以加密设备 ID 和 role 为键。 |
node.list 和 node.describe 中的 gatewayLocal 表示与 Gateway 状态目录中的主要设备身份完全匹配。覆盖 --node-id 不会改变它。拥有自己状态目录和密钥的节点是独立的,即使在同一台机器上。列出或描述节点不会创建身份凭据。
--node-id 只更改共享 SQLite 状态中的客户端实例 ID。它不会更改加密设备 ID 或清除配对身份验证。使用 openclaw doctor --fix 迁移已弃用的 node.json 同样不会重置配对。要撤销并重新配对节点:
- 在 Gateway 上运行
openclaw nodes remove --node <id|name|ip>。 - 在节点上,使用
openclaw node restart重启已安装的服务,或者 停止并重新运行前台openclaw node run命令。这会启动设备配对流程。如果openclaw devices list未显示请求, 且节点报告AUTH_DEVICE_TOKEN_MISMATCH,请再重启或重新运行一次。被拒绝的尝试会清除现已吊销的本地令牌; 下一次尝试可以请求配对。 - 在 Gateway 上运行
openclaw devices list,然后 运行openclaw devices approve <deviceRequestId>。 - 等待节点的自动重连,这会创建独立的命令界面请求。如果旧客户端已因配对而暂停, 请重启或重新运行一次。
- 在 Gateway 上运行
openclaw nodes pending,然后 运行openclaw nodes approve <nodeRequestId>。
这两个请求 ID 是不同的。适用的可信 CIDR 策略可以自动批准首次设备配对步骤;命令界面批准仍是一项独立检查。
旧版 OpenClaw 版本将节点主机状态存储在 node.json 中,签名身份存储在 identity/device.json 中,
配对认证存储在 identity/device-auth.json 中。停止节点主机并运行一次
openclaw doctor --fix;Doctor 会验证已弃用的输入,导入并验证其规范 SQLite 行,然后删除旧文件。节点启动,
包括 macOS 应用的 worker,会保留这些输入,交由 Doctor 处理。待处理的设备认证或 exec 批准会在能力准备之前阻止启动。
缺少规范身份,同时存在已弃用的身份数据或中断的导入声明,也会在创建新密钥之前阻止启动。当旧版本重新创建 identity/device.json 时,
现有有效的规范身份仍具有权威性;Doctor 负责清理该过期文件。请保持 state/openclaw.sqlite 为私有;
其中包含设备密钥对和认证令牌。
执行批准¶
system.run 受本地 exec 批准控制:
$OPENCLAW_STATE_DIR/state/openclaw.sqlite#exec_approvals_config,或者 当变量未设置时为~/.openclaw/state/openclaw.sqlite#exec_approvals_config- 执行批准
- 从 Gateway 使用
openclaw approvals get --node <id|name|ip>检查, 或使用openclaw approvals set --node <id|name|ip> --file <path>替换;参见 批准 CLI。
对于已批准的异步节点 exec,OpenClaw 会在提示之前准备一个规范的 systemRunPlan。
之后已批准的 system.run 转发会复用该存储的计划,因此在批准请求创建之后对 command/cwd/session 字段的编辑会被拒绝,
而不是改变节点实际执行的内容。
相关¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw