Ubuntu 18.04 ROS安装遇坑记:手把手教你修复‘EXPKEYSIG’签名无效错误

张开发
2026/4/21 0:59:29 15 分钟阅读

分享文章

Ubuntu 18.04 ROS安装遇坑记:手把手教你修复‘EXPKEYSIG’签名无效错误
Ubuntu 18.04 ROS安装遇坑记手把手教你修复‘EXPKEYSIG’签名无效错误第一次在Ubuntu上安装ROS时那种兴奋感很快被终端里鲜红的错误提示浇灭——EXPKEYSIG F42ED6FBAB17C654。作为机器人开发的基础环境ROS的安装本应是入门第一步却让无数开发者在这个密钥验证错误前折戟。这就像拿到了新玩具却发现电池仓上了锁而钥匙却不知所踪。1. 理解GPG密钥在ROS安装中的作用当你执行sudo apt update时系统会做一件至关重要的事验证软件源的完整性。Ubuntu使用GPGGNU Privacy Guard密钥来确认下载的软件包列表确实来自官方源而非被篡改的版本。这就好比网购时验证商家资质确保不会收到山寨货。ROS作为第三方软件源需要额外导入其官方密钥。常见的密钥问题通常表现为三种错误EXPKEYSIG密钥已过期本文重点解决的问题NO_PUBKEY密钥未导入BADSIG密钥不匹配或被篡改为什么密钥会过期Open Robotics等组织出于安全考虑会定期轮换密钥。如果本地系统长时间未更新就可能遇到过期密钥报错。这就好比你拿着过期的会员卡去超市收银员当然会拒绝优惠请求。2. 诊断密钥问题的具体原因遇到EXPKEYSIG错误时终端通常会显示类似这样的信息W: GPG error: http://packages.ros.org/ros/ubuntu bionic InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics infoosrfoundation.org关键信息提取密钥IDF42ED6FBAB17C654密钥所有者Open Robotics问题类型EXPKEYSIG过期验证当前密钥状态apt-key list | grep -A5 Open Robotics如果输出中包含expired字样即可确认是密钥过期问题。有时候问题可能更复杂比如多个密钥冲突密钥服务器连接问题系统时间不正确GPG验证依赖准确的时间提示遇到密钥问题时先检查系统时间是否正确。执行date命令查看如果偏差较大先用sudo ntpdate pool.ntp.org同步时间。3. 分步修复EXPKEYSIG错误3.1 删除旧密钥如有必要首先查看现有密钥sudo apt-key list如果发现过期密钥可以先删除sudo apt-key del F42ED6FBAB17C6543.2 从可靠密钥服务器获取新密钥使用apt-key adv命令获取新密钥sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C654参数解析--keyserver指定密钥服务器hkp协议默认使用11371端口--recv-keys指定要获取的密钥ID如果默认服务器响应慢可以尝试备用服务器sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys F42ED6FBAB17C654常见可用密钥服务器服务器地址地理位置协议端口keyserver.ubuntu.com全球hkp:11371pgp.mit.edu美国hkp:11371keys.gnupg.net欧洲hkp:11371pool.sks-keyservers.net全球池hkp:113713.3 验证密钥导入成功检查新密钥apt-key list | grep -A5 Open Robotics正常输出应显示密钥信息且无expired标记。例如pub rsa2048 2018-04-16 [SC] [expires: 2025-04-14] F42E D6FB AB17 C654 uid [ unknown] Open Robotics infoosrfoundation.org sub rsa2048 2018-04-16 [E] [expires: 2025-04-14]3.4 更新软件源缓存最后执行更新sudo apt update此时应该不再出现EXPKEYSIG错误ROS软件源可以正常更新。4. 深入理解密钥管理机制4.1 APT与GPG的工作流程当执行apt update时系统会下载InRelease或Release.gpg文件用本地密钥环中的公钥验证签名只有验证通过的软件源才会被信任这个过程确保了完整性软件包未被篡改真实性确实来自声称的发布者新鲜度使用的是最新软件列表4.2 现代替代方案signed-by较新的Ubuntu版本推荐使用signed-by替代直接操作apt-keysudo sh -c echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list这种方法将密钥存储在单独文件而非全局密钥环中更安全且易于管理。4.3 密钥过期的预防措施为避免将来再遇密钥问题定期检查密钥有效期apt-key list | grep -A5 expires关注ROS官方公告设置自动更新谨慎使用sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades5. 进阶处理特殊网络环境下的密钥问题在某些网络环境下可能会遇到连接密钥服务器超时的问题。这时可以尝试5.1 使用HTTP代替HKP协议sudo apt-key adv --keyserver http://keyserver.ubuntu.com --recv-keys F42ED6FBAB17C6545.2 手动下载并导入密钥从浏览器访问https://keyserver.ubuntu.com/pks/lookup?opgetsearch0xF42ED6FBAB17C654保存为ros-key.asc导入sudo apt-key add ros-key.asc5.3 使用备用端口有些网络可能屏蔽了11371端口尝试80端口sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C6546. 常见问题排查指南遇到问题不要慌按这个检查表逐步排查错误是否明确显示EXPKEYSIG是按本文方法处理否可能是其他类型密钥问题密钥服务器能否连通telnet keyserver.ubuntu.com 11371或curl http://keyserver.ubuntu.com:11371系统时间是否正确timedatectl status是否有防火墙干扰sudo ufw status是否使用了代理env | grep -i proxy注意处理密钥问题时切勿随意从不可信来源获取密钥。始终通过官方渠道或知名密钥服务器获取密钥。7. ROS生态中的密钥管理最佳实践在长期使用ROS的过程中我总结了这些经验版本升级时每次Ubuntu或ROS版本升级后检查密钥是否需要更新团队协作时将正确的源配置和密钥管理写入团队文档持续集成系统中在CI脚本中加入密钥验证步骤多机环境使用Ansible等工具统一管理密钥配置一个实用的检查脚本#!/bin/bash KEY_IDF42ED6FBAB17C654 if ! apt-key list | grep -q $KEY_ID; then echo 导入ROS密钥... sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $KEY_ID fi sudo apt update8. 密钥问题背后的安全哲学这个看似简单的密钥错误实际上体现了Linux系统安全设计的精髓不信任原则默认不信任任何外部源最小权限原则即使安装软件也需要明确授权透明性原则所有验证过程都可查证可审计性每一步操作都有日志记录理解这些原则就能明白为什么Linux系统宁愿报错中断也不冒险使用未经验证的软件源。这种设计虽然有时带来不便但正是它保证了系统长期运行的稳定性。

更多文章