我做了一个开发者 API Key 保险箱,再也不怕密钥乱飞了

0 阅读4分钟

标签:CLI工具 · 开发工具 · 安全 · Rust · 开源

背景:你的密钥现在在哪?

做了几年开发,积累了一堆 API Key:

OPENAI_API_KEY=sk-xxx
GITHUB_TOKEN=ghp_xxx
CLOUDFLARE_API_TOKEN=xxx
STRIPE_SECRET_KEY=sk_live_xxx

它们分散在:

  • 10 个项目的 .env 文件里
  • Notion 某个角落的笔记里
  • iMessage 发给自己的消息里
  • 甚至直接硬编码在某个早期项目里……

换了新电脑?去翻旧备份。密钥过期了?不知道是哪个项目在用。.env 文件不小心提交到了 Git?凌晨两点改密码。

这个痛点困扰了我很久,直到我做了 keyflow


keyflow 是什么

一个本地优先的开发者密钥管理器:

  • AES-256-GCM 加密存储,主密码不落盘
  • 项目感知:自动识别当前目录属于哪个项目,kf run 只注入相关的 key
  • MCP 集成:Claude、Cursor 等 AI 工具可以直接读取密钥(只暴露元数据,不暴露值)
  • 云同步:端到端加密,服务端看不到明文
  • 跨平台:macOS / Linux / Windows

5 分钟上手

安装:

# macOS(推荐)
brew install nianyi778/keyflow/keyflow

# 或通过 cargo
cargo install keyflow

初始化:

kf init
# 按提示设置主密码,vault 创建完成

添加密钥:

kf add OPENAI_API_KEY "sk-xxxxx"
kf add GITHUB_TOKEN "ghp_xxxxx" --project my-app
kf add STRIPE_SECRET_KEY --paste  # 直接从剪贴板读取,值不经过 shell history

使用密钥:

# 查看值
kf get OPENAI_API_KEY

# 注入到命令运行(最常用)
kf run -- npm start
kf run -- python main.py
kf run -- docker compose up

# 复制到剪贴板
kf get OPENAI_API_KEY --copy

几个我最喜欢的功能

1. 自动项目识别

kf run 会读取当前目录的 package.jsonCargo.toml,自动匹配 --project 标签,只注入相关的 key。不会把 Stripe 的生产密钥注入到个人实验项目里。

# 在 my-app 目录下
kf run -- npm start
# 只注入 --project my-app 的密钥

# 想注入全部
kf run --all -- npm start

2. MCP 集成(AI 编程提效)

配置一次,Claude Code / Cursor / Windsurf 就能感知你的密钥库:

kf setup claude    # 自动写入 Claude Code 的 MCP 配置
kf setup cursor    # 自动写入 Cursor 配置
kf setup --all     # 一次配置所有检测到的工具

配置完后,AI 工具知道你有哪些 key、属于哪些项目——不用每次手动粘贴环境变量,让 AI 帮你写代码时它自己知道调用什么。

3. 云同步 + 冲突策略

在公司电脑和家里电脑之间同步,端到端加密:

kf sync init   # Google 登录授权(只做一次)
kf sync run    # 双向同步

同步遇到两端都修改了同一个 key?v0.7.0 新增了冲突解决策略,不再无脑覆盖:

kf sync pull --strategy ask     # 有冲突时逐条让你选
kf sync pull --strategy local   # 本地优先
kf sync pull --strategy cloud   # 云端优先(默认)

交互式选择长这样:

⚡ Conflict: OPENAI_API_KEY
  Local  (2025-03-30 10:00):  sk-ab••••yz
  Cloud  (2025-03-31 09:15):  sk-NE••••bc
Keep [l]ocal / [c]loud / [s]kip?

4. 健康检查

kf health

一眼看出哪些 key 即将过期、多久没用过、没有绑定项目——做密钥审计再也不用翻 .env

5. 一键升级

kf upgrade
# 自动检测安装方式(Homebrew / cargo),找到就升级

安全设计

几个容易忽略但很重要的细节:

主密码不落盘 只缓存在内存,进程结束或 kf lock 后立即清除。

kf lock  # 立即清除缓存,下次操作重新输入密码

sync 双重加密 push 到云端前,数据会用主密码加密一次,再用独立的 sync_salt 加密一次。即使服务器被攻破,攻击者拿到的是双重密文。

MCP 只暴露元数据 AI 工具通过 MCP 只能知道你有 OPENAI_API_KEY、它属于哪个项目、什么时候创建的——拿不到值本身。

冲突日志脱敏 sync-conflicts.jsonl 里存的是 sk-ab••••yz 这样的 masked 值,不存完整密钥,.jsonl 文件不会成为新的泄露点。


对比同类工具

keyflow1Password CLIdotenv-vaultdirenv
本地优先❌(云服务)
完全免费开源有限制
MCP 集成
项目感知注入
云同步
加密存储

技术栈

用 Rust 写的,单二进制,无运行时依赖:

  • 加密aes-gcm + argon2(AES-256-GCM + Argon2id)
  • 存储:SQLite(rusqlite,bundled 模式,零安装)
  • CLIclap v4 derive 模式
  • 云同步:Cloudflare Workers(可自托管)

release 包大小约 2-3MB,启动时间 < 10ms。


未来计划

  • Web UI(可视化管理密钥)
  • 团队共享 vault
  • 更多 AI 工具集成(Gemini CLI、OpenCode 等)
  • 密钥自动轮换提醒

在哪里找到它

brew install nianyi778/keyflow/keyflow
kf init

如果你也被散落的 .env 文件折磨过,欢迎试试。Star、Issue、PR 都欢迎——因为信任所以简单。