☰
如何用 kr 让 Git Commit 带上手机密钥签名:krgpg 签名工具配置实战
2026/10/17 16:09:43 网站建设 项目流程

【免费下载链接】kr

DEPRECATED A dev tool for SSH auth + Git commit/tag signing using a key stored in Krypton.

项目地址:https://gitcode.com/gh_mirrors/kr/kr
点击查看免费下载

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 startmacOS 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会自动完成所有配置,包括:

  1. 从手机拉取你的PGP 公钥(注意:签名用的是 PGP 公钥,不是 SSH 公钥)
  2. 写入 Git 全局配置gpg.program指向krgpg的绝对路径
  3. 询问是否把公钥加入 GitHub(方便平台显示签名认证)
  4. 询问是否开启自动提交签名(写入commit.gpgSign=true与tag.forceSignAnnotated=true)
  5. 引导你在 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.

项目地址:https://gitcode.com/gh_mirrors/kr/kr
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询