Debian apt update 签名校验失败(NO_PUBKEY)?
apt update 报 NO_PUBKEY 签名校验失败,是缺少 GPG 公钥。定位是哪个仓库缺哪把键,按官方渠道导入公钥后重试,切勿为省事关闭签名校验。
简短答案
apt update 报 NO_PUBKEY / 签名校验失败,是本地缺少对应仓库的 GPG 公钥。先定位是哪个仓库缺哪把键,再从官方渠道导入该公钥后重试;为省事关掉签名校验是下策,别走。
现象对照
| 报错 | 含义 |
|---|---|
NO_PUBKEY <指纹> |
本地没有该仓库的公钥 |
| 校验失败(有键但签不上) | 公钥/软件包版本不匹配或包被改动 |
| 只有个别仓库失败 | 该仓库的键单独缺失 |
排查步骤
# 1. 看具体哪个仓库、缺哪把键(记下报错里的指纹)
sudo apt update 2>&1 | grep -iE 'NO_PUBKEY|signed|invalid'
# 2. 确认该仓库定义在哪(.sources / .list)
grep -rE '<代号|仓库名>' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
# 3. 从官方渠道导入公钥(键的获取方式以官方文档为准)
sudo apt-key # 旧机制;新版建议把公钥放入 /etc/apt/trusted.gpg.d/
# 将对应公钥文件放入 /etc/apt/trusted.gpg.d/ 后重新 update
# 4. 重试
sudo apt update
- 缺哪把键,就导入哪把:不要把整个签名校验关掉(
Acquire::Check-Valid-Until、信任未签名等),那会让apt失去对包完整性的把关。 - 校验失败但公钥明明在:多半是公钥与仓库版本不匹配或本地包被改动,先核对仓库指向的代号/版本是否正确,再重导键。
- 公钥来源必须是官方渠道,第三方/来路不明的键一律不导,防止被投毒。
注意:键缺失是「本地没这把公钥」,不是「包坏了」;但校验失败 ≠ 可以绕过,绕过签名校验等于放弃安全底线。仓库结构与签名机制以 Debian 13.7.0 DVD-1 条目 为准,总览见 Debian 索引,网络安装版 Debian 13.7.0 netinst 条目。
操作小结
apt update抓 NO_PUBKEY 的指纹与仓库。- 查该仓库定义在哪、指向哪个代号。
- 从官方渠道导入对应公钥到 trusted.gpg.d。
- 重试 update;仍失败核对仓库版本,勿关校验。