git - 我可以用 keybase.io 签署 git 提交吗?
问题描述
我正在设置一台新机器,并且希望将密钥库用于各种 pgp 活动,例如签署提交。我可以运行类似的命令
$ keybase pgp sign -m foo > x
$ gpg --verify x 2>&1 | grep -oF 'Good signature'
Good signature
我可以直接用 gpg 签名,但让 keybase 管理它很方便。那么我能以某种方式让 git 使用 keybase 吗?
Git 配置似乎没有办法自定义它用来签署提交的 gpg 命令。您所能做的就是提供密钥。有什么办法吗?
解决方案
感谢Xavier 回答中的链接,我了解到我可以使用 gpg.program 配置覆盖 gpg 程序:
git config --global gpg.program /path/to/something
所以我可以用它来围绕keybase编写一个包装器。
但事实证明,git 对它的含义非常挑剔something
。Git 期望部分解析由--fd-status
标志产生的输出,这会导致在备用文件句柄处gpg
输出特殊状态代码。
幸运的是,至少在我第一次通过时,git 不会解析gpg 生成的所有内容,因此我能够模拟它。这是一个带有功能包装的要点,这是它的主要内容:
# Copy the commit message from stdin to a file.
d=$(mktmp -d "${TMPDIR:-/tmp}/gitsig.XXXXXXXXX")
cat > "$d/commit.msg"
# Have Keybase write the signature to another file.
keybase pgp sign --detached \
--key "$1" \
--infile "$d/commit.msg" \
--outfile "$d/commit.sig"
# Have gpg verify the signature right away.
# Capture its status in a file.
gpg --verify --status-fd=2 \
"$d/commit.sig" "$d/commit.msg" \
> /dev/null 2> "$d/gpgstatus.txt"
# Copy the KEY_CONSIDERED lines to stderr. Git wants that.
grep '^\[GNUPG:\] KEY_CONSIDERED' "$d/gpgstatus.txt" >&2
# Produce a minimal SIG_CREATED line to stderr. Git also wants that.
printf '[GNUPG:] SIG_CREATED ' >&2
推荐阅读
- cassandra - 错误:解析块映射时;预期的
,但在 cassandra.yaml 文件中找到了 BlockMappingStart - javascript - 将异步初始状态传递给 useReducer 并返回 undefined
- javascript - 从另一个插件扩展插件 javascript 文件
- sql-server - 根据转换表使用 where 语句进行 SQL Server 查询
- java - 随机页数后如何用PDFBox拆分PDF?
- android - 工具栏 TitleTextColor 在暗模式下没有变化
- neo4j - 使用关系约束过滤全文搜索
- amazon-web-services - 在 Elastic Beanstalk EC2 上使用 EBS 卷的问题
- flutter - 带有扩展/灵活小部件的行,看起来不像预期的那样
- javascript - 将 componentWillMount 替换为将在子组件生命周期之前运行的方法