chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-26 04:30:33 +00:00
parent 1071ef5092
commit ec38d657ab
3 changed files with 193 additions and 180 deletions

View File

@ -3,37 +3,37 @@ read_when:
- 运行无头节点主机
- 为 `system.run` 配对非 macOS 节点
summary: '`openclaw node` 的 CLI 参考(无头节点主机)'
title: Node
title: 节点
x-i18n:
generated_at: "2026-04-25T05:53:40Z"
generated_at: "2026-04-26T04:29:33Z"
model: gpt-5.4
provider: openai
source_hash: d8c4b4697da3c0a4594dedd0033a114728ec599a7d33089a33e290e3cfafa5cd
source_hash: ebeeb6a271c7f265943197d816adc3ad46c61b1671885638f4c9be8c321aec9f
source_path: cli/node.md
workflow: 15
---
# `openclaw node`
运行一个**无头节点主机**将其连接到 Gateway 网关 WebSocket并在这台机器上暴露 `system.run` / `system.which`
运行一个**无头节点主机**,连接到 Gateway 网关 WebSocket并在这台机器上暴露 `system.run` / `system.which`
## 为什么使用节点主机?
## 为什么使用节点主机?
当你希望智能体能够**在网络中的其他机器上运行命令**,而又不想在那些机器上安装完整的 macOS 配套应用时,可以使用节点主机。
当你希望智能体能够**在网络中的其他机器上运行命令**,而又不想在那安装完整的 macOS 配套应用时,可以使用节点主机。
常见用例:
- 在远程 Linux/Windows 机上运行命令构建服务器、实验室机器、NAS
- 让 exec 在网关上保持**沙箱隔离**,但将获批的运行委派给其他主机。
- 为自动化或 CI 节点提供轻量级、无头的执行目标。
- 在远程 Linux/Windows 机上运行命令构建服务器、实验室机器、NAS
- 将 exec 保持为 Gateway 网关上的**沙箱隔离**执行,但把已批准的运行委派给其他主机。
- 为自动化或 CI 节点提供一个轻量级、无头的执行目标。
执行仍然受到**exec 审批**和节点主机上每个智能体允许列表的保护,因此你可以让命令访问范围保持明确且可控
执行仍然受**exec 审批**和节点主机上每个智能体的允许列表保护,因此你可以让命令访问保持在明确且受限的范围内
## 浏览器代理(零配置)
如果节点上未禁用 `browser.enabled`,节点主机会自动发布浏览器代理。这使得智能体无需额外配置,就能在该节点上使用浏览器自动化。
如果节点上`browser.enabled` 未被禁用,节点主机会自动通告一个浏览器代理。这样智能体无需额外配置,就可以在该节点上使用浏览器自动化。
默认情况下,该代理会暴露节点的常规浏览器配置文件能力范围。如果你设置了 `nodeHost.browserProxy.allowProfiles`,该代理就会变为限制模式:不在允许列表中的配置文件目标会被拒绝,并且通过代理访问持久化配置文件的创建/删除路由也会被阻止
默认情况下,该代理会暴露节点正常的浏览器配置文件表面。如果你设置了 `nodeHost.browserProxy.allowProfiles`,代理将变为限制模式:不在允许列表中的配置文件目标会被拒绝,并且通过代理会阻止持久化配置文件的创建/删除路由
如有需要,可在节点上禁用它:
@ -57,25 +57,25 @@ openclaw node run --host <gateway-host> --port 18789
- `--host <host>`Gateway 网关 WebSocket 主机(默认:`127.0.0.1`
- `--port <port>`Gateway 网关 WebSocket 端口(默认:`18789`
- `--tls`网关连接使用 TLS
- `--tls`对 Gateway 网关连接使用 TLS
- `--tls-fingerprint <sha256>`:预期的 TLS 证书指纹sha256
- `--node-id <id>`:覆盖节点 id会清除配对令牌
- `--display-name <name>`:覆盖节点显示名称
## 节点主机的 Gateway 网关认证
`openclaw node run``openclaw node install` 会从配置/环境变量解析网关认证信息(节点命令上没有 `--token`/`--password` 标志):
`openclaw node run``openclaw node install` 会从配置/环境变量中解析 Gateway 网关认证(节点命令不支持 `--token`/`--password` 标志):
- 首先检查 `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`
- 然后回退到本地配置:`gateway.auth.token` / `gateway.auth.password`
- 在本地模式下,节点主机不会有意继承 `gateway.remote.token` / `gateway.remote.password`
- 如果通过 SecretRef 显式配置了 `gateway.auth.token` / `gateway.auth.password`未能解析,节点认证解析会以失败关闭(不会用远程回退来掩盖问题)。
- 在 `gateway.mode=remote` 下,根据远程优先级规则,远程客户端字段(`gateway.remote.token` / `gateway.remote.password`)也可以参与解析
- 节点主机认证解析只识别 `OPENCLAW_GATEWAY_*` 环境变量。
- 在本地模式下,节点主机有意继承 `gateway.remote.token` / `gateway.remote.password`
- 如果通过 SecretRef 显式配置了 `gateway.auth.token` / `gateway.auth.password`无法解析,则节点认证解析会以关闭方式失败(不会用远程回退来掩盖问题)。
- 在 `gateway.mode=remote` 中,远程客户端字段(`gateway.remote.token` / `gateway.remote.password`)也会按照远程优先级规则纳入候选
- 节点主机认证解析仅接受 `OPENCLAW_GATEWAY_*` 环境变量。
对于连接到受信任私有网络中非 loopback `ws://` Gateway 网关的节点,请设置 `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`否则,节点启动会以失败关闭,并提示你改`wss://`、SSH 隧道或 Tailscale。
这是一个进程环境变量显式启用项,不是 `openclaw.json` 配置键。
当它出现在安装命令环境中时,`openclaw node install` 会将其持久化到受监管的节点服务中。
对于连接到受信任私有网络中非 loopback `ws://` Gateway 网关的节点,请设置 `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`如果未设置,节点启动将以关闭方式失败,并要求你使`wss://`、SSH 隧道或 Tailscale。
这是进程环境变量级别的显式启用项,不是 `openclaw.json` 配置键。
如果 `openclaw node install` 的安装命令环境中存在该变量,它会被持久化到受监管的节点服务中。
## 服务(后台)
@ -89,17 +89,18 @@ openclaw node install --host <gateway-host> --port 18789
- `--host <host>`Gateway 网关 WebSocket 主机(默认:`127.0.0.1`
- `--port <port>`Gateway 网关 WebSocket 端口(默认:`18789`
- `--tls`网关连接使用 TLS
- `--tls`对 Gateway 网关连接使用 TLS
- `--tls-fingerprint <sha256>`:预期的 TLS 证书指纹sha256
- `--node-id <id>`:覆盖节点 id会清除配对令牌
- `--display-name <name>`:覆盖节点显示名称
- `--runtime <runtime>`:服务运行时(`node` 或 `bun`
- `--force`:如果已安装,则重新安装/覆盖
管理服务:
管理服务:
```bash
openclaw node status
openclaw node start
openclaw node stop
openclaw node restart
openclaw node uninstall
@ -107,19 +108,19 @@ openclaw node uninstall
前台节点主机(非服务)请使用 `openclaw node run`
服务命令支持 `--json`可输出机器可读格式
服务命令支持 `--json`用于机器可读输出
## 配对
首次连接会在 Gateway 网关上创建一个待处理的设备配对请求(`role: node`)。
可通过以下方式批准:
可通过以下命令批准:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
在严格受控的节点网络中Gateway 网关操作员可以显式启用:对于来自受信任 CIDR 的首次节点配对自动批准:
在严格受控的节点网络中Gateway 网关运营者可以显式启用:对来自受信任 CIDR 的首次节点配对自动批准:
```json5
{
@ -133,12 +134,12 @@ openclaw devices approve <requestId>
}
```
该功能默认禁用。它仅适用于没有请求作用域的全新 `role: node` 配对。操作员/浏览器客户端、Control UI、WebChat以及角色、作用域、元数据或公钥升级仍然需要手动批准。
此功能默认禁用。它只适用于没有请求作用域的全新 `role: node` 配对。运营者/浏览器客户端、Control UI、WebChat以及角色、作用域、元数据或公钥升级仍然需要手动批准。
如果节点使用变更后的认证详情(角色/作用域/公钥)重试配对,之前待处理的请求会被替代,并创建新的 `requestId`
如果节点在认证细节发生变化后重试配对(角色/作用域/公钥),之前待处理的请求会被替代,并创建新的 `requestId`
请在批准前再次运行 `openclaw devices list`
节点主机会将其节点 id、令牌、显示名称 Gateway 网关连接信息存储在 `~/.openclaw/node.json` 中。
节点主机会将其节点 id、令牌、显示名称以及 Gateway 网关连接信息存储在 `~/.openclaw/node.json` 中。
## Exec 审批
@ -148,8 +149,7 @@ openclaw devices approve <requestId>
- [Exec 审批](/zh-CN/tools/exec-approvals)
- `openclaw approvals --node <id|name|ip>`(从 Gateway 网关编辑)
对于已批准的异步节点 execOpenClaw 会在提示前准备一个规范的 `systemRunPlan`
之后获批的 `system.run` 转发会复用这个已存储的计划,因此在审批请求创建后对命令/cwd/会话字段的编辑会被拒绝,而不是改变节点实际执行的内容。
对于已批准的异步节点 execOpenClaw 会在提示前准备一个规范化的 `systemRunPlan`。后续已批准的 `system.run` 转发会复用该已存储计划,因此如果在创建审批请求之后再编辑 command/cwd/session 字段,将会被拒绝,而不是改变节点实际执行的内容。
## 相关内容

View File

@ -1,36 +1,40 @@
---
read_when:
- 将 iOS/Android 节点配对到 gateway pc蛋蛋 to=final code omitted
- 使用节点 canvas/camera 为智能体提供上下文
- 添加新的节点命令或 CLI 辅助命令时
summary: 节点:配对、能力、权限,以及用于 canvas/camera/screen/device/notifications/system 的 CLI 辅助命令
- 将 iOS/Android 节点与 Gateway 网关配对
- 将节点的 canvas/相机用于智能体上下文
- 添加新的节点命令或 CLI 辅助工具
summary: 节点:配对、能力、权限,以及用于 canvas/相机/屏幕/设备/通知/系统的 CLI 辅助工具
title: 节点
x-i18n:
generated_at: "2026-04-23T20:53:52Z"
generated_at: "2026-04-26T04:29:36Z"
model: gpt-5.4
provider: openai
source_hash: 1a210a5b90d78870dd6d17c0f0a81181a8897dc41149618c4359d7c03ef342fd
source_hash: 611678b91b0e54910fded6f7d25bf4b5ef03e0a4e1da6d72f5ccf30d18054d3d
source_path: nodes/index.md
workflow: 15
---
**节点**是一个配套设备macOS/iOS/Android/无头),它以 `role: "node"` 连接到 Gateway **WebSocket**(与操作员使用同一端口),并通过 `node.invoke` 暴露一个命令界面(例如 `canvas.*`、`camera.*`、`device.*`、`notifications.*`、`system.*`)。协议细节请参见:[Gateway protocol](/zh-CN/gateway/protocol)。
**节点**是连接到 Gateway 网关 **WebSocket**(与 operator 使用相同端口的配套设备macOS/iOS/Android/无头),在 `connect` 时使用 `role: "node"`,并通过 `node.invoke` 暴露命令接口(例如 `canvas.*`、`camera.*`、`device.*`、`notifications.*`、`system.*`)。协议详情: [Gateway protocol](/zh-CN/gateway/protocol)。
旧版传输层:[Bridge protocol](/zh-CN/gateway/bridge-protocol)TCP JSONL
当前节点的历史参考)。
旧版传输协议: [Bridge protocol](/zh-CN/gateway/bridge-protocol)TCP JSONL
当前节点的历史参考)。
macOS 也可以运行在**节点模式**下:菜单栏应用会连接到 Gateway 的 WS 服务器,并将其本地 canvas/camera 命令作为节点暴露出来(因此 `openclaw nodes …` 可对这台 Mac 生效)。
macOS 也可以运行在 **节点模式** 下:菜单栏应用会连接到 Gateway 网关的
WS 服务器,并将其本地的 canvas/相机命令作为一个节点暴露出来(因此
`openclaw nodes …` 可以针对这台 Mac 使用)。在远程 Gateway 网关模式下,浏览器
自动化由 CLI 节点主机(`openclaw node run` 或已安装的
节点服务)处理,而不是由原生应用节点处理。
说明:
注意
- 节点是**外设**,不是 gateway。它们不会运行 gateway 服务。
- Telegram/WhatsApp 等消息会落到 **gateway** 上,而不是节点上
- 故障排除操作手册:[/nodes/troubleshooting](/zh-CN/nodes/troubleshooting)
- 节点是**外设**,不是 Gateway 网关。它们不运行 gateway 服务。
- Telegram/WhatsApp 等消息会到达 **gateway**,不会到达节点
- 故障排除运行手册:[/nodes/troubleshooting](/zh-CN/nodes/troubleshooting)
## 配对 + 状态
**WS 节点使用设备配对。** 节点`connect` 期间提供设备身份Gateway
会为 `role: node` 创建设备配对请求。通过设备 CLI或 UI批准。
**WS 节点使用设备配对。** 节点在 `connect` 期间提供设备身份Gateway 网关
会为 `role: node` 创建设备配对请求。通过设备 CLI或 UI批准。
快速 CLI
@ -42,18 +46,18 @@ openclaw nodes status
openclaw nodes describe --node <idOrNameOrIp>
```
如果某个节点以变更后的认证详情role/scopes/public key重试则之
如果节点在重试时认证详情发生变化role/scopes/public key
待处理的请求会被替代,并创建新的 `requestId`。批准前请重新运行
`openclaw devices list`
说明
注意
- 当节点的设备配对角色包含 `node` 时,`nodes status` 会将其标记为**已配对**
- 设备配对记录是持久的已批准角色契约。token
轮换始终发生在该契约之内;它不能将已配对节点升级为
一个配对批准从未授予过的不同角色
- `node.pair.*`CLI`openclaw nodes pending/approve/reject/rename`)是一个单独的 gateway 持有的
节点配对存储;它**不会**对 WS `connect` 握手进行门控
- 当节点的设备配对 role 包含 `node` 时,`nodes status` 会将该节点标记为 **paired**
- 设备配对记录是持久化的已批准 role 契约。令牌轮换
会保留在该契约内;它不能将一个已配对节点升级为
配对批准从未授予过的其他 role
- `node.pair.*`CLI`openclaw nodes pending/approve/reject/rename`)是一个独立的、由 gateway 拥有的
节点配对存储;它**不会**控制 WS `connect` 握手
- 批准范围遵循待处理请求声明的命令:
- 无命令请求:`operator.pairing`
- 非 exec 节点命令:`operator.pairing` + `operator.write`
@ -61,22 +65,24 @@ openclaw nodes describe --node <idOrNameOrIp>
## 远程节点主机system.run
当你的 Gateway 运行在一台机器上,而你希望命令在另一台机器上执行时,请使用**节点主机**。模型仍然与 **gateway** 对话;当选择 `host=node`gateway 会将 `exec` 调用转发给**节点主机**。
当你的 Gateway 网关运行在一台机器上,而你希望命令在另一台机器上
执行时,请使用**节点主机**。模型仍然与 **gateway** 通信;当选择
`host=node`gateway 会将 `exec` 调用转发到**节点主机**。
### 哪些内容运行在哪里
### 各部分运行位置
- **Gateway 主机**:接收消息、运行模型、路由工具调用。
- **节点主机**:在节点机器上执行 `system.run`/`system.which`。
- **审批**:在节点主机上通过 `~/.openclaw/exec-approvals.json` 强制执行。
- **Gateway host**:接收消息、运行模型、路由工具调用。
- **Node host**:在节点机器上执行 `system.run`/`system.which`。
- **Approvals**:由节点主机上的 `~/.openclaw/exec-approvals.json` 强制执行。
批说明:
说明:
- 基于批的节点运行会绑定精确的请求上下文。
- 对于直接 shell/运行时文件执行OpenClaw 还会尽力绑定一个具体的本地
文件操作数,并在该文件执行前发生变化时拒绝运行。
- 如果 OpenClaw 无法为解释器/运行时命令识别出恰好一个具体本地文件,
基于审批的执行会被拒绝,而不是假装拥有完整运行时覆盖。对于更广泛的解释器语义,请使用沙箱、
独立主机,或显式的受信任 allowlist/full 工作流。
- 基于批的节点运行会绑定精确的请求上下文。
- 对于直接 shell/运行时文件执行OpenClaw 还会尽力绑定一个具体的本地
文件操作数;如果该文件在执行前发生变化,则拒绝运行。
- 如果 OpenClaw 无法为解释器/运行时命令准确识别出唯一的具体本地文件,
会拒绝基于批准的执行,而不是假装提供完整的运行时覆盖。对于更广泛的解释器语义,请使用沙箱隔离
独立主机,或显式的受信任允许列表/完整工作流。
### 启动节点主机(前台)
@ -86,37 +92,38 @@ openclaw nodes describe --node <idOrNameOrIp>
openclaw node run --host <gateway-host> --port 18789 --display-name "Build Node"
```
### 通过 SSH 隧道连接远程 gatewayloopback 绑定)
### 通过 SSH 隧道连接远程 Gateway 网关loopback 绑定)
如果 Gateway 绑定到 loopback`gateway.bind=loopback`,本地模式下默认),
远程节点主机无法直接连接。请创建一个 SSH 隧道,并
节点主机指向隧道的本地端。
如果 Gateway 网关绑定到 loopback`gateway.bind=loopback`,本地模式下默认),
远程节点主机无法直接连接。请创建一个 SSH 隧道,并
节点主机指向隧道的本地端
示例(节点主机 -> gateway 主机):
```bash
# Terminal A (keep running): forward local 18790 -> gateway 127.0.0.1:18789
# 终端 A保持运行将本地 18790 转发到 gateway 127.0.0.1:18789
ssh -N -L 18790:127.0.0.1:18789 user@gateway-host
# Terminal B: export the gateway token and connect through the tunnel
# 终端 B导出 gateway 令牌并通过隧道连接
export OPENCLAW_GATEWAY_TOKEN="<gateway-token>"
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Build Node"
```
说明
注意
- `openclaw node run` 支持 token 或 password 认证。
- 优先使用环境变量:`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`
- 配置回退 `gateway.auth.token` / `gateway.auth.password`
- `openclaw node run` 支持令牌或密码认证。
- 推荐使用环境变量:`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`
- 配置回退项是 `gateway.auth.token` / `gateway.auth.password`
- 在本地模式下,节点主机会有意忽略 `gateway.remote.token` / `gateway.remote.password`
- 在远程模式下,`gateway.remote.token` / `gateway.remote.password` 会根据远程优先级规则成为候选项
- 如果已配置活动的本地 `gateway.auth.*` SecretRef 但无法解析,节点主机认证会以关闭失败方式终止
- 节点主机认证解析认可 `OPENCLAW_GATEWAY_*` 环境变量。
- 在远程模式下,`gateway.remote.token` / `gateway.remote.password` 会根据远程优先级规则生效
- 如果已配置活动的本地 `gateway.auth.*` SecretRefs 但无法解析,节点主机认证会以失败关闭
- 节点主机认证解析认可 `OPENCLAW_GATEWAY_*` 环境变量。
### 启动节点主机(服务)
```bash
openclaw node install --host <gateway-host> --port 18789 --display-name "Build Node"
openclaw node start
openclaw node restart
```
@ -130,24 +137,24 @@ openclaw devices approve <requestId>
openclaw nodes status
```
如果节点以变更后的认证详情重试,请重新运行 `openclaw devices list`
如果节点在重试时认证详情发生变化,请重新运行 `openclaw devices list`
并批准当前的 `requestId`
命名选项:
- 在 `openclaw node run` / `openclaw node install` 上使用 `--display-name`持久保存在节点上的 `~/.openclaw/node.json`)。
- 在 `openclaw node run` / `openclaw node install` 上使用 `--display-name`会持久化到节点上的 `~/.openclaw/node.json`)。
- `openclaw nodes rename --node <id|name|ip> --name "Build Node"`gateway 覆盖)。
### 为命令设置允许列表
### 将命令加入允许列表
Exec 批是**按节点主机**划分的。可从 gateway 添加允许列表条目:
Exec 批是**按节点主机区分**的。可从 gateway 添加允许列表条目:
```bash
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/uname"
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/sw_vers"
```
审批信息位于节点主机的 `~/.openclaw/exec-approvals.json`
批准存储在节点主机上的 `~/.openclaw/exec-approvals.json`
### 将 exec 指向节点
@ -165,9 +172,10 @@ openclaw config set tools.exec.node "<id-or-name>"
/exec host=node security=allowlist node=<id-or-name>
```
设置完成后,任何带有 `host=node``exec` 调用都会在节点主机上运行(受节点 allowlist/审批约束)。
设置完成后,任何带有 `host=node``exec` 调用都会在节点主机上运行(受
节点允许列表/批准约束)。
`host=auto` 不会自行隐式选择节点,但`auto` 发出的显式逐次调用 `host=node` 请求是允许的。如果你希望节点 exec 成为该会话的默认值,请显式设置 `tools.exec.host=node``/exec host=node ...`
`host=auto` 不会自行隐式选择节点,但允许来自 `auto` 的显式逐次调用 `host=node` 请求。如果你希望节点 exec 成为该会话的默认值,请显式设置 `tools.exec.host=node``/exec host=node ...`
相关内容:
@ -183,13 +191,13 @@ openclaw config set tools.exec.node "<id-or-name>"
openclaw nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'
```
针对常见的“为智能体提供 MEDIA 附件”工作流,也有更高级的辅助命令
对于常见的“给智能体一个 MEDIA 附件”工作流,提供了更高层的辅助工具
## 截图canvas 快照)
如果节点正在显示 CanvasWebView`canvas.snapshot` 会返回 `{ format, base64 }`
CLI 辅助命令(写入临时文件并打印 `MEDIA:<path>`
CLI 辅助工具(写入临时文件并打印 `MEDIA:<path>`
```bash
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format png
@ -205,9 +213,9 @@ openclaw nodes canvas navigate https://example.com --node <idOrNameOrIp>
openclaw nodes canvas eval --node <idOrNameOrIp> --js "document.title"
```
说明
注意
- `canvas present` 接受 URL 或本地文件路径(`--target`并支持可选的 `--x/--y/--width/--height` 进行定位。
- `canvas present` 接受 URL 或本地文件路径(`--target`还可选用 `--x/--y/--width/--height` 进行定位。
- `canvas eval` 接受内联 JS`--js`)或位置参数。
### A2UICanvas
@ -218,17 +226,17 @@ openclaw nodes canvas a2ui push --node <idOrNameOrIp> --jsonl ./payload.jsonl
openclaw nodes canvas a2ui reset --node <idOrNameOrIp>
```
说明
注意
- 仅支持 A2UI v0.8 JSONLv0.9/createSurface 会被拒绝)。
## 照片 + 视频(节点摄像头
## 照片 + 视频(节点相机
照片(`jpg`
```bash
openclaw nodes camera list --node <idOrNameOrIp>
openclaw nodes camera snap --node <idOrNameOrIp> # default: both facings (2 MEDIA lines)
openclaw nodes camera snap --node <idOrNameOrIp> # 默认两个朝向都拍摄2 行 MEDIA
openclaw nodes camera snap --node <idOrNameOrIp> --facing front
```
@ -239,11 +247,11 @@ openclaw nodes camera clip --node <idOrNameOrIp> --duration 10s
openclaw nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio
```
说明
注意
- 节点必须位于**前台**才能使用 `canvas.*``camera.*`(后台调用会返回 `NODE_BACKGROUND_UNAVAILABLE`)。
- 为避免过大的 base64 载,片段时长会被限制(当前 `<= 60s`)。
- Android 会在可能时请求 `CAMERA`/`RECORD_AUDIO` 权限;若权限被拒绝,则会以 `*_PERMISSION_REQUIRED` 失败。
- 节点必须处于**前台**`canvas.*` 和 `camera.*` 才可用(后台调用会返回 `NODE_BACKGROUND_UNAVAILABLE`)。
- 为避免过大的 base64 载,视频片段时长会被限制(当前 `<= 60s`)。
- Android 会在可能时提示请求 `CAMERA`/`RECORD_AUDIO` 权限;被拒绝的权限会以 `*_PERMISSION_REQUIRED` 失败。
## 屏幕录制(节点)
@ -254,28 +262,28 @@ openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio
```
说明
注意
- `screen.record` 的可用性取决于节点平台。
- `screen.record` 是否可用取决于节点平台。
- 屏幕录制会被限制为 `<= 60s`
- `--no-audio` 会在受支持平台上禁用麦克风采集。
- 当存在多个屏幕时,可使用 `--screen <index>` 选择显示器。
- `--no-audio` 会在受支持平台上禁用麦克风采集。
- 当有多个屏幕可用时,使用 `--screen <index>` 选择显示器。
## 位置(节点)
当设置中启用了定位功能时,节点会暴露 `location.get`
当设置中启用了 Location 时,节点会暴露 `location.get`
CLI 辅助命令
CLI 辅助工具
```bash
openclaw nodes location get --node <idOrNameOrIp>
openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000
```
说明
注意
- 定位默认**关闭**
- “始终”需要系统权限;后台获取为尽力而为。
- Location **默认关闭**
- “Always” 需要系统权限;后台获取为尽力而为。
- 响应包含纬度/经度、精度(米)和时间戳。
## SMSAndroid 节点)
@ -288,14 +296,14 @@ openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 1
openclaw nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from OpenClaw"}'
```
说明
注意
- 必须先在 Android 设备上接受权限提示,该能力才会被广播
- 不支持蜂窝通信的仅 WiFi 设备不会广播 `sms.send`
- 在能力被宣告之前,必须先在 Android 设备上接受权限提示。
- 不支持蜂窝通信的纯 WiFi 设备不会宣告 `sms.send`
## Android 设备 + 个人数据命令
当启用了相应能力时Android 节点可广播额外的命令族。
启用相应能力后Android 节点可以宣告额外的命令族。
可用命令族:
@ -308,7 +316,7 @@ openclaw nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"
- `sms.search`
- `motion.activity`、`motion.pedometer`
示例调用
调用示例:
```bash
openclaw nodes invoke --node <idOrNameOrIp> --command device.status --params '{}'
@ -316,14 +324,14 @@ openclaw nodes invoke --node <idOrNameOrIp> --command notifications.list --param
openclaw nodes invoke --node <idOrNameOrIp> --command photos.latest --params '{"limit":1}'
```
说明
注意
- 运动命令会根据可用传感器进行能力门控。
- Motion 命令会根据可用传感器进行能力门控。
## 系统命令(节点主机 / mac 节点)
macOS 节点暴露 `system.run`、`system.notify` 和 `system.execApprovals.get/set`
无头节点主机暴露 `system.run`、`system.which` 和 `system.execApprovals.get/set`
macOS 节点暴露 `system.run`、`system.notify` 和 `system.execApprovals.get/set`
无头节点主机暴露 `system.run`、`system.which` 和 `system.execApprovals.get/set`
示例:
@ -332,24 +340,25 @@ openclaw nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready
openclaw nodes invoke --node <idOrNameOrIp> --command system.which --params '{"name":"git"}'
```
说明
注意
- `system.run` 会在载中返回 stdout/stderr/退出码。
- shell 执行现在通过带有 `host=node``exec` 工具进行;`nodes` 仍然是显式节点命令的直接 RPC 界面
- `system.run` 会在载中返回 stdout/stderr/退出码。
- Shell 执行现在通过使用 `host=node``exec` 工具进行;`nodes` 仍然是显式节点命令的直接 RPC 接口
- `nodes invoke` 不暴露 `system.run``system.run.prepare`;它们仅保留在 exec 路径上。
- exec 路径会在审批前准备一个规范的 `systemRunPlan`。一旦
审批被授予gateway 转发的是该已存储计划,而不是后续调用方编辑过的任何 command/cwd/session 字段。
- exec 路径会在批准前准备一个规范化的 `systemRunPlan`。一旦
批准授予gateway 会转发该已存储的计划,而不是任何后续由
调用方修改的 command/cwd/session 字段。
- `system.notify` 会遵循 macOS 应用中的通知权限状态。
- 无法识别的节点 `platform` / `deviceFamily` 元数据会使用保守的默认允许列表,其中排除了 `system.run``system.which`。如果你确实需要为未知平台启用这些命令,请通过 `gateway.nodes.allowCommands` 显式添加。
- 无法识别的节点 `platform` / `deviceFamily` 元数据会使用保守的默认允许列表,其中不包含 `system.run``system.which`。如果你确实需要在未知平台上使用这些命令,请通过 `gateway.nodes.allowCommands` 显式添加。
- `system.run` 支持 `--cwd`、`--env KEY=VAL`、`--command-timeout` 和 `--needs-screen-recording`
- 对于 shell 包装器(`bash|sh|zsh ... -c/-lc`按请求范围传入的 `--env` 值会被缩减为显式允许列表(`TERM`、`LANG`、`LC_*`、`COLORTERM`、`NO_COLOR`、`FORCE_COLOR`)。
- 对于 allowlist 模式中的 allow-always 决策,已知的调度包装器(`env`、`nice`、`nohup`、`stdbuf`、`timeout`)会持久化内部可执行文件路径,而不是包装器路径。如果无法安全解包,则不会自动持久化任何 allowlist 条目。
- 在 allowlist 模式下的 Windows 节点主机上,通过 `cmd.exe /c` 运行的 shell 包装器命令需要审批(仅有 allowlist 条目并不会自动允许这种包装器形式)。
- 对于 shell 包装器(`bash|sh|zsh ... -c/-lc`请求作用域的 `--env` 值会被收缩为显式允许列表(`TERM`、`LANG`、`LC_*`、`COLORTERM`、`NO_COLOR`、`FORCE_COLOR`)。
- 在允许列表模式下,对于“始终允许”的决策,已知的分发包装器(`env`、`nice`、`nohup`、`stdbuf`、`timeout`)会持久化内部可执行文件路径,而不是包装器路径。如果无法安全解包,则不会自动持久化任何允许列表条目。
- 在 Windows 节点主机上的允许列表模式中,通过 `cmd.exe /c` 进行的 shell 包装器运行需要批准(仅有允许列表条目并不会自动允许这种包装器形式)。
- `system.notify` 支持 `--priority <passive|active|timeSensitive>``--delivery <system|overlay|auto>`
- 节点主机会忽略 `PATH` 覆盖,并去除危险的启动/ shell 键(`DYLD_*`、`LD_*`、`NODE_OPTIONS`、`PYTHON*`、`PERL*`、`RUBYOPT`、`SHELLOPTS`、`PS4`)。如果你需要额外的 PATH 条目,请配置节点主机服务环境(或将工具安装标准位置),而不是通过 `--env` 传递 `PATH`
- 在 macOS 节点模式下,`system.run` 受 macOS 应用中的 exec 审批控制Settings → Exec approvals
Ask/allowlist/full 的行为与无头节点主机相同;被拒绝的提示会返回 `SYSTEM_RUN_DENIED`
- 在无头节点主机上,`system.run` 受 exec 批控制(`~/.openclaw/exec-approvals.json`)。
- 节点主机会忽略 `PATH` 覆盖,并剥离危险的启动/ shell 键(`DYLD_*`、`LD_*`、`NODE_OPTIONS`、`PYTHON*`、`PERL*`、`RUBYOPT`、`SHELLOPTS`、`PS4`)。如果你需要额外的 PATH 条目,请配置节点主机服务环境(或将工具安装标准位置),而不是通过 `--env` 传递 `PATH`
- 在 macOS 节点模式下,`system.run` 受 macOS 应用中的 exec 批准控制(设置 → Exec approvals
ask/allowlist/full 的行为与无头节点主机相同;被拒绝的提示会返回 `SYSTEM_RUN_DENIED`
- 在无头节点主机上,`system.run` 受 exec 批控制(`~/.openclaw/exec-approvals.json`)。
## Exec 节点绑定
@ -378,32 +387,32 @@ openclaw config unset agents.list[0].tools.exec.node
## 权限映射
节点可以在 `node.list` / `node.describe` 中包含一个 `permissions` 映射,以权限名称为键(例如 `screenRecording`、`accessibility`并使用布尔值作为值(`true` = 已授予)。
节点可以在 `node.list` / `node.describe` 中包含 `permissions` 映射,以权限名称为键(例如 `screenRecording`、`accessibility`以布尔值为值(`true` = 已授予)。
## 无头节点主机(跨平台)
OpenClaw 可以运行一个**无头节点主机**(无 UI连接到 Gateway
WebSocket 并暴露 `system.run` / `system.which`。这在 Linux/Windows
上,当你希望在服务器旁运行一个最小节点时非常有用。
OpenClaw 可以运行一个**无头节点主机**(无 UI连接到 Gateway 网关
WebSocket 并暴露 `system.run` / `system.which`。这在 Linux/Windows
或在服务器旁运行一个最小节点时非常有用。
启动
启动方式
```bash
openclaw node run --host <gateway-host> --port 18789
```
说明
注意
- 仍然需要配对Gateway 会显示设备配对提示)。
- 节点主机会将其节点 id、token、显示名称和 gateway 连接信息存储在 `~/.openclaw/node.json` 中。
- Exec 批会通过 `~/.openclaw/exec-approvals.json` 在本地强制执行
参见 [Exec approvals](/zh-CN/tools/exec-approvals))。
- 在 macOS 上,无头节点主机默认在本地执行 `system.run`。设置
`OPENCLAW_NODE_EXEC_HOST=app` 可将 `system.run` 路由到配套应用 exec 主机;再
`OPENCLAW_NODE_EXEC_FALLBACK=0`要求必须使用应用主机,并在其不可用时以关闭失败方式终止
- 当 Gateway WS 使用 TLS 时,添加 `--tls` / `--tls-fingerprint`
- 仍然需要配对Gateway 网关会显示设备配对提示)。
- 节点主机会将其节点 id、令牌、显示名称以及 gateway 连接信息存储在 `~/.openclaw/node.json` 中。
- Exec 批会通过本地 `~/.openclaw/exec-approvals.json`
强制执行(参见 [Exec approvals](/zh-CN/tools/exec-approvals))。
- 在 macOS 上,无头节点主机默认在本地执行 `system.run`。设置
`OPENCLAW_NODE_EXEC_HOST=app` 可将 `system.run` 路由到配套应用 exec 主机;再加
`OPENCLAW_NODE_EXEC_FALLBACK=0`强制要求应用主机,并在其不可用时以失败关闭
- 当 Gateway 网关 WS 使用 TLS 时,添加 `--tls` / `--tls-fingerprint`
## Mac 节点模式
- macOS 菜单栏应用会作为节点连接到 Gateway WS 服务器(因此 `openclaw nodes …`作用于这台 Mac)。
- 在远程模式下,应用会为 Gateway 端口打开 SSH 隧道并连接到 `localhost`
- macOS 菜单栏应用会作为一个节点连接到 Gateway 网关 WS 服务器(因此 `openclaw nodes …`以针对这台 Mac 使用)。
- 在远程模式下,应用会为 Gateway 网关端口打开 SSH 隧道并连接到 `localhost`

View File

@ -4,95 +4,99 @@ read_when:
summary: 通过 SSH 控制远程 OpenClaw Gateway 网关的 macOS 应用流程
title: 远程控制
x-i18n:
generated_at: "2026-04-26T04:11:39Z"
generated_at: "2026-04-26T04:29:31Z"
model: gpt-5.4
provider: openai
source_hash: 460b32dfac9f86934b1498a2c8afb202cb609187efbcaeecc303c1d82ebd8052
source_hash: 4de4980fe378fc9b685cf7732d21a80c640088191308b8ef1d3df9f468cb5be2
source_path: platforms/mac/remote.md
workflow: 15
---
# 远程 OpenClawmacOS ⇄ 远程主机)
此流程允许 macOS 应用充当运行在另一台主机(桌面机/服务器)上的 OpenClaw Gateway 网关的完整远程控制器。这是应用的**通过 SSH 远程连接**远程运行功能。所有功能——健康检查、Voice Wake 转发和 Web Chat——都会复用 _设置 → 通用_ 中相同的远程 SSH 配置。
此流程让 macOS 应用作为运行在另一台主机(桌面机/服务器)上的 OpenClaw Gateway 网关的完整远程控制端。这是应用中的**通过 SSH 远程连接**远程运行功能。所有功能——运行状况检查、Voice Wake 转发以及 Web Chat——都会复用 _设置 → 通用_ 中相同的远程 SSH 配置。
## 模式
- **本地(这台 Mac**:所有内容都在笔记本电脑上运行。不涉及 SSH。
- **通过 SSH 远程连接(默认)**OpenClaw 命令在远程主机上执行。mac 应用会使用 `-o BatchMode`、你选择的身份/密钥以及本地端口转发来建立 SSH 连接。
- **远程直连ws/wss**:不使用 SSH 隧道。mac 应用直接连接到 Gateway 网关 URL例如通过 Tailscale Serve 或公共 HTTPS 反向代理)。
- **本地(这台 Mac**:所有内容都在这台笔记本上运行。不涉及 SSH。
- **通过 SSH 远程连接(默认)**OpenClaw 命令会在远程主机上执行。Mac 应用会使用 `-o BatchMode`、你选择的身份/密钥以及本地端口转发来建立 SSH 连接。
- **远程直连ws/wss**:不使用 SSH 隧道。Mac 应用直接连接到 Gateway 网关 URL例如通过 Tailscale Serve 或公共 HTTPS 反向代理)。
## 远程传输方式
远程模式支持两种传输方式:
- **SSH 隧道**(默认):使用 `ssh -N -L ...` 将 Gateway 网关端口转发到 localhost。由于隧道是 loopbackGateway 网关会将节点的 IP 视为 `127.0.0.1`
- **SSH 隧道**(默认):使用 `ssh -N -L ...` 将 Gateway 网关端口转发到 localhost。由于该隧道使用 loopbackGateway 网关看到的节点 IP 会是 `127.0.0.1`
- **直连ws/wss**:直接连接到 Gateway 网关 URL。Gateway 网关会看到真实的客户端 IP。
在 SSH 隧道模式下,发现的 LAN/tailnet 主机名会保存为
在 SSH 隧道模式下,发现的局域网 / tailnet 主机名会保存为
`gateway.remote.sshTarget`。应用会将 `gateway.remote.url` 保持为本地
隧道端点,例如 `ws://127.0.0.1:18789`,因此 CLI、Web Chat 和浏览器自动化都会使用相同的安全 loopback 传输方式。
隧道端点,例如 `ws://127.0.0.1:18789`,这样 CLI、Web Chat 和
本地节点宿主服务都会使用相同且安全的 loopback 传输。
## 远程主机的前提条件
远程模式下的浏览器自动化由 CLI 节点宿主管理,而不是由原生 macOS 应用节点管理。应用会在可能时启动已安装的节点宿主服务;如果你需要从那台 Mac 控制浏览器,请使用 `openclaw node install ...``openclaw node start` 安装/启动它(或在前台运行
`openclaw node run ...`),然后将目标指向那个具备浏览器能力的节点。
1. 安装 Node + pnpm并构建/安装 OpenClaw CLI`pnpm install && pnpm build && pnpm link --global`)。
2. 确保 `openclaw` 对非交互式 shell 可用并位于 PATH 中(如有需要,可为其创建到 `/usr/local/bin``/opt/homebrew/bin` 的符号链接)。
3. 开启使用密钥认证的 SSH。我们建议使用 **Tailscale** IP以便在非局域网环境下保持稳定可达。
## 远程主机上的前置条件
1. 安装 Node 和 pnpm并构建/安装 OpenClaw CLI`pnpm install && pnpm build && pnpm link --global`)。
2. 确保 `openclaw` 对非交互式 shell 可用并位于 PATH 中(如有需要,可创建到 `/usr/local/bin``/opt/homebrew/bin` 的符号链接)。
3. 开启 SSH 并使用密钥认证。我们建议使用 **Tailscale** IP以便在非局域网环境下也能稳定连接。
## macOS 应用设置
1. 打开 _设置 → 通用_
2. 在 **OpenClaw 运行方式** 下,选择 **通过 SSH 远程连接**,并设置:
2. 在 **OpenClaw 运行位置** 下,选择 **通过 SSH 远程连接**,并设置:
- **传输方式****SSH 隧道** 或 **直连ws/wss**
- **SSH 目标**`user@host`(可选 `:port`)。
- 如果 Gateway 网关位于同一局域网并广播 Bonjour可从发现列表中选择它自动填充此字段。
- **Gateway 网关 URL**(仅直连):`wss://gateway.example.ts.net`(本地/LAN 可使用 `ws://...`)。
- 如果 Gateway 网关位于同一局域网并通过 Bonjour 广播,可以从发现列表中选择它来自动填充此字段。
- **Gateway 网关 URL**(仅直连):`wss://gateway.example.ts.net`(本地/局域网可使用 `ws://...`)。
- **身份文件**(高级):你的密钥路径。
- **项目根目录**(高级):用于执行命令的远程 checkout 路径。
- **CLI 路径**(高级):可选,指向可运行的 `openclaw` 入口点/二进制文件路径(如已广播会自动填充)。
3. 点击 **测试远程连接**。成功表示远程 `openclaw status --json` 能正确运行。失败通常表示 PATH/CLI 问题;退出码 127 表示远程找不到 CLI。
4. 健康检查和 Web Chat 现在都会自动通过此 SSH 隧道运行。
- **项目根目录**(高级):用于执行命令的远程检出路径。
- **CLI 路径**(高级):可选,指向可运行的 `openclaw` 入口点/二进制文件路径(如已广播会自动填充)。
3. 点击 **测试远程连接**。成功表示远程 `openclaw status --json` 能正常运行。失败通常意味着 PATH/CLI 问题;退出码 127 表示在远程端找不到 CLI。
4. 运行状况检查和 Web Chat 现在都会自动通过这个 SSH 隧道运行。
## Web Chat
- **SSH 隧道**Web Chat 通过转发后的 WebSocket 控制端口(默认 18789连接到 Gateway 网关。
- **直连ws/wss**Web Chat 直接连接到配置的 Gateway 网关 URL。
- **直连ws/wss**Web Chat 直接连接到配置的 Gateway 网关 URL。
- 现在不再有单独的 WebChat HTTP 服务器。
## 权限
- 远程主机需要与本地相同的 TCC 批准(自动化、辅助功能、屏幕录制、麦克风、语音识别、通知)。在那台机器上运行一次新手引导以授予这些权限。
- 节点会通过 `node.list` / `node.describe` 广播其权限状态,以便智能体知道哪些功能可用。
- 远程主机需要与本地相同的 TCC 授权(自动化、辅助功能、屏幕录制、麦克风、语音识别、通知)。请在那台机器上运行新手引导,一次性授予这些权限。
- 节点会通过 `node.list` / `node.describe` 广播其权限状态,以便智能体了解哪些能力可用。
## 安全说明
- 优先在远程主机上绑定 loopback 地址,并通过 SSH 或 Tailscale 连接。
- SSH 隧道使用严格的主机密钥检查;请先信任主机密钥,使其存在于 `~/.ssh/known_hosts` 中。
- 如果你将 Gateway 网关绑定到非 loopback 接口,必启用有效的 Gateway 网关认证token、密码配置`gateway.auth.mode: "trusted-proxy"` 的身份感知反向代理。
- 参见 [安全](/zh-CN/gateway/security) 和 [Tailscale](/zh-CN/gateway/tailscale)。
- 优先在远程主机上绑定 loopback 地址,并通过 SSH 或 Tailscale 连接。
- SSH 隧道使用严格的主机密钥检查;请先信任主机密钥,使其存在于 `~/.ssh/known_hosts` 中。
- 如果你将 Gateway 网关绑定到非 loopback 接口,请务必启用有效的 Gateway 网关认证token、密码启用`gateway.auth.mode: "trusted-proxy"` 的身份感知反向代理。
- 参见 [安全](/zh-CN/gateway/security) 和 [Tailscale](/zh-CN/gateway/tailscale)。
## WhatsApp 登录流程(远程)
- 在**远程主机上**运行 `openclaw channels login --verbose`。使用你手机上的 WhatsApp 扫描二维码。
- 如果认证过期,请在该主机上重新运行登录。健康检查会显示链接问题。
- 在**远程主机上**运行 `openclaw channels login --verbose`然后使用你手机上的 WhatsApp 扫描二维码。
- 如果认证过期,请在该主机上重新运行登录。运行状况检查会提示链接问题。
## 故障排除
- **退出码 127 / not found**`openclaw` 不在非登录 shell 的 PATH 中。将其添加到 `/etc/paths`、你的 shell rc或创建到 `/usr/local/bin`/`/opt/homebrew/bin` 的符号链接。
- **健康探测失败**:检查 SSH 可达性、PATH以及 Baileys 是否已登录(`openclaw status --json`)。
- **Web Chat 卡住**:确认 Gateway 网关正在远程主机上运行,且转发端口与 Gateway 网关 WS 端口匹配UI 需要健康的 WS 连接。
- **节点 IP 显示为 127.0.0.1**:这是 SSH 隧道下的预期行为。如果你希望 Gateway 网关看到真实客户端 IP请将**传输方式**切换为**直连ws/wss**。
- **exit 127 / not found**`openclaw` 不在非登录 shell 的 PATH 中。将其添加到 `/etc/paths`、你的 shell rc,或创建到 `/usr/local/bin`/`/opt/homebrew/bin` 的符号链接。
- **运行状况探测失败**:检查 SSH 连通性、PATH以及 Baileys 是否已登录(`openclaw status --json`)。
- **Web Chat 卡住**:确认 Gateway 网关正在远程主机上运行,并且转发端口与 Gateway 网关 WS 端口一致UI 需要健康的 WS 连接。
- **节点 IP 显示为 127.0.0.1**:这是 SSH 隧道下的预期行为。如果你希望 Gateway 网关看到真实客户端 IP请将**传输方式**切换为 **直连ws/wss**
- **Voice Wake**:在远程模式下,触发短语会自动转发;不需要单独的转发器。
## 通知声音
你可以通过脚本使用 `openclaw``node.invoke` 为每条通知选择声音,例如:
你可以通过脚本中的 `openclaw``node.invoke` 为每条通知单独选择声音,例如:
```bash
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
```
应用中已不再提供全局“默认声音”切换;调用方可为每次请求选择一种声音(或不选择声音)。
应用中已不再提供全局“默认声音”开关;调用方需要为每个请求单独选择声音(或不选择)。
## 相关内容