Ubuntu16.04更新系统源时出现错误提示W: GPG 错误,签名无效/没有公钥

本文介绍了在Ubuntu16.04系统中遇到更新源时W: GPG错误的解决方法,包括从相应镜像站和keyserver获取新的GPG Key,以及处理没有公钥的额外问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ubuntu16.04更新系统源时出现错误提示W: GPG 错误

问题

Ubuntu16.04更换源后运行apt-get update命令时出现了以下问题

命中:1 http://linux.teamviewer.com/deb stable InRelease                        
命中:2 http://archive.canonical.com/ubuntu xenial InRelease                    
获取:3 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]    
获取:4 http://repo.mysql.com/apt/ubuntu xenial InRelease [21.6 kB]             
错误:4 http://repo.mysql.com/apt/ubuntu xenial InRelease                       
  下列签名无效: KEYEXPIRED 1550412832  KEYEXPIRED 1550412832  KEYEXPIRED 1550412832
命中:5 http://ppa.launchpad.net/nm-l2tp/network-manager-l2tp/ubuntu xenial InRelease
命中:6 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease       
获取:7 http://security.ubuntu.com/ubuntu xenial-security/main amd64 DEP-11 Metadata [68.0 kB]
命中:8 http://cn.archive.ubuntu.com/ubuntu xenial InRelease    
获取:9 http://cn.archive.ubuntu.com/ubuntu xenial-update
heep@sheep-virtual-machine:~$ sudo apt update 命中:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial InRelease 命中:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial-updates InRelease 命中:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial-backports InRelease 获取:4 http://packages.ros.org/ros/ubuntu xenial InRelease [4,692 B] 错误:4 http://packages.ros.org/ros/ubuntu xenial InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY F42ED6FBAB17C654 命中:5 http://security.ubuntu.com/ubuntu xenial-security InRelease 正在读取软件包列表... 完成 W: 目标 Packages (main/binary-amd64/Packages) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Packages (main/binary-all/Packages) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-zh_CN) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-zh) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-en) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 DEP-11 (main/dep11/Components-amd64.yml) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 DEP-11-icons (main/dep11/icons-64x64.tar) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: GPG 错误:http://packages.ros.org/ros/ubuntu xenial InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY F42ED6FBAB17C654 E: 仓库 “http://packages.ros.org/ros/ubuntu xenial InRelease” 没有数字签名。 N: 无法安全地用该源进行更新,所以默认禁用该源。 N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。 W: 目标 Packages (main/binary-amd64/Packages) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Packages (main/binary-all/Packages) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-zh_CN) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-zh) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 Translations (main/i18n/Translation-en) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 DEP-11 (main/dep11/Components-amd64.yml) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次 W: 目标 DEP-11-icons (main/dep11/icons-64x64.tar) 在 /etc/apt/sources.list.d/ros-latest.list:1 和 /etc/apt/sources.list.d/ros.list:1 中被配置了多次
最新发布
06-29
<think>我们正在解决MySQL仓库OpenPGP签名验证失败的问题,具体密钥ID为:BCA43417C3B485DD128EC6D4B7B3B788A8D3785C,系统为UbuntuBionic。问题分析:当我们添加第三方APT仓库,需要导入仓库的GPG密钥来验证软件包签名,否则会遇到"NO_PUBKEY"或签名验证失败的错误。解决方案:我们需要将指定的密钥添加到系统的APT信任密钥链中。具体步骤:1.确保`dirmngr`已安装(用于管理密钥):```bashsudoaptinstalldirmngr```2.通过密钥服务器导入缺失的密钥(使用密钥ID的最后8个字符):```bashsudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys8A8D3785C```注意:这里我们使用密钥ID的后8位`8A8D3785C`,也可以使用完整ID,但通常使用后8位即可。3.如果步骤2失败(可能由于网络问题或密钥服务器问题),可以尝试备用方法:```bashgpg--keyserverhkp://keyserver.ubuntu.com:80--recv8A8D3785Cgpg--export8A8D3785C|sudoapt-keyadd-```4.验证密钥是否成功导入:```bashapt-keylist|grep-A5"8A8D3785C"```输出中应显示类似内容:```pubrsa20482019-07-17[SC][expires:2024-07-15]BCA43417C3B485DD128EC6D4B7B3B788A8D3785Cuid[unknown]MySQLReleaseEngineering<mysql-build@oss.oracle.com>```5.更新软件包列表:```bashsudoaptupdate```此签名验证错误应已解决。如果仍然遇到问题,请检查仓库配置文件中是否正确引用了密钥?确保仓库配置正确:检查MySQL仓库配置文件(通常为`/etc/apt/sources.list.d/mysql.list`)是否包含类似以下行:```textdeb[signed-by=/etc/apt/keyrings/mysql.gpg]http://repo.mysql.com/apt/ubuntu/bionicmysql-apt-config```注意:在较新的Ubuntu系统中,推荐将密钥文件单独放在`/etc/apt/keyrings/`目录下,并使用`[signed-by]`选项指定。如何手动下载密钥文件并配置?1.创建存储密钥的目录:```bashsudomkdir-p/etc/apt/keyrings```2.下载密钥文件(使用wget或curl):```bashwget-q-O-https://www.mysql.com/downloads/gpg/?file=mysql-apt-config_0.8.25-1_all.deb|gpg--dearmor|sudotee/etc/apt/keyrings/mysql.gpg>/dev/null```或者直接导入已知的密钥:```bashsudogpg--no-default-keyring--keyring/etc/apt/keyrings/mysql.gpg--keyserverkeyserver.ubuntu.com--recv-keys8A8D3785C```3.确保仓库配置文件(`/etc/apt/sources.list.d/mysql.list`)中每一行仓库URL前都有`[signed-by=/etc/apt/keyrings/mysql.gpg]`标志,例如:```textdeb[signed-by=/etc/apt/keyrings/mysql.gpg]http://repo.mysql.com/apt/ubuntu/bionicmysql-apt-configdeb[signed-by=/etc/apt/keyrings/mysql.gpg]http://repo.mysql.com/apt/ubuntu/bionicmysql-8.0```4.再次更新:```bashsudoaptupdate```补充:如果使用的不是UbuntuBionic,而是其他版本(如Focal),请确保仓库配置中使用了正确的发行版代号。以上步骤应能解决OpenPGP签名验证失败的问题。§§相关问题§§1.如何验证APT仓库签名的有效性?2.如何解决其他第三方仓库(如Docker,Kubernetes)的GPG密钥错误?3.在Debian系统中管理APT仓库密钥与Ubuntu有何不同?</think> 以下是解决 MySQL 仓库 OpenPGP 签名验证失败问题的完整方案,针对密钥 `BCA43417C3B485DD128EC6D4B7B3B788A8D3785C` 和 Ubuntu Bionic 系统: --- ### 🔍 问题原因分析 当使用 `apt update` 更新 MySQL 仓库出现: ``` W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY BCA43417C3B485DD128EC6D4B7B3B788A8D3785C ``` 这是因为系统缺少验证 MySQL 仓库签名GPG 密钥[^1]。 --- ### 🔧 解决方案分步指南 #### 1️⃣ **确认缺失的密钥ID** 从错误信息中提取完整密钥ID: `BCA43417C3B485DD128EC6D4B7B3B788A8D3785C` 或使用后8位简化操作:`8A8D3785C` #### 2️⃣ **安装密钥管理工具** ```bash sudo apt install dirmngr ``` #### 3️⃣ **通过密钥服务器导入** ```bash sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8A8D3785C ``` > ✅ 成功输出:`gpg: key B7B3B788A8D3785C: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported` #### 4️⃣ **备选方案:手动下载密钥** ```bash curl -fsSL https://www.mysql.com/downloads/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mysql.gpg ``` #### 5️⃣ **永久绑定密钥到仓库** ```bash # 创建密钥存储目录 sudo mkdir -p /etc/apt/keyrings # 导出密钥到专有文件 sudo gpg --no-default-keyring \ --keyring /etc/apt/keyrings/mysql.gpg \ --keyserver keyserver.ubuntu.com \ --recv-keys 8A8D3785C # 更新仓库配置 sudo nano /etc/apt/sources.list.d/mysql.list ``` 修改每行开头为: ```text deb [signed-by=/etc/apt/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu bionic mysql-apt-config ``` #### 6️⃣ **验证修复** ```bash sudo apt update ``` > ✅ 成功标志:不再出现 `NO_PUBKEY` 警告 --- ### ⚠️ **常见错误处理** 1. **连接密钥服务器超** ```bash sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 8A8D3785C ``` 2. **密钥ID冲突强制安装** ```bash sudo apt-key del 8A8D3785C # 先删除旧密钥 sudo apt-key adv --recv-keys --keyserver keys.gnupg.net 8A8D3785C ``` 3. **验证密钥指纹匹配** ```bash apt-key list | grep -A1 "MySQL Release Engineering" ``` 输出必须包含:`Key fingerprint = BCA4 3417 C3B4 85DD 128E C6D4 B7B3 B788 A8D3 785C` --- ### 📌 **密钥安全管理最佳实践** 1. **定期更新密钥** ```bash sudo apt-key update ``` 2. **设置密钥自动刷新** ```bash sudo crontab -e ``` 添加:`0 3 * * * /usr/bin/apt-key update >/dev/null 2>&1` 3. **移除无用密钥** ```bash sudo apt-key del [无效密钥ID] ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值