【免费下载链接】kr
DEPRECATED A dev tool for SSH auth + Git commit/tag signing using a key stored in Krypton.
kr 是一个 Krypton 开发工具,能让你的Git Commit / Tag 用存储在手机里的密钥完成 PGP 签名。本文带你完成 krgpg 签名工具的安装、配对接手机、验证签名的完整实战流程,私钥永不离开手机。
⚠️ 提示:该项目已标记 DEPRECATED,功能本身依旧完整可用,本文基于其源码整理,同样适合作为理解“手机密钥 + Git 签名”方案的参考。
一、kr 是什么?krgpg 又是谁?
- kr:命令行入口,负责配对接手机、管理本地 SSH Agent(
krd守护进程) - krgpg:兼容
gpg命令行的签名程序,Git 调用它时,它把“签名请求”转发到手机,由 Krypton App 决定是否放行 - krd:后台守护进程(SSH Agent),
krgpg的所有请求都经过它转发到手机 - krssh:SSH 认证入口,配合
kr sshconfig使用
一次签名的完整链路:
git commit -S ──▶ krgpg ──▶ krd 守护进程 ──▶ Krypton App(手机) │ 签名结果 ◀──────────────── 你按下“允许”📌 核心价值:私钥永远保存在手机里,电脑被拖库也拿不到密钥;每次签名都需要手机确认,签名即审计。
二、一键安装:三种方式任选其一
| 方式 | 命令 | 适合场景 |
|---|---|---|
| 官方脚本 | curl https://krypt.co/kr \| sh | 想最快上手 |
| 源码安装 | make install && make start | macOS 10.10+ / Linux 64位 |
| 只编译 | make | 只需二进制到bin/目录 |
从源码安装时,Makefile 会在install目标下把 4 个二进制文件装入系统路径:
make install # 安装 kr / krd / krssh / krgpg 到 PREFIX/bin make start # 注册并重启 krd 守护进程(macOS 会写入 LaunchAgent)📁 相关路径:
- 安装脚本入口:install/os.sh
- 源码构建说明:src/go.mod
三、配对接手机:kr pair
安装完成后执行:
kr pair终端会显示一个QR Code,用 Krypton 手机 App(iOS / Android)扫码确认即可。之后krd守护进程常驻,负责接收来自krgpg的签名请求。
📁 二维码实现:src/kr/qrcode.go
四、krgpg 签名工具一键配置:kr codesign
这是全文最关键的一步:
kr codesign执行后kr会自动完成所有配置,包括:
- 从手机拉取你的PGP 公钥(注意:签名用的是 PGP 公钥,不是 SSH 公钥)
- 写入 Git 全局配置
gpg.program指向krgpg的绝对路径 - 询问是否把公钥加入 GitHub(方便平台显示签名认证)
- 询问是否开启自动提交签名(写入
commit.gpgSign=true与tag.forceSignAnnotated=true) - 引导你在 shell 配置中写入
export GPG_TTY=$(tty)
📁 上述流程的核心逻辑:src/kr/kr_pgp.go
手动配置:等价命令详解
如果你想手动完成同样的事,对应命令如下:
# 1. 让 Git 用 krgpg 替代 gpg git config --global gpg.program "$(which krgpg)" # 2. 指定签名密钥(换成你 kr me pgp 输出的 KeyID) git config --global user.signingKey C2E6E330 # 3. 开启所有 commit 自动签名 git config --global commit.gpgSign true # 4. 标注 tag 强制签名 git config --global tag.forceSignAnnotated true上面 4 个 git 配置项的含义,项目内 gpg-notes.md 有完整说明。
别忘了:一行 shell 配置
为了让终端能显示 Krypton 的签名日志(“请求手机签名中 / 已允许”),在~/.bashrc或~/.zshrc中加入:
export GPG_TTY=$(tty)krgpg启动时会优先读取GPG_TTY环境变量把日志写到你的终端,逻辑见 src/krgpg/main.go。
五、实战测试:验证签名真的生效
最快的验证方式,让 kr 自己跑一遍:
kr codesign test它会在临时目录创建一个空仓库并执行git commit -S,成功会看到绿色的Codesigning successful ✔。
也可以在日常仓库里手动验证:
git commit -S -m "my signed commit" # 提交时手机会弹出确认 git verify-commit HEAD # 验证最近一次提交签名 git log --show-signature -1 # 查看签名详情签名成功时git log会显示类似gpg: Good signature from ...的绿标 ✅
六、krgpg 工作原理速览(读源码)
- 签名:Git 通过 stdin 把 commit 内容(
tree/parent/author/committer/message)喂给krgpg,它解析后构造GitSignRequest发给krd,手机放行后返回 ASCII Armor 签名,打印到 stdout —— 见 src/krgpg/main.go 的signGit() - Tag 签名:解析
object/type/tag/tagger结构后走同一链路,见signGitTag() - 优雅降级:请求失败且系统装有本地
gpg时,会自动回退到本地 gpg,保证提交不被卡死 - 守护进程请求:手机交互的协议实现位于 src/common/protocol/request.go,守护进程端在 src/daemon/control/server.go
七、常用命令速查表 📋
| 命令 | 作用 |
|---|---|
kr pair | 扫码配对接手机 |
kr codesign | 一键配置 Git 签名 |
kr codesign on/off | 开启 / 关闭自动 commit 签名 |
kr codesign test | 跑一次签名自测 |
kr me pgp | 打印你的 PGP 公钥 |
kr copy pgp | 复制 PGP 公钥到剪贴板 |
kr restart | 重启 krd 守护进程 |
kr sshconfig | 输出 SSH 代理配置(krssh 用) |
kr uninstall | 卸载 |
八、常见问题排查
| 现象 | 原因与解决 |
|---|---|
Could not connect to Krypton daemon | 守护进程没跑,执行kr restart |
签名请求被拒rejected | 手机侧点了拒绝;检查 Krypton App 通知权限 |
Could not find krgpg | 未安装完整,重新make install或官方脚本 |
| 终端看不到签名日志 | shell 配置缺少export GPG_TTY=$(tty),重启终端 |
| 手机上没有 PGP 公钥 | 提示升级 Krypton App 到最新版后重新kr pair --force |
九、总结
kr用手机里的密钥同时解决了两件事:SSH 认证 与 Git Commit/Tag 的 PGP 签名- 只需三步:安装 →
kr pair→kr codesign,之后git commit -S(或自动签名)即触发手机确认 krgpg的设计非常巧妙:它完全模拟gpg的 stdio 接口,所以 Git 无感知地就换上了手机密钥签名
🔑 一句话记住:私钥留在手机,签名请求走krgpg → krd → 手机,一次配置,处处安心签名。
【免费下载链接】kr
DEPRECATED A dev tool for SSH auth + Git commit/tag signing using a key stored in Krypton.
相关推荐
Git 提交签名实战:为 Git 配置 GPG 签名密钥并点亮 GitHub 的 Verified 标识
Git 提交签名实战:为 Git 配置 GPG 签名密钥并点亮 GitHub 的 Verified 标识 在 GitHub 上,我们经常能看到部分提交旁边带有绿
文档教程知识库三步永久保存微信聊天记录:留痕工具完整指南
三步永久保存微信聊天记录:留痕工具完整指南 在这个数字记忆时代,你是否担心重要的微信对话会随着手机更换或意外删除而永远消失?每一段聊天记录不仅是简单的文字交流,
android-sunflower中的多模块签名配置:签名密钥共享
android sunflower中的多模块签名配置:签名密钥共享 在Android项目开发中,多模块架构能有效提升代码复用和团队协作效率,但随之而来的签名配置
移动开发示例工程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考