mcpField
R
rekey

rekey

本地服务
github.com安全22 周前更新

关于 rekey

rekey 是用于轮换多个支持的服务商 API 密钥和令牌的命令行工具及 MCP 服务,可交付并验证新凭据后再停用旧凭据。它将登录凭据保存在操作系统密钥链中,且不会在 MCP 响应中返回密钥值。

主要功能

  1. 01轮换支持服务商的密钥
  2. 02将新凭据交付到配置的目标
  3. 03停用旧密钥前验证新凭据
  4. 04将登录信息保存在系统密钥链
  5. 05用 TOML 配置可重复的轮换任务
  6. 06MCP 写入操作需显式启用

适用场景

  1. 01将 GitLab 令牌轮换到 .env 文件
  2. 02把新密钥交付至 GitHub Actions 或 AWS SSM
  3. 03在脚本或 CI 中执行已配置的轮换
  4. 04让 MCP 客户端列出密钥但不暴露机密

MCP 相关

stdio MCP 服务默认提供只读的服务商、连接状态和密钥列表工具。轮换与停用操作需通过显式参数启用,密钥值不会返回给客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargorekey0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

rekey

通过一个命令行工具轮换各个提供商的 API 密钥和令牌:生成新密钥, 将其推送到所有使用它的地方,验证它,然后停用旧密钥。包含一个 MCP 服务。

只操作你管理的账户——每个提供商都使用你自己的凭据。

CLI — 将 GitLab 令牌直接轮换到 .env 文件中:

rekey 从 CLI 轮换 GitLab 令牌

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

Claude 通过 rekey MCP 服务轮换 GitLab 令牌

安装

适用于 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 标签页私下报告漏洞。

参与贡献

Links

  • crates.io: rekey
  • MCP Registry name — mcp-name: io.github.Ezra-Black/rekey

Credits

Built by Ezra Black — ezrablack.dev.

License

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。