我正在按照本指南安装elasticsearch ,但elasticsearch实际上并不是这个问题的一部分。
第一步,我需要添加密钥:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)
并收到以下消息:
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Run Code Online (Sandbox Code Playgroud)
安装过程很好,但由于它已被弃用,我正在寻找替代apt-key. (我安装这个包没有问题。)从man apt-key我看到
apt-key(8) 将最后在 Debian 11 和 Ubuntu 22.04 中可用。
...
因此,要与任何 apt 版本一起使用的二进制密钥环文件应始终使用 gpg --export 创建。
但它没有说 的替代方案apt-key add。我试过
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --export
Run Code Online (Sandbox Code Playgroud)
但没有用。wget那么when的管道apt-key拆掉之后我该怎么用呢?
FWD*_*ker 159
添加密钥/etc/apt/trusted.gpg.d是不安全的,因为它添加了所有存储库的密钥。这正是必须apt-key被弃用的原因。
与Signal 的操作类似。https://example.com/EXAMPLE.gpg如果您想使用中列出的存储库的密钥/etc/apt/sources.list.d/EXAMPLE.list,请使用:
sudo mkdir -m 0755 -p /etc/apt/keyrings/
wget -O- https://example.com/EXAMPLE.gpg |
gpg --dearmor |
sudo tee /etc/apt/keyrings/EXAMPLE.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/EXAMPLE.gpg
echo "deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt stable main" |
sudo tee /etc/apt/sources.list.d/EXAMPLE.list
sudo chmod 644 /etc/apt/sources.list.d/EXAMPLE.list
# Optional (you can find the email address / ID using `apt-key list`)
sudo apt-key del support@example.com
Run Code Online (Sandbox Code Playgroud)
虽然弃用通知建议将密钥添加到/etc/apt/trusted.gpg.d,但这是一个不安全的解决方案。引用Linux Uprising 的这篇文章:
进行此更改的原因是,当将用于对 APT 存储库进行签名的 OpenPGP 密钥添加到 或 时
/etc/apt/trusted.gpg,/etc/apt/trusted.gpg.d系统上配置的所有其他存储库上的 APT 无条件信任该密钥,即使这些存储库没有signed-by(见下文)选项官方 Debian / Ubuntu 存储库。因此,任何将其签名密钥添加到/etc/apt/trusted.gpg或/etc/apt/trusted.gpg.d替换系统上任何软件包的非官方 APT 存储库。因此,此更改是出于安全原因(您的安全)而进行的。
Linux Uprising 文章和Debian Wiki上解释了正确的解决方案:将密钥存储在/etc/apt/keyrings/(或者/usr/share/keyrings/如果密钥由软件包管理),然后在 apt 源列表中引用该密钥。
因此,合适的方法如下:
sudo mkdir -m 0755 -p /etc/apt/keyrings/
Run Code Online (Sandbox Code Playgroud)
https://example.com/EXAMPLE.gpg并将其存储在 中/etc/apt/keyrings/EXAMPLE.gpg。Debian wiki 解释说,您应该删除密钥(即将其从 base64 转换为二进制)以与旧软件兼容。这> /dev/null只是阻止二进制密钥在您的终端中显示。
wget -O- https://example.com/EXAMPLE.gpg | \
gpg --dearmor | \
sudo tee /etc/apt/keyrings/EXAMPLE.gpg > /dev/null;
sudo chmod 644 /etc/apt/keyrings/EXAMPLE.gpg
Run Code Online (Sandbox Code Playgroud)file /etc/apt/keyrings/EXAMPLE.gpg或者,您可以通过运行并检查输出
来验证您下载的文件确实是 PGP 密钥。/etc/apt/sources.list.d/并编辑它,以便它链接到您刚刚添加的密钥环。如果该文件不存在,您可以创建一个。最后,它应该看起来像这样:
deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt stable main
Run Code Online (Sandbox Code Playgroud)
apt-key(如果之前已添加)。运行sudo apt-key list以列出所有密钥,并找到之前添加的密钥。使用密钥的电子邮件地址或指纹,运行sudo apt-key del support@example.com.用于指定 apt 存储库的较新的 DEB822 格式更好且更易于使用,但尚未得到所有平台上的所有工具的完全支持。
不要运行上面提到的脚本,而是运行
deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt stable main
Run Code Online (Sandbox Code Playgroud)
sources.list.d您还可以使用较新的多行格式 DEB822,而不是对 中的源使用单行格式。这种格式对于人类和计算机来说更容易阅读,并且自 2015 年起在 apt 中可用
。Debian 和 Ubuntu 计划从 2023 年末开始使用 DEB822 作为默认格式
。Repolib 的文档进行了很好的比较,并涵盖了新格式背后的动机。。此外,apt 2.2.4 及更高版本支持将公钥直接嵌入到sources.list.
如果您维护托管在第三方存储库上的包,请考虑.sources为您的用户提供可选的填充 DEB822。
目前,这是这个答案中的一个单独部分而不是主要答案的原因是,一些仍然受支持的 Debian 和 Ubuntu 版本附带了旧版本的 apt。具体来说,Debian 9(EOL:2024-06-30)和 Ubuntu 20.04(EOL:2025-05-29)太旧了,但 Debian 10 及更高版本、Ubuntu 22.04 及更高版本还不错。此外,一些解析源文件而不是包装 apt 的工具可能还不能完全支持所有这些功能。
要从一行格式切换到 DEB822 格式,假设您有以下两个文件:
/etc/apt/sources.list.d/example.list:
deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt stable main
Run Code Online (Sandbox Code Playgroud)
/etc/apt/keyrings/EXAMPLE.gpg:(-----BEGIN PGP PUBLIC KEY BLOCK-----
mI0EZWiPbwEEANPyu6pUQEydxvf2uIsuuYOernFUsQdd8GjPE5yjlxP6pNhVlqNo
0fjB6yk91pWsoALOLM+QoBp1guC9IL2iZe0k7ENJp6o7q4ahCjJ7V/kO89mCAQ09
yHGNHRBfbCo++bcdjOwkeITj/1KjYAfQnzH5VbfmgPfdWF4KqS/TmJP9ABEBAAG0
G0phbmUgRG9lIDxqYW5lQGV4YW1wbGUub3JnPojMBBMBCgA2FiEEK8v49DttJG7D
35BwcvTpbeNfCTgFAmVoj28CGwMECwkIBwQVCgkIBRYCAwEAAh4BAheAAAoJEHL0
6W3jXwk4YLID/0arCzBy9utS8Q8g6FDtWyJVyifIvdloCvI7hqH51ZJ+Zb7ZLwwY
/p08+Xnp4Ia0iliwqSHlD7j6M8eBy/JJORdypRKqRIbe0JQMBEcAOHbu2UCUR1jp
jJTUnMHI0QHWQEeEkzH25og6ii8urtVGv1R2af3Bxi9k4DJwzzXc5Zch
=8hwj
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)
然后您可以将这两个文件替换为单个文件/etc/apt/sources.list.d/example.sources:
Types: deb
URIs: https://example.com/apt
Suites: stable
Components: main
Signed-By:
-----BEGIN PGP PUBLIC KEY BLOCK-----
.
mI0EZWiPbwEEANPyu6pUQEydxvf2uIsuuYOernFUsQdd8GjPE5yjlxP6pNhVlqNo
0fjB6yk91pWsoALOLM+QoBp1guC9IL2iZe0k7ENJp6o7q4ahCjJ7V/kO89mCAQ09
yHGNHRBfbCo++bcdjOwkeITj/1KjYAfQnzH5VbfmgPfdWF4KqS/TmJP9ABEBAAG0
G0phbmUgRG9lIDxqYW5lQGV4YW1wbGUub3JnPojMBBMBCgA2FiEEK8v49DttJG7D
35BwcvTpbeNfCTgFAmVoj28CGwMECwkIBwQVCgkIBRYCAwEAAh4BAheAAAoJEHL0
6W3jXwk4YLID/0arCzBy9utS8Q8g6FDtWyJVyifIvdloCvI7hqH51ZJ+Zb7ZLwwY
/p08+Xnp4Ia0iliwqSHlD7j6M8eBy/JJORdypRKqRIbe0JQMBEcAOHbu2UCUR1jp
jJTUnMHI0QHWQEeEkzH25og6ii8urtVGv1R2af3Bxi9k4DJwzzXc5Zch
=8hwj
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)
重要的是,您必须将每一行缩进(至少)一个空格,并且必须放置缩进.而不是空行。(删除空行会使密钥无效。)上面的脚本正是这样做的。
最后,如果您有一个指定确切路径的存储库,例如
deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt deb/
Run Code Online (Sandbox Code Playgroud)
那么你的 DEB822必须设置Suites: deb/(必须以 结尾/)并且不能有Components:一行。
man 5 sources.list在 Ubuntu 22.04 或更高版本中小智 20
答案在这里找到: https://suay.site/?p=526
简而言之 :
检索密钥并添加密钥:
curl -s URL | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/NAME.gpg --import
Run Code Online (Sandbox Code Playgroud)
授权用户 _apt :
sudo chown _apt /etc/apt/trusted.gpg.d/NAME.gpg
Run Code Online (Sandbox Code Playgroud)
正如当前接受的答案中提到的,向 /etc/apt/trusted.gpg.d 添加密钥是不安全的,因为它添加了所有存储库的密钥。这就是 apt-key 发出此警告的原因。
您可以使用更简单的解决方案,如下所示:
curl -fsSL https://example.com/EXAMPLE.gpg | sudo gpg --dearmor -o /usr/share/keyrings/EXAMPLE.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/EXAMPLE.gpg] \
https://example.com/apt stable main" \
| sudo tee -a /etc/apt/sources.list.d/EXAMPLE.list > /dev/null
sudo apt update
sudo apt install <package-name>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225813 次 |
| 最近记录: |