NO_PUBKEY错误需先提取报错中16位密钥ID(如7EA0A9C3F273FCD8),再用sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8导入,最后执行sudo apt update验证生效。

看到 NO_PUBKEY 就直接导入对应密钥 ID
错误里出现 NO_PUBKEY ABCDEF1234567890,说明系统压根没这个仓库的公钥。别猜,先提取后面那串 16 位 ID(比如 7EA0A9C3F273FCD8),再导入:
- Debian/Ubuntu/Kali 系统:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8 - RHEL/CentOS/Rocky/AlmaLinux 系统:
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022(换成你实际软件的密钥 URL) - Ubuntu 22.04+ 或新版 Debian 已弃用
apt-key,应改用:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg,并在sources.list对应行加[arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
密钥已存在但验证仍失败,大概率是过期或被轮换
运行 rpm -qa gpg-pubkey*(RHEL系)或 apt-key list(Debian系),看是否已有该密钥。再查官网文档确认最新密钥指纹(如 MySQL 2022 密钥指纹是 3A79BD29),然后核对:
- RHEL系:
rpm -qi gpg-pubkey-3a79bd29-*查Fingerprint字段 - Debian系:
apt-key finger找对应 ID 的指纹 - 不一致就先清理旧密钥:
sudo rpm -e gpg-pubkey-5072e1f5-*或sudo apt-key del 5072E1F5,再重新导入官网最新密钥
换源后出错,不是地址改了就行,密钥也得同步更新
国内镜像(如清华、中科大、阿里云)虽加速下载,但必须配套导入其 GPG 密钥。Kali 用户常见操作是:
- 先改
/etc/apt/sources.list,比如换成:deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib - 再执行:
sudo apt update --allow-insecure-repositories(临时绕过,只为能装上kali-archive-keyring) - 接着装密钥包:
sudo apt install -y kali-archive-keyring - 最后正常更新:
sudo apt update
这个“先放行再装密钥”的步骤容易被跳过,结果陷入死循环:没密钥 → 不能更新 → 无法安装密钥包。
别急着加 --nogpgcheck,先排除时间与源配置问题
--nogpgcheck 或 apt update --allow-insecure-repositories 是调试手段,不是解法。真正该先检查的有两件事:
- 系统时间是否严重偏差?
timedatectl status看System clock synchronized是否为yes;不是就运行:sudo timedatectl set-ntp true - 源地址是否写成
http://?GPG 验证要求元数据通过 HTTPS 下载,http://会被拒绝;同时确认发行版代号是否匹配,比如当前是jammy,却还在用focal源 - 临时注释掉第三方源(在
/etc/apt/sources.list.d/或/etc/yum.repos.d/中),再apt update或dnf makecache,看错误是否消失,快速定位问题源
密钥环文件损坏(如 Debian 的 /etc/apt/trusted.gpg)比想象中更常见,尤其在多次手动导入后,这种底层损坏不会报明确错误,只会让验证静默失败。


















