kali在apt update报错提示没有公钥

提示代码如下:

复制代码
─# 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/

一、步骤:

  1. 运行:
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5

  2. 然后再次运行:
    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 方法以确保兼容性。

相关推荐
加勒比之杰克20 分钟前
从阻塞 IO 到 epoll:把 Linux 网络 IO 一次讲透
linux·网络·windows·select·多路转接·epoll·poll
书到用时方恨少!33 分钟前
Linux 常用指令使用指南:从入门到“救命”
linux·运维·服务器
默|笙40 分钟前
【Linux】线程同步与互斥_同步(1)
linux
Deitymoon40 分钟前
linux——条件变量
linux
wwj888wwj1 小时前
Ansible基础(复习2)
linux·运维·服务器·ansible
无心水1 小时前
2、5分钟上手|PyPDF2 快速提取PDF文本
java·linux·分布式·后端·python·架构·pdf
薛定谔的悦1 小时前
IEC 60870-5-104协议解析——电力系统远动通信实战
linux·状态模式·储能·ems
ꪶꪜ4451 小时前
vlan综合实验
linux·运维·网络
咋吃都不胖lyh1 小时前
opencode在Ubuntu下无法复制
linux·运维·ubuntu
亚空间仓鼠1 小时前
OpenEuler系统常用服务(八)
linux·运维·服务器·网络