在给虚拟机里面的 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 用户有关吗?
1
AoEiuV020 2021-06-18 22:19:46 +08:00 via Android
巧了,我最近也刚搞这个 gpg,写了个脚本,可以参考看看,
别的我也不懂,只是勉强写了个能用的脚本, https://www.notion.so/aoeiuv020/gpg-3ec3225e28f3432c8bdb784435307ed7 |
2
AoEiuV020 2021-06-18 22:35:09 +08:00 via Android
对了,--list-keys 列出的是公钥,签名要的是私钥,
而且不要 sudo,免得搞乱文件权限,签名是生成在家目录的,全程不 sudo 就能保证自己有权限, |
3
dingwen07 2021-06-18 22:36:02 +08:00 via iPhone
确认你 git 用的 gpg binary 是你导入了私钥的 gpg binary
Mac 用户在用了 gpg tools 之后有可能出现 |
4
mamili OP @AoEiuV020 但是不 sudo 的话,gpg --full-generate-key 就会报错,最终停止在:
gpg: agent_genkey failed: Operation cancelled Key generation failed: Operation cancelled 不知道你有没有遇到过 |
5
AoEiuV020 2021-06-19 11:08:20 +08:00 via Android
@mamili 主动 ctrl-c 才有这个报错吧,
创建密钥需要随机数,如果卡住了就甩甩鼠标滚滚键盘,不要 ctrl-c, 而且我脚本里的 gpg --default-new-key-algo rsa4096 --batch --gen-key .gpgbatch,比交互式的 full-generate-key 好用, |
6
mamili OP @AoEiuV020 应该和权限有关,我用 root 账户重新运行这些命令是全部成功了。提交之后也有 verified 标签。
用你的方法也试过了,同样的错误,我感觉是 git 调用 gpg 的时候,没有 sudo 导致失败。 这里还没太搞清楚,我已经把 gpg 都 chown,chgrp 成自己的用户了,但也没效果,不知道该怎么排查下去了... |