GPG签名校验失败本质是系统无法验证软件包来源可信性,主因包括密钥未导入、过期、仓库废弃或密钥环损坏;需提取错误中NO_PUBKEY后的16位密钥ID,再通过对应命令导入或更新密钥。

Linux 包管理器(如 apt、yum/dnf)在更新或安装软件包时提示 GPG 签名校验失败,本质是系统无法验证软件源发布的包是否来自可信发布者。核心原因通常是:密钥未导入、密钥过期、源配置指向了错误/废弃的仓库、或本地密钥环损坏。
确认报错来源和具体密钥 ID
先看完整错误信息,例如:
W: GPG error: http://archive.ubuntu.com/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 871920D1991BC93C重点提取 NO_PUBKEY 后的 16 位十六进制字符串(如 871920D1991BC93C),这是缺失或失效的签名公钥 ID,后续操作都围绕它展开。
尝试自动导入缺失密钥(推荐优先执行)
多数主流发行版提供一键导入工具:
-
Ubuntu/Debian:运行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C(替换为你自己的密钥 ID); -
较新 Ubuntu(22.04+)或已弃用 apt-key 的系统:改用
sudo gpg --dearmor -o /usr/share/keyrings/xxx-archive-keyring.gpg方式,但更稳妥的是直接下载官方提供的*-keyring包(如ubuntu-keyring)并重装; -
CentOS/RHEL/Rocky/AlmaLinux:运行
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*或从对应仓库官网下载最新 GPG 密钥(如https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-rockyofficial),再用rpm --import导入。
检查软件源是否已停用或迁移
某些错误源于你仍在使用已下线的镜像或旧版仓库(如 Ubuntu 16.04 xenial、Debian oldstable)。请核对 /etc/apt/sources.list 或 /etc/apt/sources.list.d/*.list 中的 URL:
- 是否包含
http://明文协议?现代系统默认禁用不安全源,应改为https://; - 发行版代号是否过时?例如还在用
focal却实际已升级到jammy; - 第三方 PPA 或第三方 repo 是否长期未维护?可临时注释掉对应行,运行
sudo apt update观察是否仍报错,定位问题源。
清理并重建本地密钥环(终极手段)
若多次导入无效,可能是 /etc/apt/trusted.gpg 或 /usr/share/keyrings/ 下密钥文件损坏:
- 备份原有密钥:
sudo cp -r /etc/apt/trusted.gpg /etc/apt/trusted.gpg.bak; - 清空旧密钥(谨慎!仅限确认无关键自定义密钥时):
sudo rm /etc/apt/trusted.gpg && sudo apt-key list会提示空,然后重新导入所有必需密钥; - 更安全做法:保留
/usr/share/keyrings/下的官方密钥文件,删除/etc/apt/trusted.gpg.d/*.asc中可疑的第三方密钥,再逐个重装对应源的*-keyring包。
不复杂但容易忽略——GPG 错误几乎都卡在“密钥没对上”这一步。盯住报错里的密钥 ID,查清它属于哪个源,再找对地方导入,基本就解决了。


















