如何修复 GPG 错误“NO_PUBKEY”?

Agm*_*nor 464 apt gnupg

我使用 Software Sources 程序添加了一些额外的存储库。但是当我重新加载包数据库时,出现如下错误:

W:GPG 错误:http : //ppa.launchpad.net trusty InRelease:以下签名无法验证,因为公钥不可用:NO_PUBKEY 8BAF9A6F

apt-key根据官方的 Ubuntu 文档,我知道我可以在终端中修复它。但我希望以图形方式进行。有没有办法在不使用终端的情况下做到这一点?

kar*_*k87 741

在终端中执行以下命令

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>
Run Code Online (Sandbox Code Playgroud)

<PUBKEY>您丢失的存储库公钥在哪里,例如8BAF9A6F.

然后更新

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

替代方法:

sudo gpg --keyserver pgpkeys.mit.edu --recv-key  <PUBKEY>
sudo gpg -a --export <PUBKEY> | sudo apt-key add -
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

请注意,当您使用这样导入密钥时,apt-key您是在告诉系统您信任您正在导入的密钥来签署您的系统将使用的软件。除非您确定密钥确实是包分发程序的密钥,否则不要这样做。

  • 8BAF9A6F &lt;-- 你从哪里得到这个号码的? (29认同)
  • 数字 8BAF9... 是您在原始错误中看到的数字。这将类似于 NO_PUBKEY 8BAF ... (14认同)
  • 您可以简单地将“NO_PUBKEY”值作为键参数传递。例如 GPG 错误[...]NO_PUBKEY 3766223989993A70 =&gt; sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3766223989993A70 (12认同)
  • 如果有人篡改了我和存储库之间的数据,并替换了他们签名的内容,那么最终我只会添加他们使用的密钥,或多或少是盲目的。那么验证密钥是否正确的过程是什么? (10认同)
  • jammy 于 2022 年 8 月 28 日声明:“警告:apt-key 已弃用。改为管理 trust.gpg.d 中的密钥环文件(请参阅 apt-key(8))。 (9认同)
  • @Naruto 那很正常。这意味着*那个*列表在服务器上没有改变。 (2认同)
  • 最终您信任密钥服务器(在第一个示例中位于 keyserver.ubuntu.com) (2认同)
  • 这是一个很好的答案。请注意,该操作专门要求以图形方式执行此操作,而不是使用命令行。 (2认同)
  • @monotasker:确实如此。我希望我能先看到这个答案,因为我更喜欢每天打字而不是在 GUI 中涉水。但公平地说,OP 确实在最后要求使用图形方法。 (2认同)
  • @Phil_1984_、@jpaugh:不,使用 PGP 时密钥服务器永远不受信任。密钥通常通过 UID 签名链或通过手动检查(例如比较密钥 ID 或指纹)进行验证。后者实际上是您在使用“apt-key --recv-key 3766223989993A70”时所做的事情:您告诉“apt-key”您信任具有该密钥 ID 的密钥。如果密钥服务器尝试返回不同的密钥,“apt-key”将不会接受它来代替“3766223989993A70”。 (2认同)
  • 这些方法都不适合我。我成功添加了密钥,但是当我再次执行“sudo apt-get update”时,我仍然收到相同的错误。 (2认同)

