# secrets 跨设备密钥与配置管理 CLI,基于 Rust + PostgreSQL 18。 将服务器信息、服务凭据统一存入数据库,供本地工具和 AI 读取上下文。 ## 安装 ```bash cargo build --release # 或从 Release 页面下载预编译二进制 ``` 配置数据库连接(首次使用需执行一次,之后在该设备上持久生效): ```bash secrets config set-db "postgres://postgres:@:5432/secrets" ``` ## 使用 ```bash # 查看版本 secrets -V secrets --version # 查看帮助 secrets --help secrets -h # 查看子命令帮助 secrets help config secrets help add secrets help search secrets help delete secrets help update # 添加服务器 secrets add -n refining --kind server --name my-server \ --tag aliyun --tag shanghai \ -m ip=1.2.3.4 -m desc="My Server" \ -s username=root \ -s ssh_key=@./keys/my.pem # 添加服务凭据 secrets add -n refining --kind service --name gitea \ -m url=https://gitea.example.com \ -s token= # 搜索(默认隐藏敏感字段) secrets search secrets search -n refining --kind server secrets search --tag hongkong secrets search -q mqtt # 关键词匹配 name / metadata / tags secrets search -n refining --kind service --name gitea --show-secrets # 开启 debug 级别日志(--verbose / -v,全局参数) secrets --verbose search -q mqtt secrets -v add -n refining --kind service --name gitea -m url=xxx -s token=yyy # 或通过环境变量精细控制日志级别 RUST_LOG=secrets=trace secrets search # 增量更新已有记录(合并语义,记录不存在则报错) secrets update -n refining --kind server --name my-server -m ip=10.0.0.1 secrets update -n refining --kind service --name gitea --add-tag production -s token= secrets update -n refining --kind service --name mqtt --remove-meta old_port --remove-secret old_key # 删除 secrets delete -n refining --kind server --name my-server ``` ## 数据模型 单张 `secrets` 表,首次连接自动建表;同时自动创建 `audit_log` 表,记录所有写操作。 | 字段 | 说明 | |------|------| | `namespace` | 一级隔离,如 `refining`、`ricnsmart` | | `kind` | 记录类型,如 `server`、`service`(可自由扩展) | | `name` | 人类可读唯一标识 | | `tags` | 多维标签,如 `["aliyun","hongkong"]` | | `metadata` | 明文描述信息(ip、desc、domains 等) | | `encrypted` | 敏感凭据(ssh_key、password、token 等),MVP 阶段明文存储,预留加密字段 | `-m` / `--meta` 写入 `metadata`,`-s` / `--secret` 写入 `encrypted`,`value=@file` 从文件读取内容。 ## 审计日志 `add`、`update`、`delete` 操作成功后自动向 `audit_log` 表写入一条记录,包含操作类型、操作对象和变更摘要(不含 secret 值)。操作者取自 `$USER` 环境变量。 ```sql -- 查看最近 20 条审计记录 SELECT action, namespace, kind, name, actor, detail, created_at FROM audit_log ORDER BY created_at DESC LIMIT 20; ``` ## 项目结构 ``` src/ main.rs # CLI 入口(clap) config.rs # 配置读写(~/.config/secrets/config.toml) db.rs # 连接池 + auto-migrate(secrets + audit_log) models.rs # Secret 结构体 audit.rs # 审计日志写入(audit_log 表) commands/ add.rs # upsert config.rs # config set-db/show/path search.rs # 多条件查询 delete.rs # 删除 update.rs # 增量更新(合并 tags/metadata/encrypted) scripts/ seed-data.sh # 导入 refining / ricnsmart 全量数据 ``` ## CI/CD(Gitea Actions) 推送 `main` 分支时自动:fmt/clippy 检查 → musl 构建 → 创建 Release 并上传二进制。 **首次使用需配置 Actions 变量和 Secrets:** ```bash # 需有 ~/.config/gitea/config.env(GITEA_URL、GITEA_TOKEN、GITEA_WEBHOOK_URL) ./scripts/setup-gitea-actions.sh ``` - `RELEASE_TOKEN`(Secret):Gitea PAT,用于创建 Release 上传二进制 - `WEBHOOK_URL`(Variable):飞书通知,可选 详见 [AGENTS.md](AGENTS.md)。