关于 rekey
rekey 是用于轮换多个支持的服务商 API 密钥和令牌的命令行工具及 MCP 服务,可交付并验证新凭据后再停用旧凭据。它将登录凭据保存在操作系统密钥链中,且不会在 MCP 响应中返回密钥值。
主要功能
- 01轮换支持服务商的密钥
- 02将新凭据交付到配置的目标
- 03停用旧密钥前验证新凭据
- 04将登录信息保存在系统密钥链
- 05用 TOML 配置可重复的轮换任务
- 06MCP 写入操作需显式启用
适用场景
- 01将 GitLab 令牌轮换到 .env 文件
- 02把新密钥交付至 GitHub Actions 或 AWS SSM
- 03在脚本或 CI 中执行已配置的轮换
- 04让 MCP 客户端列出密钥但不暴露机密
MCP 相关
stdio MCP 服务默认提供只读的服务商、连接状态和密钥列表工具。轮换与停用操作需通过显式参数启用,密钥值不会返回给客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
rekey
通过一个命令行工具轮换各个提供商的 API 密钥和令牌:生成新密钥, 将其推送到所有使用它的地方,验证它,然后停用旧密钥。包含一个 MCP 服务。
只操作你管理的账户——每个提供商都使用你自己的凭据。
CLI — 将 GitLab 令牌直接轮换到 .env 文件中:

MCP — Claude 通过 rekey mcp 轮换同一个令牌;密钥
不会传给模型:

