当前位置: 首页 > news >正文

解决 Linux 下 “E: 仓库xxx没有数字签名” 问题

输入命令 sudo apt-get update 后,出现以下警告:

这个错误表明 Ubuntu 系统无法验证阿里云镜像仓库的签名,通常这是由于缺少或过时的 GPG 密钥导致的。以下是解决方法:

目录

  • 一、更新 APT 密钥
    • 1. 出现错误: 软件包 debian-archive-keyring 没有可安装候选
      • 1)修改命令
      • 2)直接更新 Ubuntu 密钥(推荐)
      • 3)检查网络连接
      • 4)检查是否有第三方软件源依赖 debian-archive-keyring
    • 2. 出现错误:找不到命令 sudo: apt-key
  • 二、更换镜像源
  • 三、手动下载密钥
  • 四、临时忽略签名验证(不推荐)
  • 五、其他
    • 1. 由于没有公钥,无法验证下列签名
    • 2. 软件源含有互相冲突的值


一、更新 APT 密钥

  • 首先尝试更新软件包列表并安装缺失的密钥:
sudo apt update
sudo apt install -y debian-archive-keyring ubuntu-keyring
  • 手动下载并添加 Ubuntu 密钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
sudo apt update

1. 出现错误: 软件包 debian-archive-keyring 没有可安装候选

这个错误通常是因为 Ubuntu 系统版本较新(如 24.04),而 debian-archive-keyring 可能已经不再默认包含在官方仓库中,或者你的软件源配置有问题。以下是解决方法:

1)修改命令

sudo apt install -y debian-archive-keyring ubuntu-keyring 改为 sudo apt install -y ubuntu-keyring

2)直接更新 Ubuntu 密钥(推荐)

  • 手动添加 Ubuntu GPG 密钥,输入命令:sudo mkdir -p /etc/apt/keyrings

  • 输入下面命令,然后 Ctrl + C 退出

sudo gpg --homedir /tmp --no-default-keyring --keyring /etc/apt/keyrings/ubuntu-archive-keyring.
  • 输入命令:gpg --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

  • 运行上述命令后,GPG 会自动保存密钥到本地密钥环,验证密钥是否已导入只需输入命令:gpg --list-keys 3B4FE6ACC0B21F32 ,如果看到类似下列输出,说明导入成功:

pub   rsa4096 2012-05-11 [SC]3B4FE6ACC0B21F32
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>
  • 更新 APT 并安装 ubuntu-keyring,输入以下命令:
sudo apt update
sudo apt install ubuntu-keyring

如果 gpg 卡住或报错

  • 强制刷新 GPG 密钥服务器:
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3B4FE6ACC0B21F32
  • 检查网络连接:
ping keyserver.ubuntu.com

如果无法访问,尝试更换 DNS(如 8.8.8.8)或使用代理。

  • 手动下载并导入密钥:
curl -sSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3B4FE6ACC0B21F32 | gpg --import -

后续操作

  • 导入密钥后,确保 APT 能识别它:sudo apt update

  • 如果仍然报错 NO_PUBKEY,可能需要手动导出密钥供 APT 使用:

sudo gpg --export --armor 3B4FE6ACC0B21F32 | sudo apt-key add -
sudo apt update

注意:如果 apt-key 已废弃(Ubuntu 22.04+),改用:

curl -fsSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3B4FE6ACC0B21F32 | sudo gpg --dearmor -o /etc/apt/keyrings/ubuntu-archive.gpg
echo "deb [signed-by=/etc/apt/keyrings/ubuntu-archive.gpg] http://archive.ubuntu.com/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/ubuntu-archive.list
sudo apt update

利用 cat /etc/issue 命令查看 Ubuntu 版本。

3)检查网络连接

如果仍然报错,可能是网络问题或镜像源不可用,输入命令:ping archive.ubuntu.com ,如果无法访问,尝试:

  • 更换 DNS(如 8.8.8.8 或 1.1.1.1)

  • 使用代理(如有必要)

  • 等待镜像源恢复

4)检查是否有第三方软件源依赖 debian-archive-keyring

grep -r "debian-archive-keyring" /etc/apt/

