Go to file
voson 535683b15c
Some checks failed
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 3s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 1m17s
Secrets CLI - Build & Release / 通知 (push) Successful in 6s
Secrets CLI - Build & Release / 发布草稿 Release (push) Has been cancelled
Secrets CLI - Build & Release / Build (aarch64-apple-darwin) (push) Has started running
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
feat: 添加结构化日志与审计
- tracing + tracing-subscriber,全局 --verbose/-v 与 RUST_LOG 控制
- 新增 audit_log 表,add/update/delete 成功后自动写入审计记录
- 新增 src/audit.rs,审计失败仅 warn 不中断主流程
- 更新 README/AGENTS.md,补充 verbose、audit_log 说明
- .vscode/tasks.json 增加 verbose/update/audit 测试任务

Made-with: Cursor
2026-03-18 16:30:42 +08:00
2026-03-18 16:30:42 +08:00
2026-03-18 16:30:42 +08:00
2026-03-18 16:30:42 +08:00

secrets

跨设备密钥与配置管理 CLI基于 Rust + PostgreSQL 18。

将服务器信息、服务凭据统一存入数据库,供本地工具和 AI 读取上下文。

安装

cargo build --release
# 或从 Release 页面下载预编译二进制

配置数据库连接(首次使用需执行一次,之后在该设备上持久生效):

secrets config set-db "postgres://postgres:<password>@<host>:5432/secrets"

使用

# 查看版本
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=<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=<new-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 一级隔离,如 refiningricnsmart
kind 记录类型,如 serverservice(可自由扩展)
name 人类可读唯一标识
tags 多维标签,如 ["aliyun","hongkong"]
metadata 明文描述信息ip、desc、domains 等)
encrypted 敏感凭据ssh_key、password、token 等MVP 阶段明文存储,预留加密字段

-m / --meta 写入 metadata-s / --secret 写入 encryptedvalue=@file 从文件读取内容。

审计日志

addupdatedelete 操作成功后自动向 audit_log 表写入一条记录,包含操作类型、操作对象和变更摘要(不含 secret 值)。操作者取自 $USER 环境变量。

-- 查看最近 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-migratesecrets + 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/CDGitea Actions

推送 main 分支时自动fmt/clippy 检查 → musl 构建 → 创建 Release 并上传二进制。

首次使用需配置 Actions 变量和 Secrets

# 需有 ~/.config/gitea/config.envGITEA_URL、GITEA_TOKEN、GITEA_WEBHOOK_URL
./scripts/setup-gitea-actions.sh
  • RELEASE_TOKENSecretGitea PAT用于创建 Release 上传二进制
  • WEBHOOK_URLVariable飞书通知可选

详见 AGENTS.md

Description
Secrets management project
Readme 4 MiB
2026-04-10 17:14:37 +08:00
Languages
Rust 66%
HTML 29.5%
Shell 2.1%
Python 2%
JavaScript 0.4%