【发布时间】:2018-12-14 05:53:23
【问题描述】:
我一直在尝试让git 使用gpg 键,经过大量搜索和阅读帖子后,唯一对我有用的是:
sudo rm /usr/local/bin/gpgsm
ln -s /usr/local/bin/gpg /usr/local/bin/gpgsm
这会欺骗git 运行gpg 命令而不是gpgsm 命令,如下所示:
GIT_TRACE=1 git commit -S -m"test"
21:24:25.489158 git.c:418 trace: built-in: git commit -S -mtest
21:24:25.493338 run-command.c:643 trace: run_command: gpgsm --status-fd=2 -bsau myKey
error: gpg failed to sign the data
fatal: failed to write commit object
我找不到任何关于为什么 git 正在运行 gpgsm 命令的其他信息,因为单独运行该命令会产生:
gpgsm --status-fd=2 -bsau myKey
gpgsm: can't sign using 'myKey': No public key
[GNUPG:] INV_SGNR 1 myKey
[GNUPG:] INV_RECP 1 myKey
当我读到gpg 和gpgsm 的数据库是分开的时,这似乎是有道理的。
gpgsm 键似乎也不是git 想要使用的,这取决于它们对 CN 和 DNS 条目的需求。很高兴在这里显示错误,因为我不想使用我的符号链接黑客。
环境详情:
- gpg 通过自制软件安装,版本
2.2.11 - 将
no-tty添加到~/.gnupg/gpg.conf实际上让我的情况变得更糟。 - 我已在更改后重新启动以确保 gpg 代理停止运行。
-
~/.gnupg/gpg-agent.conf的内容为:pinentry-program /usr/local/bin/pinentry
【问题讨论】:
-
您的目标是使用 OpenPGP(默认的
gpg二进制文件)还是 CMS(gpgsm二进制文件)?另外,您使用的是哪个 Git 版本? -
我想使用
gpg,因为这似乎是 github 支持的,尽管我假设它不支持gpgsm可能是不正确的。我愿意使用任何让我到达不需要符号链接黑客的地方的东西。我的 git 版本是2.20.0。 -
如果你使用普通的
gpg二进制文件(没有符号链接破解),你会得到什么输出?另外,如果你运行touch /tmp/foo && gpg --status-fd=2 -bsa /tmp/foo来签署一个空文件,你会用真正的 gpg 得到什么输出? -
对格式错误表示歉意。输出:
gpg gpg: WARNING: no command supplied. Trying to guess what you mean ... gpg: Go ahead and type your message ...第二条命令:touch /tmp/foo && gpg --status-fd=2 -bsa /tmp/foo [GNUPG:] KEY_CONSIDERED FC660649664B0D5D12EE7B63B209F8077D754B33 0 [GNUPG:] KEY_CONSIDERED FC660649664B0D5D12EE7B63B209F8077D754B33 2 [GNUPG:] BEGIN_SIGNING H8 [GNUPG:] PINENTRY_LAUNCHED 2111 curses 1.1.0 /dev/ttys006 xterm- 256color - [GNUPG:] SIG_CREATED D 1 8 00 1545082985 FC660649664B0D5D12EE7B63B209F8077D754B33