问题描述
在使用 OpenClaw Node 执行远程命令时,遇到 SYSTEM_RUN_DENIED: approval required 错误,明明已设置 security: full 和 ask: 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.json:tools.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 配置。如果:
- Socket 文件不存在
- Socket 文件权限不正确
- Socket 通信失败
则回退到某个默认行为(可能是 deny),导致配置文件中的 security: full 和 ask: off 被忽略。
新版推荐方案:exec-policy preset yolo
在新版 OpenClaw 中,官方提供了更简洁的方式来一键配置 YOLO 模式(无需手动编辑 JSON):
# 在 Node 端执行(推荐方式)
openclaw exec-policy preset yolo
openclaw node restart这会自动:
- 设置
tools.exec的security: full和ask: 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 offNode 端
openclaw exec-policy preset yolo
openclaw node restart无需手动编辑 openclaw.json 中的 agents.list[].tools.exec.node 字段,节点会自动识别。
经验总结
- 新版优先用
exec-policy preset yolo:官方推荐的自动化方式,比手动改 JSON 更可靠 - Socket 配置陷阱:
exec-approvals.json中的socket字段是 macOS App 的本地 IPC 通信用途,在 headless Linux node 环境中会导致 approvals 系统异常 调试方法:
- 新版:
openclaw exec-policy get --node <name>查看 effective policy - 旧版:
openclaw approvals get --node <name> - 检查 Node 日志:
journalctl --user -u openclaw-node - 确认配置文件格式正确(JSON 语法)
- 新版:
文档参考:
附录:常见问题
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 方案)