如何修复丢失的GPG密钥?


154

我刚刚安装了Ubuntu 12.04,并添加了一些仓库,当我这样做时apt-get update,我缺少了gpg密钥。

以下命令似乎对我不起作用:

apt-get update 2> /tmp/keymissing; for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); do echo -e "\nProcessing key: $key"; gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add -; done

如何解决这个问题?


1
如果对这个问题的回答包括为什么首先发生此错误,以及将来如何避免该错误,那将是很好的。
Flimm

我使用Y-ppa-manager解决了我的问题。感谢Ashu提供解决方案!


Answers:


222

我喜欢这个解决方案,从Ubuntu密钥服务器重新下载缺少的密钥。

对于Ubuntu

就我而言

 Reading package lists... Done  
 W: GPG error: http://ppa.launchpad.net precise 
 Release: The following signatures couldn't be verified because the public key is not available: 
 NO_PUBKEY 2EA8F35793D8809A

这是添加错误消息中提到的丢失密钥的命令。

sudo apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 2EA8F35793D8809A

因此,我拿走了丢失的钥匙,2EA8F35793D8809A并要求keyserver.ubuntu.com将其添加到我在apt中拥有的钥匙列表中。

对于linux mint
您的关键服务器略有不同keyserver.linuxmint.com

sudo apt-key adv --recv-key --keyserver keyserver.linuxmint.com "missing key"

替代密钥服务器尝试
keyserver.ubuntu.com



5
这样做有任何安全隐患吗?我基本上只是通过http下载公钥,对吗?
2014年