mon*_*ker 252

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

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

    sudo add-apt-repository ppa:webupd8team/y-ppa-manager
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更新您的软件列表并安装 Y-PPA-Manager:

    sudo apt-get update
    sudo apt-get install y-ppa-manager
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行 y-ppa-manager(即输入y-ppa-manager然后按回车键)。

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

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

    你完成了!正如警告对话框在您开始操作时所说的那样,这可能需要很长时间(对我来说大约需要 2 分钟),具体取决于您拥有的 PPA 数量和连接速度。

  • 在网络服务器中不是很有用,因为这会安装 X11。如果您使用的是服务器版本,请不要使用此方法,请查看 karthick87 的答案! (33认同)
  • [这个答案](https://askubuntu.com/a/15272/20358) **到目前为止**更容易,实际上比这个“图形”答案需要的命令更少。 (7认同)
  • 您正在为您添加到系统中的每个 PPA 导入(并信任)密钥。假设是您信任这些 PPA 并且在通过 apt 添加它们之前已经检查过它们。 (3认同)
  • 这是否允许验证导入的密钥,或者您只是盲目地导入所有内容(因此信任每个拥有 PPA 的人)? (2认同)
  • 但这道题要求的是图形方法。 (2认同)

Ped*_*ram 64

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

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

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 9BDB3D89CE49EC21
Run Code Online (Sandbox Code Playgroud)

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

gpg --export --armor 9BDB3D89CE49EC21 | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

它将密钥添加到 apt 可信密钥中。

解决方案可以在这里&这里&这里找到

  • 如果 hkp://keyserver.ubuntu.com 不工作,请使用这个 `pgpkeys.mit.edu` 服务器。 (4认同)
  • 这个答案解决了我的 Kylin 存储库问题。搜狗拼音输入法在我的`/etc/apt/sources.list.d/`文件夹中添加了source,但显然没有导入gpg key。很好的答案,简单而中肯,+1! (2认同)
  • 警告:apt-key 已弃用 (2认同)

hto*_*que 38

您需要获取并导入密钥。

要从 PPA 获取密钥,请访问 PPA 的 Launchpad 页面。在 Launchpad 的每个 PPA 页面上,单击“有关此 PPA 的技术详细信息”(1) 后,您会找到此链接 (2):

图 1

按照它并单击密钥 ID 链接 (3):

图 2

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


现在是时候导入它了:

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

  • @FelipeMicaroniLalli,问题是如何使用 GUI 添加公钥,而不是终端,所以这个答案很完美。 (5认同)

mch*_*hid 15

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

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

此外,使用

sudo apt-key adv
Run Code Online (Sandbox Code Playgroud)

被认为是一种安全风险,不推荐,因为您“破坏了整个安全概念,因为由于各种原因,这不是接收密钥的安全方式(例如: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 -
Run Code Online (Sandbox Code Playgroud)

  • 警告:apt-key 已弃用 (3认同)
  • @DanielAndrzejewski 是的,谢谢。我稍后必须更新答案。同时,您可以按照[这些说明](/sf/answers/4996884021/)作为添加存储库密钥的替代方法。另外,如果您确实使用其他方法,请记住从密钥环中删除相应的密钥,以便该密钥仅适用于单个存储库。它被贬值的原因是因为将密钥添加到密钥环会将密钥应用于所有存储库。将密钥添加到您的sources.list 文件之一中的单个存储库仅适用于单个存储库。 (2认同)

Ali*_*rei 11

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

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

sudo launchpad-getkeys
Run Code Online (Sandbox Code Playgroud)

如果您在代理后面,事情会稍微复杂一些,因此请参阅了解更多信息


phi*_*294 7

当 PPA 的 apt 列表文件指向本地密钥环时,也会发生此错误,例如

deb [signed-by=/usr/share/keyrings/SOMETHING.gpg] https://download.something.org/something something/
Run Code Online (Sandbox Code Playgroud)

虽然该文件可能存在于您的系统上(可能是使用先前的命令下载的),但由于缺少权限,它可能无法读取。我刚刚通过运行修复了这种错误

chmod 644 /usr/share/keyrings/*
Run Code Online (Sandbox Code Playgroud)

获取密钥环文件后。根本问题是sudo当我已经root 用户时的使用情况。真的很奇怪,因为无论如何所有这些都是 root 并且在任何地方都没有访问权限失败消息......但这解决了它


小智 6

我在安装 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>
Run Code Online (Sandbox Code Playgroud)

为了修复它,我在终端中执行了以下命令:

sudo -i  
apt-get clean  
cd /var/lib/apt  
mv lists lists.old  
mkdir -p lists/partial  
apt-get clean  
apt-get update  
Run Code Online (Sandbox Code Playgroud)

来源 -解决问题的链接


Agm*_*nor 5

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

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

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

然后继续输入密钥:

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

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


Edu*_*omo 5

确保您已apt-transport-https安装:

dpkg -s apt-transport-https > /dev/null || bash -c "sudo apt-get update; 
sudo apt-get install apt-transport-https -y" 
Run Code Online (Sandbox Code Playgroud)

添加存储库:

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 
Run Code Online (Sandbox Code Playgroud)

安装 Skype for Linux:

sudo apt-get update 
sudo apt-get install skypeforlinux -y
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

787754 次

最近记录:

4 年 前