我在“软件源”程序中添加了一些额外的存储库。但是,当我重新加载软件包数据库时,出现如下错误:W:GPG错误:http://ppa.launchpad.net trusty InRelease:以下签名无法执行:由于公钥不可用,因此无法验证:NO_PUBKEY 8BAF9A6F


我知道我可以在终端机中使用apt-key对其进行修复。但是我本来希望以图形方式完成它。有没有不用终端就可以做到这一点的方法?

评论

相关:askubuntu.com/q/127326/178596

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

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

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

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

#1 楼

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


要安装它,首先添加webupd8存储库对于该程序:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager



更新软件列表并安装Y-PPA-Manager:
sudo apt-get update
sudo apt-get install y-ppa-manager



运行y-ppa-manager(即键入y-ppa-manager,然后按Enter键)。


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


从高级任务列表中,选择“尝试导入所有丢失的GPG密钥”,然后单击“确定”。
您完成了!如警告对话框所述,当您开始操作时,可能要花一些时间(对我来说大约2分钟),具体取决于您拥有的PPA数量和连接速度。



评论


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

– goncalotomas
16年2月11日在20:13

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

–PaŭloEbermann
16 Sep 6'在10:36

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

– monotasker
2016年9月6日14:25在

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

– jpaugh
17年7月27日在19:37

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

– monotasker
17年7月28日在22:30

#2 楼

在终端中执行以下命令

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导入这样的密钥时,您将告诉系统您相信要导入的密钥以签名系统将要使用的软件。除非您确定密钥确实是包裹分发服务器的密钥,否则请勿执行此操作。

评论


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

– Nanofarad
2012年8月10日15:50

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

– S.M. Mousavi
2014年2月19日19:40在

8BAF9A6F <-您从哪里获得该号码?

–奥利维尔·拉隆德(Olivier Lalonde)
2014年9月9日12:49

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

– Alex
2014年10月10日19:56

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

–mc0e
2015年5月20日15:37

#3 楼

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

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

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


其中从ubuntu密钥服务器检索密钥。然后是这样:

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


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

解决方案可在此处,此处和此处找到。

评论


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

–RajaRaviVarma
2013年10月30日10:06

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

– Sergiy Kolodyazhnyy
16年8月8日在17:09

谢谢!为我工作以解决php信息库问题。

– Akash Agarwal
17年12月17日在17:31

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

–mvw
18年2月21日在9:21



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

–偏执狂
18年5月9日在5:05

#4 楼

您需要获取并导入密钥。

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



,然后单击在密钥ID链接(3)上:



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


现在是导入时间:



Applications > Software Center

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


评论


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

–Felipe
2011年10月17日在9:06

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

–克里斯·伍兹(Chris Woods)
13年7月30日在14:24

现在,使用y-ppa-manager(也是gui应用程序)来执行此操作变得更加容易和快捷。请参阅下面的答案。

– monotasker
2013年12月4日15:53

可以,但是如果存储库不是ubuntu ppa怎么办。例如。英特尔在download.01.org上运行自己的视频硬件驱动程序存储库

–mc0e
15年5月20日在15:39

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

–罗伊(Roy Ling)
2015年11月10日,下午1:35

#5 楼

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 -


评论


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

–杰诺特
15年2月8日在18:22

@mchid您能引用一个讨论此41个键限制的文档/ URL吗?

–SebMa
19 Mar 27 '19在2:54

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

– mchid
19 Mar 27 '19在8:22

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

– mchid
19 Mar 27 '19在8:23

@SebMa否wiki.debian.org/SecureApt

– mchid
19 Mar 27 '19在15:20

#6 楼

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

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

sudo launchpad-getkeys


如果您在使用代理,则情况会有些复杂,因此请参阅此以获得更多信息

评论


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

– Agmenor
2011年6月5日在22:34

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

– monotasker
2013年12月4日15:41

#7 楼

我在安装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  


源-解决该问题的链接

评论


我仍然遇到相同的错误,GPG错误:http://download.opensuse.org/repositories/home:/colomboem/xUbuntu_16.04发布:以下签名无效:

– Itamar Katz
20-4-13在8:58



#8 楼

确保已安装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 


安装Skype for Linux:

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-因为-/ td-p / 4645756

#9 楼

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

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


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

然后继续导入密钥:


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

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

#10 楼

好!我终于找到了方法!

我已经测试了解决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,最后一切正常! Tanks!

基于源代码:https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1263540上的帖子#17

评论


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

–唐纳克
18年4月3日在7:33

#11 楼

我在DynDNS的Updater客户端上遇到了同样的问题。

原来它只是过期的密钥。

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

错误消息供参考:

W: GPG error: http://cdn.dyn.com stable/ Release: The following signatures were invalid: KEYEXPIRED 141943.......


#12 楼

如果PPA的apt列表文件指向本地密钥环,例如

deb [signed-by=/usr/share/keyrings/SOMETHING.gpg] https://download.something.org/something something/


,并且该文件可能存在于您的系统上(可能是通过先前的命令),可能由于缺少权限而无法读取。我只是在获取密钥环文件后通过运行

chmod 644 /usr/share/keyrings/*


来解决这种错误。根本的问题是当我已经是root用户时使用sudo的情况。真的很奇怪,因为所有这些都是根目录,并且在任何地方都没有访问权限失败消息...但是已经解决了