OpenClaw 网关从环境变量读取模型 API 密钥、Webhook 签名密钥与频道令牌——可一旦涉及 launchd,macOS 里的「环境」就不再单一。本 2026 手册对比钥匙串存储与 dotenv 文件,说明如何把密钥接入 LaunchAgent 而不泄漏到交互 shell,并给出轮换步骤,让无头云端 Mac mini M4 合规运行,又不必把凭据贴进团队聊天。
请与 OpenClaw macOS 安装与部署 搭配阅读以完成首次引导。排查远程访问时,可对照 SSH 隧道远程管理,避免为复制令牌而随意放宽绑定地址。日常卫生请对齐 运维手册:日志、升级与回滚,使密钥轮换与二进制升级落在同一套变更记录里。工具能触及的文件范围请另读 工具白名单与文件系统沙箱,与密钥存储形成纵深。
存储方式对比
| 机制 | 优势 | 劣势 |
|---|---|---|
| macOS 钥匙串 | 操作系统保护的 ACL;默认非全局可读 | 无头首次授权需一次性 GUI 或规范的 security 命令行 |
磁盘上的 .env |
本地迭代最快 | 备份工具常整目录拷贝用户主目录——易成泄漏面 |
Plist EnvironmentVariables |
原生 launchd;可在 IaC 中复现 | 静息仍为明文——plist 权限限制为 600 |
密钥类型路由表
| 密钥类型 | 建议存储 | 轮换节奏 |
|---|---|---|
| 大模型提供商 API 密钥 | 钥匙串或保管库代理 → 进程启动时注入环境 | 60~90 天或员工离职时 |
| Webhook HMAC 密钥 | 每频道独立钥匙串项 | 90 天;切换期双密钥并行 |
| 非敏感开关 | Plist 或可进 Git 的 JSON 配置 | 随应用版本发布 |
切勿:把生产密钥贴进 Slack、邮件或录屏。一旦发生,立即轮换——即便消息「仅私聊」也应假定密钥已泄露。
八步可重复的密钥引导
- 创建服务用户:专用于网关的非管理员账户;主目录权限
700。 - 带外生成密钥:用保管库界面或云控制台;避免 echo 进 shell 历史。
- 写入钥匙串:一密一项,描述性标签,访问控制仅允许网关二进制。
- 包装启动命令:小型 shell 通过
security find-generic-password -w从钥匙串导出变量再 exec OpenClaw——记录 stderr,不记录明文。 - 在 LaunchAgent 引用包装器:ProgramArguments 指向包装脚本;plist 内不放明文密钥。
- 干跑验证:启动网关、确认健康端点,若迁移则在提供商侧撤销旧密钥。
- 文档化轮换:工单模板列出依赖频道与 ≤ 30 分钟回滚窗口。
- 季度审计:在钥匙串路径之外全盘检索误放的
sk-或ANTHROPIC字符串。
团队真正落地的数值护栏
选定三个数字写进内部 README,并在代码评审强制执行:磁盘上明文密钥文件数量上限(生产为 0)、任意长期令牌最大寿命(默认 90 天)、网关账户 sudo 人数上限(具名 2 人)。承包商需要访问时,把 SSH 密钥限时绑定到维护窗口,而不是永久放宽钥匙串 ACL。
- Plist 权限:凡含密钥路径的 plist 均
chmod 600——即便密文实际在钥匙串里。 - 包装器超时:钥匙串查询应在 2 秒内完成;更久往往表示无头机上阻塞 UI 弹窗——可短时 VNC 一次后复测。
- 密钥最大年龄:超过 180 天未轮换的项,在下一迭代规划强制开单。
审计日志不打印密钥本体
合规评审问的是「谁碰了密钥」而非「密钥是什么」。配置网关日志输出凭据来源的哈希指纹(钥匙串项 UUID、保管库路径或轮换批次 ID),而非字面令牌。OpenClaw 报错时,对可能回显上游 API 密钥的查询参数做脱敏;不少 HTTP 客户端会不小心记录完整 URL。若在 SOC 类控制下运营,热存储至少保留 30 天、冷存储 1 年。SSH 会话录屏仅用于应急账号;日常工程访问应依赖已评审的配置变更,而非现场粘贴密钥。
若 dev/stage/prod 各跑独立网关,为每环境划分独立钥匙串分区,切勿在主机间复制 ~/Library/Keychains 目录——macOS 可能判损坏或在无头节点 endless 弹窗。应逐项在新环境引导并在内网文档记录条目名,便于值班用 security find-generic-password -a service -s LABEL 验证存在性而不暴露字节。
租用云 Mac 上无头 macOS 的坑
云端 Mac 鲜有人在桌边点「始终允许」。首次钥匙串授权请通过 VNC 完成,日常再用 SSH 改配置。若多名工程师共享同一账户,ACL 边界模糊——应按环境拆分网关而非共享凭据。调试时需要人类可读环境变量,可用登出即删的 ramdisk 文件,避免使用部分镜像上重启后仍存在的 /tmp。
NodeMac 在香港、日本、韩国、新加坡与美国出租专用 Mac mini M4,同时提供 SSH 与 VNC——自动化走 SSH,TCC 弹窗走 VNC。把生产密钥隔离到与预发实验不同的主机时,可对照 区域定价 评估爆炸半径成本。在把保管库驱动的部署自动化到整队机器前,请先阅读 帮助文档 完成 SSH 密钥接入。
常见问题
密钥应与 LaunchAgent plist 放在同一 Git 仓库吗?
Plist 结构与结构化的非敏感键可以进版本库;敏感值永不——由连接保管库 API 的 CI 部署作业在安装时注入。
如何避免轮换密钥时 API 用量被双重计费?
在提供商控制台并行添加新旧密钥,部署带新钥匙串项的网关同时保持旧密钥有效,观察 24 小时健康流量后再撤销旧密钥。可避免午夜切换因包装脚本一处笔误而半途失败。
Mac mini M4 是 OpenClaw 处理密钥的扎实平台:Apple Silicon 适合高效常驻守护进程,原生钥匙串与服务身份结合,物理隔离减少虚拟化侧信道问卷里的杂音。NodeMac 在香港、日本、韩国、新加坡与美国提供带 SSH/VNC 的专用 Mac mini,让网关跑在可预期的裸金属上。按需租用使安全团队可在每区域克隆强化「密钥参考机」而无需一次性买满五机柜 Mac。
建议把网关进程用户与日常登录用户分离,并在变更评审中显式检查「谁可以读取 plist、谁可以 sudo 到服务账户」。将密钥项命名规范写进运维手册(例如按环境与提供商前缀),可在事故时快速判断缺失的是哪一类凭据,而不用全库导出比对。