安装
适用于 macOS、Linux 和 Windows 的预构建二进制文件: Releases。
或使用 Rust(stable):
cargo install rekey
内置操作系统钥匙串支持(macOS Keychain、Windows Credential Manager、Linux Secret Service)。
快速开始
先用一次性 GitLab 令牌练习。以下所有命令都可以安全复制;将 28550311
替换为步骤 3 中你自己的 ID。
1. 创建一个用于轮换的一次性令牌。 在 GitLab → Access tokens 中,创建一个
名为 kr-test 的令牌(任意范围)。
2. 登录。 打开 GitLab 的令牌页面,并预先填好名称和 api 范围。
点击 Create token,然后将令牌粘贴回来(输入内容会隐藏)。
rekey login gitlab
Checking with GitLab…
✓ Logged in to GitLab as @you. Saved to your macOS Keychain.
rekey now works from any terminal — nothing to export.
3. 查找密钥 ID。
rekey list gitlab
ID NAME
28550267 rekey (signed in with this key)
28550311 kr-test
4. 将密钥轮换到 .env 文件中。 rekey 会显示计划并等待你确认。
rekey rotate gitlab 28550311 --dotenv /tmp/kr-test.env:KR_TEST_TOKEN
Here's what will happen:
1. GitLab replaces "kr-test" with a new token and immediately revokes the old one. This can't be undone.
2. The new token is saved to KR_TEST_TOKEN in /tmp/kr-test.env.
3. rekey checks that the new token works.
Go ahead? [Y/n] y
Rotating kr-test…
· Rotating (provider revokes old token immediately)…
· Updating 1 consumer(s)…
· Verifying new token…
✓ Rotated successfully.
New key id: 28550312
Updated: KR_TEST_TOKEN in /tmp/kr-test.env
Old token was revoked by the provider.
5. 检查并清理。
cat /tmp/kr-test.env # KR_TEST_TOKEN=glpat-…
rm /tmp/kr-test.env
然后在 GitLab 中删除 kr-test。
正式密钥: 不带参数运行 rekey rotate gitlab——你可以选择密钥和目标位置,并将其
保存到 rekey.toml,这样下次轮换只需一个命令。在脚本/CI 中:
rekey rotate gitlab 28550311 --dotenv .env --yes --no-input
命令
| 命令 | |
|---|---|
login [provider] | 打开提供商的令牌页面(GitLab 会预先填好内容),接收粘贴的令牌、验证令牌,并将其保存到操作系统钥匙串。使用 --url 指定可自托管的 GitLab / Datadog 站点。不指定提供商:显示状态。 |
logout <provider> | 移除已保存的凭据(不会撤销凭据)。 |
connect <provider> | 检查凭据和密钥管理访问权限。 |
list <provider> | 列出密钥。第 1 列是其他命令所需的 ID。 |
rotate <provider> [id] | 轮换一个密钥。 |
rotate-all <provider> | 轮换所有设置了目标位置的密钥。跳过当前用于登录的密钥。 |
retire <provider> [id] | 停用(在支持的情况下)或删除旧密钥。使用 --delete 删除已停用的密钥。 |
mcp | 通过 stdio 运行 MCP 服务。 |
全局选项:--config <path>、--no-input(不提示,直接失败)。
--yes 跳过确认。省略的参数会在 TTY 中提示输入。标志的顺序不限。stdout 仅输出
list 结果和 --print-secret 的值;
其他内容均输出到 stderr。
目标位置
如果新密钥没有至少一个目标位置,rotate 将拒绝启动。
| 标志 | 目标位置 |
|---|---|
--dotenv <path>[:VAR] | 在 .env 文件中设置 VAR。每个提供商都有默认 VAR;AWS 还会写入 AWS_ACCESS_KEY_ID。 |
--gh-secret <owner/repo>:<NAME> | 通过 gh(stdin)设置 GitHub Actions 密钥。 |
--ssm <name>:<region> | 通过 aws(stdin)设置 AWS SSM SecureString。 |
--secret-file <path> | 文件,权限模式为 0600。 |
--secret-dir <dir> | rotate-all:每个密钥写入一个权限模式为 0600 的文件。 |
--keychain | 操作系统钥匙串,服务为 rekey。 |
--print-secret | 输出到 stdout。 |
可重复使用的标志:--dotenv、--gh-secret、--ssm。
--delete-old-now 会在新密钥交付后立即删除旧密钥。
配置
./rekey.toml,然后是 ~/.config/rekey/config.toml。不包含
密钥。交互式 rotate 可以为你写入条目。
[[keys]]
provider = "gitlab"
name = "ci-deploy" # match on id, name and/or principal
consumers = [
{ type = "dot_env_file", path = ".env", variable = "GITLAB_TOKEN" },
{ type = "github_actions_secret", repo = "me/app", secret_name = "GITLAB_TOKEN" },
]
[[keys]]
provider = "aws"
principal = "ci-user" # IAM user; survives the new key id
consumers = [
{ type = "dot_env_file", path = ".env", variable = "AWS_SECRET_ACCESS_KEY", id_variable = "AWS_ACCESS_KEY_ID" },
{ type = "aws_ssm_parameter", name = "/ci/aws", region = "us-east-1" },
]
使用方类型:dot_env_file、github_actions_secret、aws_ssm_parameter、
file、keychain。对于每次轮换都会签发新 id 的提供方,请按 name/principal
匹配。相对路径以配置文件所在目录为基准解析。完整示例:
rekey.toml.example。
凭据
查找顺序:环境变量 → 已保存的登录信息(rekey login)→ 提示
(仅限 TTY,并提供保存选项)。绝不会通过标志传入。使用以下凭据登录的令牌轮换
(GitLab、Cloudflare)会更新已保存的登录信息。
REKEY_DISABLE_KEYCHAIN=1 会禁用钥匙串的读取/写入。
提供方
| 提供方 | 类型 | 轮换对象 | 凭据 | 备注 |
|---|---|---|---|---|
aws | 重叠 | IAM 访问密钥 | aws CLI 会话、AWS_PROFILE | 每位用户最多 2 个密钥;如果两个都存在则拒绝操作。旧密钥 → 停用。 |
gitlab | 原子 | 个人访问令牌 | GITLAB_TOKEN(api 范围)、GITLAB_URL、GITLAB_TOKEN_EXPIRY_DAYS | |
cloudflare | 原子 | 用户 API 令牌 | CLOUDFLARE_API_TOKEN(API Tokens:Edit) | 令牌 id 稳定不变。 |
datadog | 重叠 | API 密钥 | DD_API_KEY、DD_APP_KEY、DD_SITE | 无停用状态。 |
npm | 重叠 | 经典令牌 | npm CLI 会话、NPM_REGISTRY | 解析 CLI 输出;不支持细粒度令牌。 |
dockerhub | 重叠 | 个人访问令牌 | DOCKERHUB_USERNAME、DOCKERHUB_PASSWORD | 新令牌会获得 repo:read+repo:write。 |
openai | 重叠 | 组织管理员密钥 | OPENAI_ADMIN_KEY | |
anthropic | 手动 | — | ANTHROPIC_ADMIN_KEY | 没有创建 API;rotate 会打印 Console 操作步骤,retire 会停用密钥。 |
twilio | 重叠 | 标准 API 密钥 | TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN、TWILIO_API_USER | |
sendgrid | 重叠 | API 密钥 | SENDGRID_API_KEY | 复制旧密钥的范围。 |
github-app | 临时 | 安装令牌 | GITHUB_APP_ID、GITHUB_APP_PRIVATE_KEY_PATH 或 GITHUB_APP_PRIVATE_KEY | 令牌有效期约 1 小时;无需撤销。 |
AWS 需要 aws CLI,npm 需要 npm,--gh-secret 需要 gh。
想要支持其他提供方? 提出请求。
轮换语义
| 类型 | 顺序 | 失败处理 |
|---|---|---|
| 重叠 | 创建 → 验证 → 交付 → 停用旧密钥 →(删除旧密钥) | 验证失败或所有交付均失败:删除新密钥,不做任何更改。部分交付失败:两个密钥均保持有效,退出码为 1。 |
| 原子 | 轮换(旧密钥由提供方撤销)→ 交付 → 验证 | 不可逆。所有交付均失败:将密钥写入 rekey-rescue-*.secret(0600)。 |
| 临时 | 生成 → 验证 → 交付 | 旧令牌会自行过期。 |
| 手动 | — | 打印手动操作步骤。 |
如果不使用 --delete-old-now,没有停用状态的旧密钥会保持有效;
输出会提供 retire 命令。只要有事项需要处理,退出码就会非零。
MCP
rekey login gitlab
claude mcp add rekey -- rekey mcp --config ~/.config/rekey/config.toml
| 工具 | 启用方式 | |
|---|---|---|
list_providers、check_connection、list_keys | 默认 | 只读。 |
rotate_key | --allow-rotate | 仅交付到配置中的使用方。不接受目标参数。 |
retire_key | --allow-retire | 拒绝操作服务自身的登录密钥。 |
绝不会向客户端返回密钥值。凭据来自环境或已保存的登录信息。在 macOS 上安装新版本后, 请允许其访问钥匙串一次。
安全
- 密钥通过 stdin 传递给子进程,绝不会通过 argv 传递。
- rekey 创建的文件权限为 0600;保留现有
.env文件的权限; 写入操作是原子的。 - 仅在使用
--print-secret时打印密钥值。 - 请通过仓库的 Security 标签页私下报告漏洞。
参与贡献
- 新提供方或功能:创建议题。
- 代码:参见 CONTRIBUTING.md。提供方只需一个实现
Connectortrait 的文件。
Links
- crates.io: rekey
- MCP Registry name — mcp-name: io.github.Ezra-Black/rekey
Credits
Built by Ezra Black — ezrablack.dev.
License
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。