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

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

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

第一次在Ubuntu上安装ROS时,那种兴奋感很快被终端里鲜红的错误提示浇灭——EXPKEYSIG F42ED6FBAB17C654。作为机器人开发的基础环境,ROS的安装本应是入门第一步,却让无数开发者在这个密钥验证错误前折戟。这就像拿到了新玩具却发现电池仓上了锁,而钥匙却不知所踪。

1. 理解GPG密钥在ROS安装中的作用

当你执行sudo apt update时,系统会做一件至关重要的事:验证软件源的完整性。Ubuntu使用GPG(GNU 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 <info@osrfoundation.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 F42ED6FBAB17C654

3.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:11371
pgp.mit.edu美国hkp:11371
keys.gnupg.net欧洲hkp:11371
pool.sks-keyservers.net全球池hkp:11371

3.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 <info@osrfoundation.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时,系统会:

  1. 下载InRelease或Release.gpg文件
  2. 用本地密钥环中的公钥验证签名
  3. 只有验证通过的软件源才会被信任

这个过程确保了:

  • 完整性:软件包未被篡改
  • 真实性:确实来自声称的发布者
  • 新鲜度:使用的是最新软件列表

4.2 现代替代方案:signed-by

较新的Ubuntu版本推荐使用signed-by替代直接操作apt-key:

sudo 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 密钥过期的预防措施

为避免将来再遇密钥问题:

  1. 定期检查密钥有效期:
    apt-key list | grep -A5 "expires"
  2. 关注ROS官方公告
  3. 设置自动更新(谨慎使用):
    sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades

5. 进阶:处理特殊网络环境下的密钥问题

在某些网络环境下,可能会遇到连接密钥服务器超时的问题。这时可以尝试:

5.1 使用HTTP代替HKP协议

sudo apt-key adv --keyserver http://keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654

5.2 手动下载并导入密钥

  1. 从浏览器访问:
    https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF42ED6FBAB17C654
  2. 保存为ros-key.asc
  3. 导入:
    sudo apt-key add ros-key.asc

5.3 使用备用端口

有些网络可能屏蔽了11371端口,尝试80端口:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C654

6. 常见问题排查指南

遇到问题不要慌,按这个检查表逐步排查:

  1. 错误是否明确显示EXPKEYSIG?

    • 是:按本文方法处理
    • 否:可能是其他类型密钥问题
  2. 密钥服务器能否连通?

    telnet keyserver.ubuntu.com 11371

    curl http://keyserver.ubuntu.com:11371
  3. 系统时间是否正确?

    timedatectl status
  4. 是否有防火墙干扰?

    sudo ufw status
  5. 是否使用了代理?

    env | grep -i proxy

注意:处理密钥问题时,切勿随意从不可信来源获取密钥。始终通过官方渠道或知名密钥服务器获取密钥。

7. ROS生态中的密钥管理最佳实践

在长期使用ROS的过程中,我总结了这些经验:

  1. 版本升级时:每次Ubuntu或ROS版本升级后,检查密钥是否需要更新

  2. 团队协作时:将正确的源配置和密钥管理写入团队文档

  3. 持续集成系统中:在CI脚本中加入密钥验证步骤

  4. 多机环境:使用Ansible等工具统一管理密钥配置

一个实用的检查脚本:

#!/bin/bash KEY_ID="F42ED6FBAB17C654" 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 update

8. 密钥问题背后的安全哲学

这个看似简单的密钥错误,实际上体现了Linux系统安全设计的精髓:

  1. 不信任原则:默认不信任任何外部源
  2. 最小权限原则:即使安装软件也需要明确授权
  3. 透明性原则:所有验证过程都可查证
  4. 可审计性:每一步操作都有日志记录

理解这些原则,就能明白为什么Linux系统宁愿报错中断,也不冒险使用未经验证的软件源。这种设计虽然有时带来不便,但正是它保证了系统长期运行的稳定性。

http://www.jsqmd.com/news/674026/

相关文章:

  • granite-4.0-h-350m镜像免配置部署:Ollama下350M模型开箱即用教程
  • 沪上阿姨股东延长禁售,股东信心如何撬动市场新预期?
  • Cherry Studio下载安装与小白使用教程:Windows电脑轻松上手AI助手
  • init()
  • 2025-2026年全球国际十大物流公司推荐:TOP10口碑服务评测对比顶尖工程机械运输复杂清关案例 - 品牌推荐
  • 当‘事实’遇见代码:用Python爬虫与NLP,亲手验证新闻中的‘莫斯科街道’悖论
  • 开源多模态模型gemma-3-12b-it落地案例:Ollama镜像免配置快速上手
  • 巧用 PGS 提升玩家留存率|Google Play Games Level Up 计划
  • React 与 WebAssembly 协同:在 React 应用中利用 Wasm 模块执行计算密集型图像处理逻辑
  • 【AI实战日记-手搓聊天机器人】Day 13:彻底解放双手!基于 VAD 算法实现 AI 自动静默检测与连续对话
  • FanControl终极修复指南:快速解决传感器计数异常问题
  • 同济大学与腾讯联手,如何用“画风配方“造出史上最大风格图库?
  • 谈谈“内卷”与“躺平”:技术人的另一种可能性
  • PHP源码运行是否受硬盘转速影响_7200转vs5400转对比【指南】
  • **点云处理新范式:基于Python的高效三维数据滤波与分割实战**在自动驾
  • 简易在线考试系统(数学版)——结对编程实验报告
  • Codex + 自建中转站,用不完的token+GPT5.4 做成了一个AI机器人
  • 从乘客头衔到船舱号:手把手教你用Python挖掘泰坦尼克号数据里的隐藏特征
  • 如何防止SQL触发器导致事务超时_拆分逻辑为异步队列处理
  • MySQL Explain 查询计划详解
  • 2025-2026年国际东南亚专线物流公司推荐:TOP5口碑服务评测对比顶尖B2B大宗贸易港口拥堵 - 品牌推荐
  • **构建去中心化金融新范式:基于Solidity的DeFi协议开发实战解析**在区块链技术飞速发展的今天,**
  • Cy5-Fe₃O₄ NPs,Cy5标记四氧化三铁纳米颗粒,反应步骤
  • DAMO-YOLO入门指南:理解COCO 80类标准与达摩院扩展类别的映射关系
  • 【大白话说Java面试题】【Java基础篇】第2题:Iterator的fail-fast和fail-safe机制有什么区别?
  • Dify日志审计配置总失败?92%团队忽略的时区陷阱、权限继承断层与审计缓冲区溢出问题全解析,立即修复!
  • 2025-2026年全球25-30万五座SUV车型推荐:五款口碑产品评测对比顶尖城市通勤成本高昂 - 品牌推荐
  • Shopee一面:你使用 RAG 给大模型一个输入,系统是怎样的工作流程?
  • 攻击者可利用的 FortiSandbox 漏洞 PoC 公开,可执行任意命令
  • 从航拍到模型:手把手教你用‘焦距’和‘像元尺寸’反算无人机航高(附Excel计算工具)