如何添加存储库的 GPG 密钥,因为 apt-key 已被弃用?

最近更新后,我注意到我的第三方仓库无法更新,因为apt出现了“NO_PUBKEY”错误。我花了几个小时寻找解决方法,但所有的解决方案都建议使用apt-key。然而,由于它已经被弃用,这种方法不再起作用。所以我手动将一个仓库的密钥从“/usr/share/keyrings”复制到“/etc/apt/trusted.gpg.d”进行测试,看起来可以正常工作。现在该应用程序的一切都正常了。
我的问题是:是否有一种新的功能可以从密钥服务器下载密钥,而不是使用apt-key命令?大多数网站还没有意识到这个变化,并且仍然提供apt-key命令来获取他们的仓库密钥,但现在只会返回错误。如何更新我当前的第三方仓库密钥,因为只有它们存在问题?我应该像上面提到的那样手动复制密钥,还是有更高效的解决方案?
编辑:我使用的是20.10版本。Apt-key在20.04版本中有效,但之后就不再有效了。
$ sudo apt update
Err:9 http://repo.vivaldi.com/stable/deb stable Release.gpg
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9658E8044A3AA3D6

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://repo.vivaldi.com/stable/deb stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9658E8044A3AA3D6
W: Failed to fetch http://repo.vivaldi.com/stable/deb/dists/stable/Release.gpg  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9658E8044A3AA3D6
W: Some index files failed to download. They have been ignored, or old ones used instead.

你正在使用什么操作系统和版本? - guiverc
2这个回答解决了你的问题吗?apt-key已被弃用 - Artur Meinild
@guiverc 我正在使用20.10版本。 - i9pp0
@Artur Meinild 我看到了那篇帖子,但它并没有回答我的问题,即现在我应该使用什么工具来代替apt-key从网站添加存储库密钥。 - i9pp0
1我不相信你的问题是因为apt-key被降级,而是你尝试导入的密钥已经过时且被降级。由于md5不再被视为安全,使用md5的任何密钥都已被弃用。你应该提供完整的命令和错误信息以获取具体细节(而不是泛泛地说)。 - guiverc
1@guiverc 嗯,可能吧,但我通过将密钥从一个位置移动到另一个位置来修复了这个问题,就像我在帖子中描述的那样。如果是md5sum的问题,无论我把它放在哪里,密钥都不应该起作用。对吗? - i9pp0
1这个回答解决了您的问题吗?如何修复GPG错误"NO_PUBKEY"? - Kulfy
1@Kulfy 这个答案接近但并不完全准确。我想知道的是新的功能是什么,用于替代从网站下载密钥的apt-key,因为它们都给出了以apt-key结尾的指令,但会出现错误。那个帖子上的大多数答案都使用apt-key,而被接受的答案则使用了一个需要下载的应用程序。我不能只为了将存储库密钥放在正确位置而安装软件。 - i9pp0
@guiverc 我为你添加了一些错误 - i9pp0
1@i9pp0 Pedram的回答没有使用apt-key。htorque的回答也没有使用apt-key。虽然我不使用20.10,但根据https://manpages.debian.org/testing/apt/apt-key.8.en.html,apt-key应该存在于Ubuntu 22.04之前。 - Kulfy
1@Kulfy Pedram的回答确实使用了apt-key。htorque的回答没有使用apt-key,但是它是一个冗长的解决方法,不能成为向我的系统添加第三方存储库的唯一方式。网站提供了一行代码来使用apt-key添加他们的存储库密钥。在20.10版本中,apt-key不再起作用。我的问题是,有没有什么“新”的方法来添加存储库密钥?谢谢 - i9pp0
1个回答

apt-key本身不会下载密钥。 apt-key adv将选项传递给gpg,而gpg实际进行下载(apt-key是一个复杂的shell脚本,它本身创建临时脚本来运行gpg)。您仍然可以使用gpg导入密钥,例如,代替apt-key adv --recv-keys,您可以执行类似以下操作:

sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/foo.gpg --recv-keys 9658E8044A3AA3D6

或者,可以使用以下命令替代 wget ... | apt-key add -
wget -qO - https://example.com/somekey.gpg |
  sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/example.gpg --import -

注:

  1. GnuPG 将在 root 用户的主目录中创建信任存储。如果你想避免这种情况,请使用 --homedir 与其他选项一起使用。
  2. GnuPG 默认使用新的密钥库格式创建密钥环,但这些密钥环无法与 apt 兼容。然而,使用前缀 gnupg-ring: 可以使其以某种原因使用旧的格式。

如果你的软件已经在 /usr/share/keyrings 目录中安装了密钥环,那么假设它们的 sources.list 条目应该类似于 [signed-by=/usr/share/keyrings/foo.gpg] (参见 Debian Wiki)。


1apt会遍历/etc/apt/trusted.gpg.d/中的所有密钥环吗? - code_monk
它与Webmin不兼容。 - acgbox