如何在 Linux 上自动安装丢失的 GPG 密钥

How to automate installation of missing GPG keys on Linux

我已经使用 Linux 容器多年了。我很惊讶我找不到关于这个问题的线索。场景:

我刚刚添加了一个新的包索引 (/etc/sources.list.d/example.list) 并想安装一个包,我们称之为 snailmail。

我运行命令:

apt-get update && apt-get install -y snailmail

我收到以下错误:

W: GPG error: https://example.com/snailmail/debian stable InRelease:
The following signatures couldn't be verified because the public key is not available:
NO_PUBKEY 7EF2A9D5F293ECE4

自动安装 GPG 密钥的最佳方法是什么?

这是一个方便的脚本,可以在构建过程中调用它来下载和安装通用 GPG 密钥(来自 Ubuntu 密钥服务器):

先决条件:

  • wget
for PUBKEY in $(apt-get update 2>&1 | grep NO_PUBKEY | awk '{print $NF}')
do
 wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x${PUBKEY}" -O - | sed -n '/BEGIN/,/END/p' | apt-key add - 2>/dev/null
done

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

#!/bin/sh -e
tmp="$(mktemp)"
sudo apt-get update 2>&1 | sed -En 's/.*NO_PUBKEY ([[:xdigit:]]+).*//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/.gpg" --export ""' sh  # to /etc/apt/trusted.gpg.d/*
rm "${tmp}"