求助! GPG 报错: No secret key

2021-06-18 22:14:13 +08:00
 mamili

在给虚拟机里面的 git 加 GPG,想要提交代码到 github 的时候有 verified 标签。 按照网上的教程生成 GPG 私钥对之后,git commit 就一直报错:gpg: skipped "8xxx": No secret key

使用的命令如下:

$ gpg --full-generate-key
$ git config --global user.signingkey 8xxx
$ git commit -S -m "..."

然后就报错

gpg: skipped "8xxx": No secret key
gpg: signing failed: No secret key

系统: Ubuntu 18.04.5 LTS

GPG: gpg (GnuPG) 2.2.4 libgcrypt 1.8.1


网上找了一圈方法都不好使,加了 GIT_TRACE 之后是这样:

$ GIT_TRACE=1 git commit -S -m "..."
22:03:26.309439 git.c:344               trace: built-in: git commit -S -m ...
22:03:26.310704 run-command.c:646       trace: run_command: /usr/bin/gpg --status-fd=2 -bsau 8xxx
error: gpg failed to sign the data
fatal: failed to write commit object


$ gpg -bsau 8xxx
gpg: skipped "8xxx": No secret key
gpg: signing failed: No secret key

看报错好像是没有这个密钥,但是确实是生成了:

$ sudo gpg --list-keys
gpg: WARNING: unsafe ownership on homedir '/home/ray/.gnupg'
/home/ray/.gnupg/pubring.kbx
----------------------------
pub   rsa3072 2021-06-18 [SC]
      8xxx
uid           [ultimate] xxx
sub   rsa3072 2021-06-18 [E]

和我用的不是 root 用户有关吗?

1244 次点击
所在节点    问与答
8 条回复
AoEiuV020
2021-06-18 22:19:46 +08:00
巧了,我最近也刚搞这个 gpg,写了个脚本,可以参考看看,
别的我也不懂,只是勉强写了个能用的脚本,
https://www.notion.so/aoeiuv020/gpg-3ec3225e28f3432c8bdb784435307ed7
AoEiuV020
2021-06-18 22:35:09 +08:00
对了,--list-keys 列出的是公钥,签名要的是私钥,
而且不要 sudo,免得搞乱文件权限,签名是生成在家目录的,全程不 sudo 就能保证自己有权限,
dingwen07
2021-06-18 22:36:02 +08:00
确认你 git 用的 gpg binary 是你导入了私钥的 gpg binary
Mac 用户在用了 gpg tools 之后有可能出现
mamili
2021-06-19 10:09:38 +08:00
@AoEiuV020 但是不 sudo 的话,gpg --full-generate-key 就会报错,最终停止在:
gpg: agent_genkey failed: Operation cancelled
Key generation failed: Operation cancelled
不知道你有没有遇到过
AoEiuV020
2021-06-19 11:08:20 +08:00
@mamili 主动 ctrl-c 才有这个报错吧,
创建密钥需要随机数,如果卡住了就甩甩鼠标滚滚键盘,不要 ctrl-c,
而且我脚本里的 gpg --default-new-key-algo rsa4096 --batch --gen-key .gpgbatch,比交互式的 full-generate-key 好用,
mamili
2021-06-19 20:22:43 +08:00
@AoEiuV020 应该和权限有关,我用 root 账户重新运行这些命令是全部成功了。提交之后也有 verified 标签。
用你的方法也试过了,同样的错误,我感觉是 git 调用 gpg 的时候,没有 sudo 导致失败。
这里还没太搞清楚,我已经把 gpg 都 chown,chgrp 成自己的用户了,但也没效果,不知道该怎么排查下去了...
AoEiuV020
2021-06-19 20:37:38 +08:00
@mamili 感觉是你已经在家目录创建了 root 权限的文件了,以后你自己已经没有权限使用你自己的 gpg 密钥了,这肯定不行的,以后 comnit 也 sudo 就进一步污染 git 文件了,
gpg 主要文件都在~/.gnupg
检查一下里面应该有 root 权限的文件,owner 全改成自己应该就不需要 sudo 了,
sudo chown -R user:user ~/.gnupg
mamili
2021-06-19 20:56:25 +08:00
@AoEiuV020 搞定了,谢谢老哥帮助。
是权限混乱导致的,昨天运行命令的时候没有注意不要用 sudo,导致~/.gnupg 里面的权限混乱。
网上一顿查一顿绕之后就完全搞不清楚了,刚才全部删掉重建了。新建出来的权限就正常了,后续使用也没问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784365

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX