提示代码如下:
─# apt update
获取:1 http://mirrors.ustc.edu.cn/kali kali-rolling InRelease [41.5 kB]
错误:1 http://mirrors.ustc.edu.cn/kali kali-rolling InRelease
由于没有公钥,无法验证下列签名: NO_PUBKEY ED65462EC8D5E4C5
Warning: GPG 错误:http://mirrors.ustc.edu.cn/kali kali-rolling InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY ED65462EC8D5E4C5
Error: 仓库 "http://mirrors.ustc.edu.cn/kali kali-rolling InRelease" 没有数字签名。
Notice: 无法安全地用该源进行更新,所以默认禁用该源。
Notice: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
Notice: 仓库'Kali Linux'将其'firmware component'值从'non-free'修改到了'non-free-firmware'
Notice: More information about this can be found online at: https://www.kali.org/blog/non-free-firmware-transition/
一、步骤:
-
运行:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5
-
然后再次运行:
sudo apt update
如果apt-key命令不存在,我们可以使用gpg方法:
sudo gpg --homedir /tmp --no-default-keyring --keyring /etc/apt/trusted.gpg.d/kali-missing-key.gpg --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5
或者更简单的,使用以下方法(将密钥直接添加到/etc/apt/trusted.gpg.d/):
sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/kali-key.gpg --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5
但是,由于apt的更新,现在更推荐使用单独的keyring文件,并且通过sources.list中的signed-by来指定,但这里我们只是临时修复,所以直接添加到信任密钥中。
然而,在Debian 11及更高版本中,推荐的方法是使用keyring文件,并放在/usr/share/keyrings/目录下,然后在源中指定。但这里我们并没有修改源,所以直接添加到系统信任密钥中可能是最简单的。
但是,请注意,Kali基于Debian,所以我们按照Debian的方式处理。
我选择使用apt-key,因为这是当前最快捷的方法。
让我们执行:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ED65462EC8D5E4C5
如果执行成功,再运行apt update
。
如果遇到apt-key命令不存在,我们再使用gpg方法。
另外,如果防火墙阻止了hkp端口(11371),我们可以使用hkps://keyserver.ubuntu.com:443(安全连接)或者使用http协议(但通常hkp协议使用80端口,而hkps使用443端口)。
由于公钥服务器可能使用不同的端口,我们可以尝试使用hkp的80端口,或者使用hkps的443端口。
如果上述方法都失败,我们可以尝试从其他途径获取公钥,比如从Kali官方网站下载。
但首先,我们尝试使用keyserver.ubuntu.com来获取。
因此,我们给出以下解决方案:
遇到此错误是因为系统缺少用于验证 Kali 仓库签名的 GPG 公钥(密钥 ID:ED65462EC8D5E4C5)。以下是修复步骤:
解决方案:
下载缺失的公钥
执行以下命令从公钥服务器获取密钥:
bash
sudo gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5
将公钥转换为 apt 兼容格式
将密钥导出到 apt 的信任密钥目录:
bash
sudo gpg --export --armor ED65462EC8D5E4C5 | sudo tee /etc/apt/trusted.gpg.d/kali-key.asc > /dev/null
更新 apt 缓存
重新运行更新命令验证修复:
bash
sudo apt update
附加说明:
密钥有效性:ED65462EC8D5E4C5 是 Kali Linux 官方签名密钥,确保从可信源(如 keyserver.ubuntu.com)获取。
仓库变更通知:输出中的 Notice 提示 firmware 组件已从 non-free 迁移至 non-free-firmware,这是正常变更,无需操作。
镜像源问题:若步骤 1 因网络问题失败,可尝试:
bash
wget -qO - https://archive.kali.org/archive-key.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kali-key.gpg
验证:
执行 sudo apt update 后,应不再出现 NO_PUBKEY 错误,可正常更新软件包列表。
⚠️ 注意:避免使用已弃用的 apt-key add 命令,推荐上述 gpg 方法以确保兼容性。