修复了丢失的GPG密钥Apt存储库错误(NO_PUBKEY)

GPG公钥丢失错误(“ NO_PUBKEY”)在运行时可能显示在Debian,Ubuntu或Linux Mint上 apt update / apt-get update。如果添加存储库而忘记添加其公共密钥,或者在尝试导入GPG密钥时收到临时密钥服务器错误,则会发生这种情况。

何时运行 apt update / apt-get update尝试更新软件源或使用某些GUI工具时,apt抱怨它无法下载所有存储库索引,并显示类似于以下内容的错误:

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://ppa.launchpad.net/linuxuprising/apps/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EA8CACC073C3DB2A

W: Failed to fetch http://ppa.launchpad.net/linuxuprising/apps/ubuntu/dists/bionic/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EA8CACC073C3DB2A

W: Some index files failed to download. They have been ignored, or old ones used instead.

这只是一个例子。在所有存储库中不仅会出现Launchpad PPA存储库,还会在Google,Vivaldi,Node.js等提供的存储库中发生此错误。
该错误消息表明不会更新存储库,并且将使用以前的索引文件。这意味着您不能从该存储库导入更新,因此需要导入公共GPG密钥来解决此问题。这是 The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ... 错误。 Debian,Ubuntu,Linux Mint,流行!它应该可以在_OS,Elementary OS和其他基于Debian或Ubuntu的Linux发行版上运行。
如果您只缺少一个GPG公共存储库密钥,那么Ubuntu / Linux Mint / Pop!您可以通过在_OS / Debian系统上运行此命令来解决此问题。

sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys THE_MISSING_KEY_HERE

需要更换 THE_MISSING_KEY_HERE 没有GPG密钥。该密钥将出现在NO_PUBKEY之后的apt更新/ apt-get更新日志中。例如,在上面的错误消息中,此命令不需要使用GPG密钥。 EA8CACC073C3DB2A
请参阅:“无法获取锁/ var / lib / dpkg /锁打开(11个资源暂时不可用)”错误解决方案2:批量导入所有缺少的GPG密钥。
如果缺少多个OpenPGP公钥,则可以使用此单行代码一次将其全部导入。

sudo apt update 2>&1 1>/dev/null | sed -ne 's/.*NO_PUBKEY //p' | while read key; do if ! [[ ${keys[*]} =~ "$key" ]]; then sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys "$key"; keys+=("$key"); fi; done

您不需要更改任何命令。只是运行它。这也可以修复单个丢失的GPG密钥,但有点冗长。但是,它可以与任意数量的丢失的GPG密钥一起使用。
命令执行 sudo apt update 更新软件源并检测丢失的GPG密钥。 hkp://pool.sks-keyservers.net:80 作为那个服务器。由于此服务器与许多其他服务器连续同步,因此您需要更新的密钥。如果需要,可以使用其他服务器。
此命令还使用数组保存已导入密钥的丢失的GPG密钥。没有它,密钥导入命令将为每个丢失的密钥运行两次。
您可能也有兴趣:如何使用GUI(和公共)在Linux上创建PGP密钥

Sidebar