V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mamili
V2EX  ›  问与答

求助! GPG 报错: No secret key

  •  
  •   mamili · 2021-06-18 22:14:13 +08:00 · 1225 次点击
    这是一个创建于 1042 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在给虚拟机里面的 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 用户有关吗?

    8 条回复    2021-06-19 20:56:25 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-06-18 22:19:46 +08:00 via Android
    巧了,我最近也刚搞这个 gpg,写了个脚本,可以参考看看,
    别的我也不懂,只是勉强写了个能用的脚本,
    https://www.notion.so/aoeiuv020/gpg-3ec3225e28f3432c8bdb784435307ed7
    AoEiuV020
        2
    AoEiuV020  
       2021-06-18 22:35:09 +08:00 via Android
    对了,--list-keys 列出的是公钥,签名要的是私钥,
    而且不要 sudo,免得搞乱文件权限,签名是生成在家目录的,全程不 sudo 就能保证自己有权限,
    dingwen07
        3
    dingwen07  
       2021-06-18 22:36:02 +08:00 via iPhone
    确认你 git 用的 gpg binary 是你导入了私钥的 gpg binary
    Mac 用户在用了 gpg tools 之后有可能出现
    mamili
        4
    mamili  
    OP
       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
        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 好用,
    mamili
        6
    mamili  
    OP
       2021-06-19 20:22:43 +08:00
    @AoEiuV020 应该和权限有关,我用 root 账户重新运行这些命令是全部成功了。提交之后也有 verified 标签。
    用你的方法也试过了,同样的错误,我感觉是 git 调用 gpg 的时候,没有 sudo 导致失败。
    这里还没太搞清楚,我已经把 gpg 都 chown,chgrp 成自己的用户了,但也没效果,不知道该怎么排查下去了...
    AoEiuV020
        7
    AoEiuV020  
       2021-06-19 20:37:38 +08:00 via Android   ❤️ 1
    @mamili 感觉是你已经在家目录创建了 root 权限的文件了,以后你自己已经没有权限使用你自己的 gpg 密钥了,这肯定不行的,以后 comnit 也 sudo 就进一步污染 git 文件了,
    gpg 主要文件都在~/.gnupg
    检查一下里面应该有 root 权限的文件,owner 全改成自己应该就不需要 sudo 了,
    sudo chown -R user:user ~/.gnupg
    mamili
        8
    mamili  
    OP
       2021-06-19 20:56:25 +08:00
    @AoEiuV020 搞定了,谢谢老哥帮助。
    是权限混乱导致的,昨天运行命令的时候没有注意不要用 sudo,导致~/.gnupg 里面的权限混乱。
    网上一顿查一顿绕之后就完全搞不清楚了,刚才全部删掉重建了。新建出来的权限就正常了,后续使用也没问题了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1590 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:59 · PVG 00:59 · LAX 09:59 · JFK 12:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.