Debian更新源时出现签名无法进行验证

问题

有些时候在添加软件源,更新软件源后,会提示所添加的软件源公钥无法验证,造成更新失败。
比如添加deb https://www.deb-multimedia.org bullseye main non-free源,如果不用命令

1
sudo apt install deb-multimedia-keyring

安装密钥,那么更新源后会提示:
1
2
3
W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:https://www.deb-multimedia.org bullseye InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 5C808C2B65558117
W: 无法下载 https://www.deb-multimedia.org/dists/bullseye/InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY 5C808C2B65558117
W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

解决方法

[推荐方法]

1
2
3
4
5
6
7
8
9
10
# 从 keyring.debian.org 下载公钥,导入密钥
curl -s https://www.deb-multimedia.org | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/deb-multimedia.gpg --import
sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/deb-multimedia.gpg --keyserver keyring.debian.org --recv 5C808C2B65558117
# 输出
gpg: 密钥 5C808C2B65558117:公钥 “Christian Marillat <marillat@debian.org>” 已导入
gpg: 处理的总数:1
gpg: 已导入:1
# 确保运行以下命令以设置正确的文件权限
sudo chmod 644 /etc/apt/trusted.gpg.d/deb-multimedia.gpg
# 其中`5C808C2B65558117`为更新源后提示无法验证的公钥字符。

采用以下即将弃用的方法会提示警告。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo  gpg --keyserver keyring.debian.org --recv-keys 5C808C2B65558117
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 5C808C2B65558117:公钥 “Christian Marillat <marillat@debian.org>” 已导入
gpg: 处理的总数:1
gpg: 已导入:1

# 切换到`root`用户,把下载的key添加到本地trusted数据库中。
# 输出65558117用户的公钥,armor参数可以将其转换为ASCII码显示
su
密码:
sudo gpg --armor --export 65558117 | apt-key add -
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK
# 其中 65558117 为更新源后提示无法验证的公钥后八位字符。

:如果您已经知道所需公钥的 URL,请使用 wgetcurl 下载并导入它。请记住将文件权限从 600 更新到 644

1
2
curl -s https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/earth.gpg --import
sudo chmod 644 /etc/apt/trusted.gpg.d/earth.gpg

查询已安装的key

1
2
3
gpg --list-keys --keyring /etc/apt/trusted.gpg.d/deb-multimedia.gpg
# 或者
apt-key list

删除安装的key
1
2
3
4
sudo apt-key del 65558117
# 或者
cd /etc/apt/trusted.gpg.d/
sudo rm deb-multimedia.gpg

更新

再更新安装源就不会出现错误了。

1
sudo apt update && sudo apt upgrade

参考资料
1、2021年-用更现代的方法使用PGP-下
2、警告:apt 键已弃用