NO_PUBKEY错误表明系统缺少验证第三方源所需的GPG公钥,需用sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071导入对应密钥,并通过apt-key list和sudo apt update验证是否生效。

麒麟系统执行apt update或安装软件时突然弹出“NO_PUBKEY FEEA9169307EA071”这类报错,说明系统缺少验证第三方软件源所需的GPG公钥,导致无法信任该源的软件包,安装直接中断。
确认报错中的密钥ID
打开终端,运行 sudo apt update 2>&1 | grep NO_PUBKEY,从输出中精准提取16位密钥ID(如FEEA9169307EA071)。这一步不能靠记忆或截图拼凑——输错一位就会失败。
如果输出含多个NO_PUBKEY,记下全部ID,后续需逐个导入。
用apt-key导入公钥
方法一:标准命令导入
执行 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071,将
方法二:备用密钥服务器(国内更稳)
当方法一失败时,改用 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FEEA9169307EA071。端口80比默认11371更容易穿透企业防火墙。
【注意】apt-key已被Debian官方标记为废弃工具,但麒麟V10 SP1及之前版本仍必须用它——换用gpg命令会因路径和权限问题导致密钥不生效。
验证密钥是否真正生效
第一步:检查密钥是否已存入本地钥匙环
运行 apt-key list | grep -A1 "FEEA9169307EA071",若返回类似pub rsa4096 2020-01-01 [SC] [expires: 2025-01-01]的行,说明导入成功。
第二步:强制刷新软件包列表
执行 sudo apt update。此时若不再出现对应NO_PUBKEY报错,且末尾显示获取:1 http://xxx InRelease [xxx kB],即表示该源已通过签名验证。
第三步:测试安装(可选)
挑一个该源提供的小工具包,例如sudo apt install -y curl,确认能正常下载并校验安装——这步能暴露密钥虽存在但未被正确关联的隐性故障。
批量处理多个缺失密钥
① 将所有报错中的密钥ID整理成一行,用空格分隔(如:FEEA9169307EA071 8B57C5C2836F4BEB BA6932366A755776)
② 执行单行命令导入:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071 8B57C5C2836F4BEB BA6932366A755776
③ 立即运行 sudo apt update 验证——不要跳过这步,因为部分密钥可能因服务器临时不可达而只导入了其中几个。
这一步操作起来很简单,直接把密钥ID粘贴进命令就行。但若ID之间用了逗号或换行分隔,命令会静默失败且不报错,必须严格用空格。

















