gpg: 由于缺少密钥,未检查 1 个签名

无法执行 sudo apt-get update 命令:
Ign:8 http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04  Release.gpg
Reading package lists... Done    
W: GPG error: http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04  Release: The following signatures were invalid: EXPKEYSIG 5A7D1D38BEB6D886 home:Horst3180 OBS Project <home:Horst3180@build.opensuse.org>
E: The repository 'http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04  Release' is not signed.

经过多次尝试,我得到了

1 signature not checked due to a missing key

我的尝试是:
sudo apt-key adv --keyserver hkp://keys.gnupg.net:80 --recv-keys 5A7D1D38BEB6D886
Executing: /tmp/apt-key-gpghome.f5yVraTkTa/gpg.1.sh --keyserver hkp://keys.gnupg.net:80 --recv-keys 5A7D1D38BEB6D886
gpg: key 5A7D1D38BEB6D886: 1 signature not checked due to a missing key
gpg: key 5A7D1D38BEB6D886: "home:Horst3180 OBS Project <home:Horst3180@build.opensuse.org>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1


我离目标更近了吗?其他无果的尝试包括:
  1. 这个命令

    wget -nv http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04/Release.key -O Release.key
    
    sudo apt-key add - < Release.key
    
  2. software.opensuse.org

    sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04/ /' > /etc/apt/sources.list.d/home:Horst3180.list"
    wget -nv https://download.opensuse.org/repositories/home:Horst3180/xUbuntu_16.04/Release.key -O Release.key
    sudo apt-key add - < Release.key
    
  3. 这个命令

    sudo rm /var/lib/apt/lists/* -vf
    
  4. 这个命令

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5A7D1D38BEB6D886
    

    返回结果

    执行中:/tmp/apt-key-gpghome.9tPKjtyC1E/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 5A7D1D38BEB6D886
    gpg: 密钥服务器接收失败: 没有可用的密钥服务器
    
请注意,在Horst3180's Home Project上,GPG密钥5A7D1D38BEB6D886的到期日期是2019-10-02,所以该密钥似乎已经失效了。

sudo chmod a+r /etc/apt/trusted.gpg.d/* - loop
3个回答

一般来说,如果gpg密钥过期了,当您不是存储库的所有者时,除了尝试联系管理员之外,您没有太多可以做的事情。
如果您信任此存储库,或确实需要其中的某些内容并且并不太在意此安全功能,则还可以通过将--allow-unauthenticated选项添加到apt-get中来跳过gpg检查。
示例:sudo apt-get --allow-unauthenticated updatesudo apt-get -y --allow-unauthenticated install foo
您还可以使用位于/etc/apt/apt.conf.d/目录下的自己的配置文件使此选项永久。在您的conf文件中,只需添加APT::Get::AllowUnauthenticated "true";标准节即可。
注意:如果选择永久选项,则应仔细添加选项,以便其仅对该特定存储库生效,而不是对每个其他存储库生效,因为这被认为是安全风险。

同样的错误也可能发生在密钥仍然有效的情况下。我有一个在一个Ubuntu机器上运行良好的Release.key,但在另一个系统上执行apt-key add Release.key时会出错。
 gpg: invalid key resource URL '/tmp/apt-key-gpghome.L3TpJ04C0i/isv:ownCloud:desktop.asc.gpg'
 gpg: keyblock resource '(null)': General error
 gpg: key 4ABE1AC7557BEFF9: 1 signature not checked due to a missing key
 gpg: key 4ABE1AC7557BEFF9: 1 signature not checked due to a missing key
 gpg: key 3B4FE6ACC0B21F32: 3 signatures not checked due to missing keys
 gpg: key D94AA3F0EFE21092: 3 signatures not checked due to missing keys
 gpg: key 871920D1991BC93C: 1 signature not checked due to a missing key
 gpg: Total number processed: 6
 gpg:       skipped new keys: 6

但是例如,gpg --import < Release.key会很好地导入密钥。(这是个好消息,但对apt没有帮助。)
手动解决方法(尽管无法使用已过期的密钥): cat Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/owncloud-test.gpg 之后,apt updateapt install ...可以成功进行,而不需要任何allow-unauthenticated的技巧。看来apt-key add在我的某些系统上过于挑剔。

你提到的错误是不同的。你的错误是关于一个"无效的密钥",而OP得到的是一个"丢失的密钥"。请参考以下链接:https://askubuntu.com/a/1247655/8698。尝试检查一下`/etc/apt/trusted.gpg.d/`目录中是否有除了你用`tee`创建的密钥之外的其他密钥,并删除它(可能还需要删除用`tee`创建的那个密钥)。然后再尝试添加它。该文件可能被称为`isv:ownCloud:desktop.asc`。 - Dan

你可以通过删除有问题的文件来解决这个问题。在我的情况下,错误是 gpg: invalid key resource URL '/tmp/apt-key-gpghome.HrtqocacFC/home:manuelschneid3r.asc.gpg'。简单地运行 sudo rm "/etc/apt/trusted.gpg.d/home:manuelschneid3r.asc" 就可以解决这个问题。