140162f39a8f25317111cd815eb23f96d5970dc4
Some checks failed
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 2s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 29s
Secrets CLI - Build & Release / Build (aarch64-apple-darwin) (push) Successful in 45s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 1m18s
Secrets CLI - Build & Release / 发布草稿 Release (push) Successful in 2s
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
- 各 build job 超时 10→15min,publish-release 2→5min - 移除 build-macos/build-windows 的 if 条件,默认全平台构建 - 删除独立 notify job,在各 build job 内增加飞书单 job 通知 - 汇总通知并入 publish-release,用 needs 取状态不再调 API - publish-release 增加 if: always() 与 checkout 步骤 Made-with: Cursor
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 |
一级隔离,如 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 环境变量。
-- 查看最近 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:
# 需有 ~/.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。
Description
Releases
63
secrets-mcp 0.5.19
Latest
Languages
Rust
65.3%
HTML
30.3%
Shell
2%
Python
2%
JavaScript
0.4%