问题描述

在使用 OpenClaw Node 执行远程命令时,遇到 SYSTEM_RUN_DENIED: approval required 错误,明明已设置 security: fullask: off,配置显示正确但仍被拒绝。

环境信息

  • OpenClaw 版本: 2026.5.28+
  • 架构: Gateway (multi-server) + Node (Work-PC / Home-PC)
  • 操作系统: Gateway (Ubuntu), Node (Windows + WSL2)
  • 目标: 在 Node 上执行远程命令

错误现象

# 在 Gateway 执行 exec(host="node", node="Work", command="hostname")
# 返回 UNAVAILABLE: SYSTEM_RUN_DENIED: approval required

排查过程

1. 检查 Gateway 配置

openclaw config get

配置正确:

{
  "tools": {
    "exec": {
      "security": "full",
      "ask": "off",
      "host": "auto"
    }
  },
  "agents": {
    "list": [{
      "id": "main",
      "tools": {
        "exec": {
          "node": "6009e1d3f068e1cab0dcf9c99060b292739a19c2076198cec06ff1922a3bd555"
        }
      }
    }]
  }
}

2. 检查 Node approvals 配置

cat ~/.openclaw/exec-approvals.json

初始配置(有问题的版本):

{
  "version": 1,
  "socket": {
    "path": "/home/administrator/.openclaw/exec-approvals.sock",
    "token": "Uh_SGs…xr1n"
  },
  "defaults": {
    "security": "full",
    "ask": "off",
    "askFallback": "full",
    "autoAllowSkills": true
  },
  "agents": {}
}

3. 验证 effective policy

openclaw approvals get --node Work

输出显示配置正确读取:

Effective Policy
┌────────────┬────────────────────────┬───────────────────────┬────────────────────┐
│ Scope      │ Requested              │ Effective             │ Notes              │
├────────────┼────────────────────────┼───────────────────────┼────────────────────┤
│ tools.exec │ security=full, ask=off │ security=full, ask=off │ requested applies │
└────────────┴────────────────────────┴───────────────────────┴────────────────────┘

4. 尝试的解决方案(均无效)

  • ✅ 修改 Gateway openclaw.jsontools.exec.ask: off
  • ✅ 修改 Node exec-approvals.json:移除 permissions 字段
  • ✅ 重启 Node 服务:systemctl --user restart openclaw-node
  • ✅ 重启 Gateway:openclaw gateway stop && openclaw gateway start
  • ✅ 检查 Node 日志:无错误信息
  • ✅ 查阅官方文档和 GitHub issue

根本原因

exec-approvals.json 中的 socket 字段阻止了配置生效。

socket 字段存在时,OpenClaw 会尝试通过 Unix socket (exec-approvals.sock) 通信来获取 approvals 配置。如果:

  1. Socket 文件不存在
  2. Socket 文件权限不正确
  3. Socket 通信失败

则回退到某个默认行为(可能是 deny),导致配置文件中的 security: fullask: off 被忽略。

新版推荐方案:exec-policy preset yolo

在新版 OpenClaw 中,官方提供了更简洁的方式来一键配置 YOLO 模式(无需手动编辑 JSON):

# 在 Node 端执行(推荐方式)
openclaw exec-policy preset yolo
openclaw node restart

这会自动:

  • 设置 tools.execsecurity: fullask: off
  • 同步更新 exec-approvals.json(含 askFallback: "full"
  • 移除/覆盖 socket 字段(避免 IPC 干扰)
  • 重启节点使配置生效

旧版手动方案(备选)

如果 exec-policy 命令不可用,手动方案如下:

方案一:删除 socket 字段

编辑 ~/.openclaw/exec-approvals.json删除 socket 字段

{
  "version": 1,
  "defaults": {
    "security": "full",
    "ask": "off",
    "askFallback": "full",
    "autoAllowSkills": true
  },
  "agents": {}
}

方案二:清空文件

如果还是不行,可以直接清空该文件(节点重启后会重建):

# 备份
cp ~/.openclaw/exec-approvals.json ~/.openclaw/exec-approvals.json.bak
# 清空
echo '{}' > ~/.openclaw/exec-approvals.json
# 重启节点
systemctl --user restart openclaw-node

验证修复

# Gateway 端测试
openclaw execPolicy get --node Work
# 或直接执行测试
exec(host="node", node="Work", command="hostname")
# 应返回目标主机名,如 DESKTOP-46MKU59 ✅

完整配置示例(新版推荐写法)

新版 OpenClaw 的配置更简洁,核心只需设置:

Gateway 端

openclaw config set tools.exec.security full
openclaw config set tools.exec.ask off

Node 端

openclaw exec-policy preset yolo
openclaw node restart

无需手动编辑 openclaw.json 中的 agents.list[].tools.exec.node 字段,节点会自动识别。

经验总结

  1. 新版优先用 exec-policy preset yolo:官方推荐的自动化方式,比手动改 JSON 更可靠
  2. Socket 配置陷阱exec-approvals.json 中的 socket 字段是 macOS App 的本地 IPC 通信用途,在 headless Linux node 环境中会导致 approvals 系统异常
  3. 调试方法

    • 新版:openclaw exec-policy get --node <name> 查看 effective policy
    • 旧版:openclaw approvals get --node <name>
    • 检查 Node 日志:journalctl --user -u openclaw-node
    • 确认配置文件格式正确(JSON 语法)
  4. 文档参考

附录:常见问题

Q: openclaw exec-policy 命令不存在?
A: 你的 OpenClaw 版本较旧,请升级到最新版。使用 openclaw update check 查看更新。

Q: 节点已审批通过但 exec 仍无法路由?
A: 确认 exec 命令中 host="node"node="节点名" 是作为工具参数传递,而不是写在命令字符串里:

# ✅ 正确写法(作为参数)
exec(command="hostname", host="node", node="Work")

# ❌ 错误写法(写在命令字符串里)
exec(command='hostname --host node --node Work')

Q: Home 节点审批后仍无法连接?
A: 在 Gateway Web UI 中完成配对审批后,可能需要重启 Gateway 才能使节点路由生效。


折腾时间: 约 4 小时(初次)+ 5 分钟(新版方案)
最终解决: 新版一行命令,旧版删除 socket 字段
记录时间: 2026-05-31
更新: 2026-07-01(补充新版 exec-policy 方案)

最后修改:2026 年 07 月 01 日
如果觉得我的文章对你有用,请随意赞赏