1
@iamcreasy,为了向Ubuntu安装证明您正在安装的软件包是安全的并且没有恶意软件,每个软件包都由ubuntu密钥服务器签名。因此,安装程序会检查您要安装的软件包是否来自受信任的经过验证的来源。我还没有找到任何非常好的文档,但这可能会有所帮助[gpg doc](help.ubuntu.com/community/…
nelaaro 2015年

1
我创建了一个函数,可以添加所需的键 adkeys (){ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "$1";}并删除重复的或有问题的键,我可以这样做:grep -ril "pattern" /etc/apt | sudo xargs rm -f
SergioAraujo 2015年

1
我推荐--keyserver ha.pool.sks-keyservers.net。这是密钥服务器的高可用性池,大大增加了获取所需密钥的机会。
罗宾像那只鸟

21

有一个名为的软件,Y PPA manager它可以帮助修复GPG密钥错误。
Y PPA经理

安装 -

sudo add-apt-repository ppa:webupd8team/y-ppa-manager  
sudo apt-get update  
sudo apt-get install y-ppa-manager    

安装完成后,请转到advance并选择“导入所有缺少的GPG密钥”


2
您必须在此命令中添加sudo!sudo apt-get...
2012年

这也对我有用,Y PPA Manager简洁易用的界面让我印象深刻,这是一个不错的发现,谢谢Ashu。
CoalaWeb 2013年

我照你说的做了,但是什么也没发生。我的意思是我无法在菜单中的任何位置找到该应用程序。
克里斯蒂安娜·尼古拉

@CristianaNicolae安装后,可以在“应用程序”>“系统工具”下找到Y PPA Manager。
阿舒(Ashu)

抱歉,Ashu,我已经检查并再次检查。我仍然在那里看不到它。它似乎安装在系统中的某个位置,但是由于某些原因,它没有显示在菜单中的任何位置。
克里斯蒂安娜·尼古拉

14

使用自动下载功能apt-key adv --recv-keys可能无法在防火墙后使用。

在这种情况下,请在Web浏览器中打开Ubuntu Key Server的网页并搜索字符串0x<hexadecimal code of your missing key>

打开“ 发布”部分中的链接。将关键内容(从-----BEGIN PGP PUBLIC KEY BLOCK----------END PGP PUBLIC KEY BLOCK-----)保存为文件。

然后运行:

sudo apt-key add <file-with-saved-key>

来源:http : //opensourceforgeeks.blogspot.in/2013/04/w-gpg-error-httpppalaunchpadnet-precise.html


12

首先在终端输入以下命令

 sudo rm /var/lib/apt/lists/* -vf

然后在终端中输入以下命令来更新系统

 sudo apt-get update && sudo apt-get upgrade

在此之后,应该没有错误,并且一切都应该正常工作。


谢谢。我的问题的sollution是preety简单得多:类型 sudo su上方输入我的命令之前

虽然这会对您有所帮助,sudo su但绝不是正确的方法-在这种情况下sudo -s,它可以满足您的需求。
guntbert

我认为您是说sudo rm /var/lib/apt/lists/* -rf(选项“ r”而不是“ v”)
Oliboy50

9
同时使用sudorm是危险的。同时使用rm*是危险的。在同一命令中使用三者,鲨鱼会咬伤您或您的文件。
JB。

这对我不起作用。
WiSaGaN

9

对于Ubuntu 12.04 Precise:永久解决方案

添加新存储库并更新存储库列表后,出现此错误消息。这是由于服务器的地址不再有效。因此,只需将地址更改为一个好地址即可。

  1. ~/.gnupg/gpg.conf使用文本编辑器打开文件。

    在终端: gedit ~/.gnupg/gpg.conf

  2. 然后,在此文件中,找到以下粗体行(第116行)(默认情况如下):

    [...]
    密钥服务器hkp://keys.gnupg.net#
    密钥服务器mailto:pgp-public-keys@keys.nl.pgp.net#
    密钥服务器ldap://keyserver.pgp.com

  3. 然后添加以下粗体行,最终得到以下结果:

    (如下所示,在第二行中添加#,以注释掉旧地址)

    [...] 密钥服务器hkp://keys.gnupg.net# 密钥服务器mailto:pgp-public-keys@keys.nl.pgp.net# 密钥服务器ldap://keyserver.pgp.com
    keyserver http://keyserver.ubuntu.com
    #

  4. 保存文件,然后尝试再次更新:

    在终端: sudo apt-get update


7

基于nelaar的答案:

sudo apt-get update 2>&1 1>/dev/null | sed -ne 's/.*NO_PUBKEY //p' |
while read key; do
    echo 'Processing key:' "$key"
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "$key"
done

该脚本将所有错误转储到临时文件中,然后遍历它们,导入丢失的密钥。


6

最简单的方法是使用Y PPA MAnager

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager 

从Dash打开Y PPA Manager

在此处输入图片说明

输入您的管理员密码

在此处输入图片说明

双击高级选项

在此处输入图片说明

单击“尝试导入所有缺少的GPG密钥”

在此处输入图片说明

单击确定修复它


4

首先在终端输入以下命令

sudo rm /var/lib/apt/lists/* -vf

然后在终端中输入以下命令来更新系统

sudo apt-get update && sudo apt-get upgrade

在此之后,应该没有错误,并且一切都应该正常工作。


2

对我有用的是先删除密钥,然后重新安装。为此,我执行了以下操作:

root@ > ~: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 630239CC130E1A7FD81A27B140976EAF437D05B5

用删除

root@ > ~: sudo apt-key del 630239CC130E1A7FD81A27B140976EAF437D05B5

然后,通过键入以下内容重新安装

root@ > ~: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 630239CC130E1A7FD81A27B140976EAF437D05B5

1

我遇到了相同的问题,通过添加ppa(ppa:nathandyer/vocal-stable),它破坏了我的存储库。Web Upd8的作者指导我如何解决此问题,以下是他的工作方法。

备份.gpg密钥,以防万一出问题。

让我们创建一个文件夹,在其中存放备份。

  • mkdir ~/gpg-backups

    这将备份文件/etc/apt/trusted.gpg.d/夹中的所有文件。

  • sudo cp /etc/apt/trusted.gpg.d/*.* ~/gpg-backups/

现在,我们将删除所有.gpg密钥。

  • sudo rm /etc/apt/trusted.gpg.d/

  • sudo cp /etc/apt/trustdb.gpg ~/gpg-backups/

  • sudo rm /etc/apt/trustdb.gpg

在“软件和更新”中的“身份验证”选项卡上,单击“恢复默认值”。

安装y-ppa管理器以导入所有丢失的GPG密钥

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

参考


1
一行似乎包含错误,必须为sudo rm /etc/apt/trusted.gpg.d/**不能在EOL处省略,因为rm-r未指定该选项的情况下,您无法使用删除非空目录sudo mv /etc/apt/trustdb.gpg ~/gpg-backups/。因为如果移动文件,rm则此后不需要源文件。
语法错误

1

我想在bash脚本中自动修复此类错误。对于任何有兴趣的人,这应该可以解决问题:

sudo apt-get update 2> /tmp/keymissing
if [ -f /tmp/keymissing ]
then
    for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //")
        do 
        echo -e "\nProcessing key: $key"
        sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
        sudo apt-get update
    done
    rm /tmp/keymissing
fi

0

如果您有这样的事情:

# aptitude update
...
Ign http://archive.canonical.com wily/partner Translation-en_US
Fetched 422 kB in 3s (130 kB/s)
W: GPG error: http://ubuntu.volia.net wily InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

首先尝试:

# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

last命令的输出可以是:

gpg: keyblock resource `/etc/apt/trusted.gpg.d/webupd8team_ubuntu_experiments.gpg': resource limit
gpg: keyblock resource `/etc/apt/trusted.gpg.d/webupd8team_ubuntu_gthumb.gpg': resource limit

所以,你需要去/etc/apt/trusted.gpg.d/和删除未使用的密钥,然后重复apt-key advaptitude update


0

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -


-1

当我使用德语设置安装12.04时,我发生了此问题。然后,默认情况下,存储库列表将使用德语镜像存储库。在这种情况下,您可以编辑存储库列表,并将所有德语镜像存储库更改为Ubuntu标准存储库。

您可以使用以下方法:

sudo nano /etc/apt/sources.list

使用Alt- 在Nano中搜索和替换-r

搜索(替换): /de.

用。。。来代替: /

全部替换(按A

保存文件Ctrl-x

然后通过在终端中输入以下命令来更新系统:

sudo apt-get update && sudo apt-get upgrade

在此之后,应该没有错误并且一切都应该正常工作。


2
这并不能真正回答OP的问题,特别是考虑到他们没有使用源代码。
凯文·鲍文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.