如果发现某些 .list 文件引用了它,可以:

  • 注释掉相关行(在行首加 #)

  • 删除该文件(如果是第三方软件源)

  • 联系该软件源维护者,询问是否提供 Ubuntu 24.04 支持

2. 出现错误:找不到命令 sudo: apt-key

使用 GPG 替代 apt-key:由于安全性原因,apt-key 已被弃用,推荐直接使用 GPG 管理密钥。

二、更换镜像源

如果问题持续,建议更换为官方或其他可靠镜像源:

  • 备份当前源列表:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

  • 编辑源列表:sudo vim /etc/apt/sources.list

  • 将 mirrors.aliyun.com 替换为其他镜像(如 archive.ubuntu.com 或其他国内镜像)

官方源(推荐):

deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse

国内镜像(如阿里云、清华源):

deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
  • 更新 APT :sudo apt update

三、手动下载密钥

  • 检查网络连接(确保能访问 keyserver.ubuntu.com):ping keyserver.ubuntu.com

  • 手动下载密钥(如果 apt-key 失效):

wget -qO- https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3B4FE6ACC0B21F32 | sudo gpg --dearmor -o /usr/share/keyrings/ubuntu-archive-keyring.gpg
  • 清理缓存并重试:
sudo apt clean
sudo apt update

四、临时忽略签名验证(不推荐)

如果急需更新,可以临时忽略签名验证(安全性较低):sudo apt update --allow-insecure-repositories

或强制更新(不推荐,仅临时使用):sudo apt update --allow-unauthenticated

五、其他

1. 由于没有公钥,无法验证下列签名

如果出现上述问题,解决方法为:从 Ubuntu 的密钥服务器获取并添加缺失的公钥。

  • 使用 gpg 从 keyserver 获取密钥:
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 871920D1991BC93C

此命令将从密钥服务器获取公钥并添加到你的系统中。

  • 检查是否成功导入:gpg --list-keys 871920D1991BC93C 。如果成功,会显示下图所示的类似文本:
pub   rsa4096 2018-09-17 [SC]871920D1991BC93C
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>
  • 导出密钥并添加到 APT 信任列表(Ubuntu 22.04+ 推荐方式):
sudo mkdir -p /etc/apt/keyrings
gpg --export --armor 871920D1991BC93C | sudo tee /etc/apt/keyrings/ubuntu-archive.gpg > /dev/null
  • 在 sources.list 中引用该密钥:编辑你的软件源文件(如 /etc/apt/sources.list 或 /etc/apt/sources.list.d/ubuntu.sources):
cd /etc/apt
vim sources.list

写入以下 signed-by 字段:

deb [signed-by=/etc/apt/keyrings/ubuntu-archive.gpg] http://archive.ubuntu.com/ubuntu noble main

i 键进入写模式,Esc 键退出写模式,:wq 保存并退出文件。

  • 更新 APT :sudo apt update

其他方法:手动下载密钥并导入(适用于网络问题)

如果 gpg --keyserver 无法连接,可以手动下载并导入:

  • 从 Ubuntu 密钥服务器获取密钥:
curl -sSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x871920D1991BC93C" | gpg --import -
  • 导出并添加到 APT :
gpg --export --armor 871920D1991BC93C | sudo tee /etc/apt/keyrings/ubuntu-archive.gpg > /dev/null
  • 更新软件源并验证:sudo apt update

2. 软件源含有互相冲突的值

错误原因:在 /etc/apt/sources.list 或 /etc/apt/sources.list.d/*.list 中多次指定了不同的 Signed-By 路径。

上述错误是因为你的 APT 软件源配置中 Signed-By 字段引用了多个不同的 GPG 密钥文件,导致冲突。解决方法为:

  • 检查冲突的软件源:grep -r "Signed-By" /etc/apt/ ,这会列出所有包含 Signed-By 的配置行,找到冲突的地方。

  • 统一使用同一个密钥文件:

# 全部改用 ubuntu-archive.gpg
sudo sed -i 's|/etc/apt/keyrings/ubuntu-archive-2018.gpg|/etc/apt/keyrings/ubuntu-archive.gpg|g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list# 全部改用 ubuntu-archive-2018.gpg
sudo sed -i 's|/etc/apt/keyrings/ubuntu-archive.gpg|/etc/apt/keyrings/ubuntu-archive-2018.gpg|g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list# 手动编辑文件
sudo nano /etc/apt/sources.list

检查并确保所有 Signed-By 指向 同一个密钥文件,例如:

deb [signed-by=/etc/apt/keyrings/ubuntu-archive.gpg] http://archive.ubuntu.com/ubuntu noble main
  • 删除多余的密钥文件(可选):如果 ubuntu-archive-2018.gpg 不再需要,使用命令 sudo rm /etc/apt/keyrings/ubuntu-archive-2018.gpg 删除文件,然后确保所有 sources.list 引用的是 ubuntu-archive.gpg 。
http://www.xdnf.cn/news/1272997.html

相关文章:

  • 编程基础之多维数组——同行列对角线的格
  • scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释
  • (Python)爬虫进阶(Python爬虫教程)(CSS选择器)
  • stm32没有CMSIS文件
  • 【精彩回顾·成都】成都 User Group×柴火创客空间:开源硬件驱动 AI 与云的创新实践!
  • vue和react和uniapp的状态管理分别是什么,并且介绍和怎么使用
  • Day38--动态规划--322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结
  • 如何理解SA_RESTART”被信号中断的系统调用自动重启“?
  • Vue3 组件化开发
  • 人工智能技术发展历史演变
  • Filter,Interceptor拦截器-登录校验
  • 关于城市农村创业的一点构想
  • RecyclerView 缓存机制
  • 堆----3.数据流的中位数
  • Slab 算法浅析
  • HTML全景效果实现
  • 【Python 语法糖小火锅 · 第 2 涮】
  • 容器技术基础与实践:从镜像管理到自动运行配置全攻略
  • 【数据分享】各省农业土地流转率(2010-2023)
  • 【Python 语法糖小火锅 · 第 4 涮】
  • 【Python 语法糖小火锅 · 第 3 涮】
  • 【unitrix数间混合计算】2.9 小数部分特征(t_non_zero_bin_frac.rs)
  • 【Canvas与旗帜】圆角蓝底大黄白星十一红白带旗
  • UE破碎Chaos分配模型内部面材质
  • CentOS7编译安装GCC
  • 【Python 高频 API 速学 ④】
  • Spring学习笔记:Spring AOP入门以及基于Spring AOP配置的深入学习与使用
  • 嵌入式软件工程师笔试题(二)
  • 腾讯COS云存储入门
  • 原创邮件合并Python工具使用说明(附源码)