如何解决GPG错误“ NO_PUBKEY”?


364

我在“软件源”程序中添加了一些额外的存储库。但是,当我重新加载软件包数据库时,出现如下错误:

W:GPG错误:http : //ppa.launchpad.net可信任InRelease:由于公共密钥不可用,无法验证以下签名:NO_PUBKEY 8BAF9A6F

apt-key根据Ubuntu的官方文档,我知道我可以在终端中使用它来修复它。但是我本来希望以图形方式完成它。有没有一种方法可以不使用终端?



'一个平均值'?很好奇你的意思。
Michael Scheper

1
您可以检查此SO线程以寻求解决方案。链接到相关网站
Aniket Thakur

@MichaelScheper'是否有不开终端的手段?=〜'有没有没有终端的方法吗?'
Wilf

@Wilf:哦!我并不是故意要挑剔语法,但这确实使我感到困惑。从我刚刚检查的参考文献中,“ means”是一个单数名词,也是您所指的那个名词。dictionary.cambridge.org/dictionary/english/means但是,如果您和Agmentor使用某种变体形式的英语,而该语法在问题中是正确的,那么我希望看到对它的引用,仅因为我对此感兴趣之类的东西。☺
迈克尔Scheper

Answers:


211

到目前为止,最简单的处理方法是使用Y-PPA-Manager(现在将launchpad-getkeys脚本与图形界面集成在一起)。

  1. 要安装它,请首先为此程序添加webupd8存储库:

    sudo add-apt-repository ppa:webupd8team/y-ppa-manager
    
  2. 更新您的软件列表并安装Y-PPA-Manager:

    sudo apt-get update
    sudo apt-get install y-ppa-manager
    
  3. 运行y-ppa-manager(即键入y-ppa-manager然后按Enter键)。

  4. 当出现y-ppa-manager主窗口时,单击“高级”。

  5. 从高级任务列表中,选择“尝试导入所有缺少的GPG密钥”,然后单击“确定”。

    你完成了!如警告对话框所述,当您开始操作时,可能要花一些时间(对我来说大约2分钟),具体取决于您拥有的PPA数量和连接速度。


18
在Web服务器中并不是很有用,因为这会安装X11。如果您使用的是服务器版本,请不要使用此方法,请查看karthick87的答案!
goncalotomas

2
这是否可以验证导入的密钥,还是您只是盲目地导入所有内容(并因此信任拥有PPA的每个人)?
圣保罗Ebermann

2
您正在导入(并信任)已添加到系统中的每个PPA的密钥。假定您信任那些PPA,并在通过apt添加它们之前将其检出。
monotasker

6
到目前为止这个答案要容易得多,并且实际上比“图形”答案所需的命令更少。
jpaugh

1
但是这个问题要求一种图形方法。
monotasker

555

在终端中执行以下命令

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>

<PUBKEY>您缺少的存储库公共密钥在哪里,例如8BAF9A6F

然后更新

sudo apt-get update

替代方法:

sudo gpg --keyserver pgpkeys.mit.edu --recv-key  <PUBKEY>
sudo gpg -a --export <PUBKEY> | sudo apt-key add -
sudo apt-get update

请注意,当您使用这样的方式导入密钥时,apt-key是在告诉系统您信任要导入的密钥以对系统将使用的软件进行签名。除非您确定密钥确实是包裹分发者的密钥,否则不要这样做。


2
@Naruto这很正常。这意味着列表在服务器上没有更改。
ζ--

9
您可以简单地将NO_PUBKEY值作为keys参数传递。例如GPG错误[...] NO_PUBKEY 3766223989993A70 => sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3766223989993A70
SMMousavi 2014年

23
8BAF9A6F <-您从哪里获得该号码?
Olivier Lalonde 2014年

13
数字8BAF9 ...是您在原始错误中看到的。就像NO_PUBKEY 8BAF ...
Alex

9
如果有人篡改了我和存储库之间的数据,并替换了他们所签名的内容,那么最终我可能只是盲目地添加了他们使用的密钥。那么,验证密钥是否正确的过程是什么?
mc0e

