SuperAPI AI 工具集

agenix-secrets

部署与运维

查看项目

更新于 10-15 21:36

技能介绍

用途:在 NixOS dotfiles 中创建、编辑并接入 agenix 加密密钥,处理 API key、token、凭据、密码等敏感值。

主要能力:密钥文件布局按 hosts/<host>/secrets/ 与 hosts/shared/secrets/ 组织,secrets.nix 负责公钥到 .age 文件的映射;modules/agenix.nix 会从 secrets.nix 自动生成 age.secrets,每条 "name.age" 变成 age.secrets.<name>(去掉 .age 后缀),默认 owner 为 config.user.name(mkDefault 可覆盖),默认文件指向 hosts/<host>/secrets/<name>.age,激活时解密到 /run/agenix/<name>。<name> 默认无需手动设 age.secrets.<name>.file,仅当默认用户不应拥有时才覆盖 owner/group/mode。

用法:新增密钥时先在 secrets.nix 添加条目,需要用户公钥(用于加密/编辑)和主机公钥(用于部署时解密)两类 key。创建加密文件需进入 hosts/<host>/secrets,用 printf 管道配合 age -r 指定各接收者公钥输出 .age;非交互 shell 下 agenix -e 会失败,应直接用 age -r。引用时常用 services.myapp.environmentFile = config.age.secrets.my-secret.path;不同用户运行的服务需覆盖 owner/group。部署时按目录暂存,例如 git add hosts/<host>/secrets/,再提交推送;注意沙箱会阻止显式引用 .age 路径的 git add。更新已有 .age 采用解密、修改、重新加密流程,完成后清理临时文件并验证。

适用场景:NixOS 模块的密钥接入、服务环境文件、Home Assistant 的 !secret 引用(配合 owner 覆盖与 tmpfiles 软链 secrets.yaml)、1Password 与 agenix 双存储的登录凭据等。

限制与注意:不要把密钥路径交给 builtins.readFile,否则明文会泄露到全局可读的 Nix store;publicKeys 漏掉主机公钥会导致目标机无法解密;owner 设置错误服务无法读取 /run/agenix/<name>;共享密钥需同时在 hosts/shared/secrets/secrets.nix 与 host-keys.nix 中登记。公钥应从 secrets.nix 读取,不要硬编码;服务用户名通常与服务名一致,可用 grep 在目标机 systemd 配置中确认。