如何将 GPG 密钥添加到 apt 源密钥环?

bru*_*uce 102 apt gnupg

Ubuntu Doc页面是这样说的:

建议您添加 Opera GPG 密钥。

wget -qO - http://deb.opera.com/archive.key | sudo apt-key add -

我在哪里添加?

我想接受建议,但我不知道要将 gpg 密钥添加到软件中心的哪个部分。

Mat*_*teo 117

这是在终端中输入的单行命令。请参阅 什么是终端以及如何打开和使用它?

要使用它,您需要在终端中粘贴整个命令(记住使用 https):

wget -qO - https://deb.opera.com/archive.key | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

但是,当然,在不知道它们在做什么的情况下复制和粘贴命令是令人生畏的,并且没有关于如何撤消其操作的说明,因此这里是命令的基本细分:

  • wget从服务器下载一些东西。请参阅Ubuntu 16.04 的 wget 手册
  • | 是一个管道,它接收一个命令的输出并将其运行到另一个命令的输入中
  • apt-key add 添加一个包键

所以它基本上会下载密钥,然后将其添加到一个命令中。

我测试了命令,它应该可以工作。


现在要验证它是否有效,请运行此命令(来自此答案):

apt-key list
Run Code Online (Sandbox Code Playgroud)

这将列出添加的密钥,来自 Opera 的密钥应列在底部,如下所示:

pub   1024D/30C18A2B 2012-10-29 [expires: 2014-10-29]
uid                  Opera Software Archive Automatic Signing Key 2013 <packager@opera.com>
sub   4096g/C528FCA9 2012-10-29 [expires: 2014-10-29]
Run Code Online (Sandbox Code Playgroud)

链接的答案还显示,如果需要,您可以使用以下方法删除密钥:

sudo apt-key del 30C18A2B
Run Code Online (Sandbox Code Playgroud)

30C18A2B是从列表中密钥ID。


执行该命令并完全按照屏幕截图设置源后,请执行以下操作:

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

(注意有一些随机警告,但不会影响安装或软件中心操作)

对于删除(以防万一):完全删除应用程序的正确方法是什么?


所以总结一下:

  • 添加存储库 在此处输入图片说明
  • 添加密钥 apt-key
  • 在终端中安装 apt-get
  • 在破折号中搜索 在此处输入图片说明

  • “apt-key adv”允许从公钥服务器下载密钥。 (4认同)
  • @Cerran,正确。APT 将密钥保存在 _somewhere else_(例如`/etc/apt/trusted.gpg.d/` 和 `/var/lib/apt/keyrings/`。) (3认同)

Pau*_*ghi 45

如果您从 PPA 手动添加密钥,请使用

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

替换为00000000您要添加的 PPA 网站中通知的密钥的第二部分。

例如,如果您找到这一行:

 4096R/7BF576066
Run Code Online (Sandbox Code Playgroud)

仅使用第二部分(无论其大小),在本例中为 7BF576066

  • 不带 apt-key 的等效项: `sudo gpg --keyserver hkp://keyserver.ubuntu.com:80 --no-default-keyring --keyring /usr/share/keyrings/my-ppa.gpg --recv-keys 00000000` (3认同)

小智 32

较新版本的 apt 还支持以下内容:

apt-key adv --fetch-keys http://deb.opera.com/archive.key
Run Code Online (Sandbox Code Playgroud)

这种方法还提供了更详细的反馈,例如:

gpg: key 7BD9BF62: public key "signing key <username@domain.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
Run Code Online (Sandbox Code Playgroud)

这还有一个额外的好处,即消除了对 wget 或 curl 等附加依赖项的需求。

  • @dani-h 如果你使用 GPG 1.x,你需要 `gnupg-curl` 来使用 HTTPS。 (5认同)

小智 7

apt-key 现在似乎已被弃用,我创建了一个脚本来检测并获取丢失的密钥,您可以在此处获取它。

#!/bin/sh -e
tmp="$(mktemp)"
sudo apt-get update 2>&1 | sed -En 's/.*NO_PUBKEY ([[:xdigit:]]+).*/\1/p' | sort -u > "${tmp}"
cat "${tmp}" | xargs sudo gpg --keyserver "hkps://keyserver.ubuntu.com:443" --recv-keys  # to /usr/share/keyrings/*
cat "${tmp}" | xargs -L 1 sh -c 'sudo gpg --yes --output "/etc/apt/trusted.gpg.d/$1.gpg" --export "$1"' sh  # to /etc/apt/trusted.gpg.d/*
rm "${tmp}"
Run Code Online (Sandbox Code Playgroud)


小智 6

您不应通过添加第三方密钥apt-key add。然后,这些密钥可用于对计算机上的任何包进行签名,包括来自存档的包。现在您应该只允许密钥仅签署特定的包。用户 Trudy 对 UNIX.SE 的完整回答