43

当您没有合适的存储库公钥时,就会发生这种情况。

要解决此问题,请使用以下命令:

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 9BDB3D89CE49EC21

从ubuntu密钥服务器检索密钥。然后这个:

gpg --export --armor 9BDB3D89CE49EC21 | sudo apt-key add -

这会将密钥添加到适当的受信任密钥中。

该解决方案可以在此处此处此处找到


4
如果hkp://keyserver.ubuntu.com无法正常工作,请使用此pgpkeys.mit.edu服务器。
RajaRaviVarma

1
这个答案解决了我的Kylin储存库问题。搜狗拼音输入法将源添加到了我的/etc/apt/sources.list.d/文件夹中,但显然没有导入gpg键。好的答案,简单点,就是+1!
Sergiy Kolodyazhnyy

1
谢谢!为我工作,解决了PHP存储库的问题。
Akash Agarwal

1
这个答案解决了我的更新http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease
mvw

很有可能您之前没有为系统生成过密钥。-因此执行上述步骤之前使用gpg --gen-key (参考文献- packaging.ubuntu.com/html/getting-set-up.html
parasrish

35

您需要获取并导入密钥。

要从PPA获取密钥,请访问PPA的启动板页面。在“关于此PPA的技术详细信息”(1)之后,在启动板的每个PPA页面上,您都可以找到此链接(2):

图片1

跟随它并单击密钥ID链接(3):

图片2

保存页面,这是您的密钥文件。


现在是时候导入它了:

  • Applications > Software Center
  • Edit > Software sources...
  • 输入密码,
  • 转到Authentication选项卡,然后单击Import Key File...,最后
  • 选择保存的密钥文件,然后单击OK

1
不要浪费时间,请看下面的答案。
费利佩

5
@FelipeMicaroniLalli,问题是如何使用GUI(而不是终端)添加公钥,因此此答案很完美。
克里斯·伍兹

这是很多更容易和更快现在的Y PPA经理(也是一个GUI应用程序)来做到这一点。请参阅下面的答案。
monotasker 2013年

1
可以,但是如果存储库不是ubuntu ppa怎么办。例如,英特尔在download.01.org
mc0e

很棒的循序渐进指南,非常感谢!对于某些无法通过添加密钥的人确实很有帮助apt-key
罗伊·灵

12

apt只能处理/etc/apt/trusted.gpg.d中的40个密钥。41个密钥,即使您按照所有步骤添加丢失的密钥,也会收到GPG错误“找不到公共密钥”。

检查此文件中是否有您不再使用的ppa中未使用的密钥。如果所有这些都在使用中,请考虑删除一些ppa以及/etc/apt/trusted.gpg.d中的相应密钥文件。

此外,使用

sudo apt-key adv

被认为是安全风险,因此不建议您这样做,因为它“ 破坏了整个安全概念,因为出于各种原因,这不是一种安全的方式来接收密钥(例如:hkp是纯文本协议,可以伪造短甚至长的keyid,…” ) ”。http://ubuntuforums.org/showthread.php?t=2195579

我相信添加缺失键(例如1ABC2D34EF56GH78)的正确方法是

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 1ABC2D34EF56GH78
gpg --export --armor 1ABC2D34EF56GH78 | sudo apt-key add -

1
我发现仅从/etc/apt/trusted.gpg.d中删除所有密钥,然后继续进行接受的答案askubuntu.com/a/386003/284664
janot 2015年

@mchid能否请您引用有关此41键限制的文档/ URL?
SebMa

@SebMa链接发布在我的答案中,并引用了受此限制影响的Debian中的错误。这是链接中提到此内容的实际帖子的锚点:ubuntuforums.org/showthread.php?t=2195579#post_message_12882784我不确定是否存在实际的文档,但是可能使用了数字40,因为“ 40会以多种不同的语言翻译为“很多”。
mchid

@SebMa但是,在此答案时以及之后的一段时间内,该限制已经存在或确实存在。我亲身经历了41个键的限制,并通过删除未使用的键来解决此问题,以在已有40个键时添加一个新键来避免此错误。
mchid


9

WebUpd8 PPA中打包了一个小脚本,我将其打包为一个.deb下载链接,因此您不必添加整个PPA-它会自动导入所有丢失的GPG密钥。

下载并安装Launchpad-getkeys(忽略其版本中的〜natty,它可用于从Karmic到Oneiric的所有Ubuntu版本)。安装后,打开终端并输入:

sudo launchpad-getkeys

如果您是代理人,事情会有些复杂,因此请参阅以获得更多信息


1
确实是我现在做的方式,因为我在您的网站上看到了此程序。但是,该问题的目的是要知道如何以图形方式进行。
Agmenor 2011年

现在,launchpad-getkeys脚本已集成到程序Y-PPA-manager中。 launchpad.net/~webupd8team/+archive/y-ppa-manager
monotasker 2013年

5

我在安装Heroku时遇到了同样的问题。下面的链接解决了我的问题-

http://naveenubuntu.blogspot.in/2011/08/fixing-gpg-keys-in-ubuntu.html

解决NO_PUBKEY问题后,仍保留以下问题

W: GPG error: xhttp://toolbelt.heroku.com ./ Release: The following signatures were invalid: BADSIG C927EBE00F1B0520 Heroku Release Engineering <release@heroku.com>

为了解决这个问题,我在终端中执行了以下命令:

sudo -i  
apt-get clean  
cd /var/lib/apt  
mv lists lists.old  
mkdir -p lists/partial  
apt-get clean  
apt-get update  

来源- 解决链接


4

确保已apt-transport-https安装:

dpkg -s apt-transport-https > /dev/null || bash -c "sudo apt-get update; 
sudo apt-get install apt-transport-https -y" 

添加存储库:

curl https://repo.skype.com/data/SKYPE-GPG-KEY | sudo apt-key add - 
echo "deb [arch=amd64] https://repo.skype.com/deb stable main" | sudo tee /etc/apt/sources.list.d/skype-stable.list 

安装Linux版Skype:

sudo apt-get update 
sudo apt-get install skypeforlinux -y

资料来源:https : //community.skype.com/t5/Linux/Skype-for-Linux-Beta-signatures-couldn-t-be-verified-because-the/td-p/4645756


3

更一般而言,以下方法应适用于每个存储库。首先,在最终的搜索引擎帮助下,在程序提供者的网站上搜索如下所示的文本:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.1 (GNU/Linux)
[...]
-----END PGP PUBLIC KEY BLOCK-----

例如,这样的文本显示在http://deb.opera.com上。复制段落,将其粘贴到您在桌面上创建的空文件中。这将生成密钥文件。

然后继续输入密钥:

  • 应用程序>软件中心
  • 编辑> Sofware来源...,输入密码
  • 身份验证选项卡上,单击“导入密钥文件...”
  • 选择保存的密钥文件,然后单击“确定”。

现在,您可以删除以前创建的密钥文件。


3

好!我终于找到了路!

我已经测试了所有方法来修复GPG错误NO_PUBKEY,但对我没有任何帮助。

我已经删除了/etc/apt/trusted.gpg.d文件夹的全部内容

cd /etc/apt/trusted.gpg.d
sudo rm -R *
sudo apt-get update

而且我使用Y-PPA-Manager方法是因为我懒于手动创建所有pubkey(太多):http : //www.unixmen.com/fix-w-gpg-error-no_pubkey-ubuntu/

再次运行sudo apt-get update并最终完成所有工作!坦克!

基于源:https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1263540上发布#17


这也是唯一对我有用的东西。大概是某个地方的密钥文件损坏了吗?
donnek '18

0

DynDNS的Updater客户端存在相同的问题。

原来那只是过期的密钥。

重新安装软件(.deb从网站下载新软件,然后使用软件中心重新安装)解决了该问题。

错误消息供参考:

W: GPG error: http://cdn.dyn.com stable/ Release: The following signatures were invalid: KEYEXPIRED 141943.......
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.