我可以使用keybase.io签署git提交吗?

6

我正在设置一台新机器,希望使用Keybase进行各种PGP活动,例如签名提交。我可以运行以下命令:

$ keybase pgp sign -m foo > x
$ gpg --verify x 2>&1 | grep -oF 'Good signature'
Good signature

我可以直接使用gpg签署文件,但让keybase管理这个过程更方便。所以我能不能让git使用keybase呢?

Git配置似乎没有办法自定义用于签署提交的gpg命令。您只能提供密钥。有没有办法做到这一点?


当 Zoom 收购 Keybase 后,我停止使用它了。如果你想托管你的代理并使用 Git,请访问 https://github.com/woss/git-pgp-remote-sign。 - woss
2个回答

3
感谢Xavier's answer中的链接,我了解到可以通过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

太棒了,你做到了这一点!话虽如此,通过向我展示直接使用Keybase签名所需的复杂且脆弱的解决方案,你已经说服我只使用gnupg :) - Dav Clark

1

这告诉我有一个gpg.program,非常有帮助。然而,覆盖此程序并不容易,因为在版本2.10中,git实现了对gpg --status-fd的支持,它优先于gpg的unix退出状态。不幸的是,我还没有找出git期望gpg给出的魔法状态输出以接受签名输出。这可能需要一些时间... - kojiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接