ROS接收公钥失败怎么办,公钥服务器接收失败怎么解决

ROS公钥服务器接收失败的核心结论与修复路径

ROS从公钥服务器接收失败的根本原因是APT在验证ROS软件源签名时,无法从Ubuntu密钥服务器或ROS官方密钥地址拉取对应GPG公钥,常见于网络不可达、密钥地址变更或代理配置缺失,优先使用官方提供的raw.githubusercontent.com/ros/rosdistro/master/ros.key地址重新导入,并配置[signed-by]方式替代已弃用的apt-key。

先确认报错类型,别急着改源

很多用户在终端执行sudo apt update时看到类似提示:The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654,这条报错并不代表ROS源地址写错了,而是APT缺少对应公钥,另一种常见情况是gpg: keyserver receive failed: Connection refused,说明访问密钥服务器(如keyserver.ubuntu.com)的网络链路被中断。

apt-get update报错签名无效?无公钥文件?解决方案汇总
加载中
apt-get update报错签名无效?无公钥文件?解决方案汇总
酷
酷酷的可乐
869--
原视频地址

业内专家指出,公钥接收失败在三个场景里最集中:一是新装Ubuntu后按旧版教程操作,教程里的密钥地址已过期;二是企业内网或校园网限制了对keyserver.ubuntu.com的访问;三是国内网络访问GitHub原始文件地址不稳定,先对号入座,能省掉大量试错时间。

ROS公钥服务器接收失败怎么解决的完整操作链

用官方key文件走curl + gpg导入

这是目前最稳妥的路径,不依赖密钥服务器端口。

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

随后确认sources.list.d里的ROS源行带有[signed-by=/usr/share/keyrings/ros-archive-keyring.gpg]参数,示例:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

执行sudo apt update验证,若不再出现NO_PUBKEY即修复完成。关键点在于把公钥文件直接落到/usr/share/keyrings/,并让源条目显式指向它,绕开密钥服务器环节。

指定Ubuntu密钥服务器手动拉取

当方案一因网络原因失败时,可以换一个keyserver再试:

sudo gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F42ED6FBAB17C654
sudo gpg --export F42ED6FBAB17C654 | sudo tee /usr/share/keyrings/ros-archive-keyring.gpg > /dev/null

如果keyserver.ubuntu.com持续超时,可替换为hkp://pgp.mit.edu或hkp://keys.openpgp.org,注意端口80比默认的11371更容易穿过防火墙,近年来不少高校网络对高位端口限制更严,改用80端口成功率明显提升。

配置APT代理或切换镜像源

内网环境需要给APT单独设代理:

sudo sh -c 'echo "Acquire::http::Proxy \"http://your-proxy:port\";" > /etc/apt/apt.conf.d/95proxy'

若只是访问GitHub不稳,可以将ROS源替换为国内镜像(如清华、中科大镜像站),再配合镜像站文档给出的key文件地址导入。镜像源不改变签名验证逻辑,公钥仍需正确落地,否则同样报错。

国内ROS公钥服务器连接失败的场景差异

不同网络环境的表现差别很大,下面这张表可作为排查参照:

场景 典型报错 优先方案 备注
家庭宽带直连 Connection timed out 方案一(raw文件) GitHub地址偶发不通
校园网/企业内网 Connection refused 方案三(代理)+方案一 密钥服务器端口常被拦
Docker容器内 NO_PUBKEY 方案二(80端口keyserver) 容器缺CA证书也会失败
旧教程遗留源 签名不匹配 清理旧源+方案一 密钥ID可能已轮换

近年来,ROS 2的apt源逐步统一使用ros-archive-keyring.gpg这一命名,旧教程里的apt-key add写法在Ubuntu 22.04之后虽然还能执行,但会触发弃用警告,行业共识认为,signed-by方式是新版Ubuntu下更规范的做法,迁移时应同步更新。

修复后如何确认公钥真的生效

别只看apt update有没有报错,建议做两步验证:

  • 执行apt-key list(旧系统)或gpg --show-keys /usr/share/keyrings/ros-archive-keyring.gpg,确认输出里包含F42ED6FBAB17C654或ROS对应的新密钥指纹。
  • 执行apt-cache policy ros-<distro>-desktop,若能列出候选版本,说明源与签名链路都已打通。
  • 检查/etc/apt/sources.list.d/下是否残留重复的ROS源条目,重复条目会引发签名冲突的假象。

把公钥文件路径写死在源条目里,比依赖全局信任环更可控,也便于后续换机器复现。

提前规避ROS GPG密钥接收失败的三个习惯

  • 安装前先核对官方文档给出的密钥地址,不要照搬两年前博客里的apt-key adv命令。
  • 在容器或CI环境里,把curl下载key文件这一步写进Dockerfile,避免每次构建都依赖外部密钥服务器。
  • 保留一份ros-archive-keyring.gpg离线副本,内网批量部署时直接分发,比逐台联网拉取稳定得多。

关于ROS公钥接收失败的常见疑问

ROS公钥服务器接收失败和ROS版本有关系吗

有关系,ROS 1与ROS 2的源地址和密钥文件路径不同,ROS 2在Humble及之后版本普遍使用ros-archive-keyring.gpg命名,混用两套教程里的密钥ID会直接导致NO_PUBKEY,安装前先确认发行版代号与源条目是否匹配。

执行apt update仍然报NO_PUBKEY但公钥文件已存在怎么办

先检查源条目是否带[signed-by=...]并指向正确路径;若路径拼写无误,用gpg --show-keys确认文件内容非空,空文件通常由curl被重定向到登录页导致,重新下载并检查文件大小即可定位。

ROS公钥导入失败需要重装系统吗

绝大多数情况不需要,公钥问题属于APT签名验证层面的配置问题,清理/etc/apt/sources.list.d/中残留条目、重新导入key文件、修正signed-by参数即可恢复,重装系统对网络限制类问题并无帮助,反而会重复踩坑。

把公钥文件落到/usr/share/keyrings/并在源条目里显式引用,是当前Ubuntu环境下处理ROS公钥接收失败最可复现的路径。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/792264.html

赞 (0)
上一篇 2026年11月10日 14:17
下一篇 2026年11月10日 14:18

相关推荐

  • Win10 DNS服务器未响应怎么修复,DNS未响应怎么解决

    Win10提示“DNS服务器未响应”时,最快见效的修复顺序是:先重启路由器和电脑排除临时故障,再在网卡属性中手动设置114.114.114.114或223.5.5.5等公共DNS,配合命令提示符刷新DNS缓存,绝大多数情况下几分钟内即可恢复上网,这个报错本质上是你电脑向DNS服务器发查询请求时没收到回应,或者回……

    程序编程 2026年11月1日
    700
  • CSGO社区服务器加载慢怎么解决,加载慢的原因是什么

    如果你发现CSGO社区服务器加载慢,先别急着怪电脑,多数情况下是网络链路、服务器列表刷新机制或地图资源缓存出了问题,按照下面的顺序排查,基本能恢复流畅,csgo社区服务器加载慢怎么解决?从列表到地图的全流程排查社区服务器和官方匹配不一样,它依赖Steam的服务器列表查询、第三方服务端响应以及创意工坊资源下载,任……

    程序编程 2026年10月22日
    700
  • BitsFlowCloud 2026新春闪购仅¥69.9/年值得入手吗?vps推荐高性价比

    BitsFlowCloud 2026新春最后一次闪购以¥69.9/年的极致低价提供东京、香港、美西及德国VPS,配合1740GB月流量与2.5Gbps带宽,是2026年性价比最高的跨境建站与开发环境选择,在2026年的云计算市场中,价格战早已从单纯的算力比拼转向了“算力+网络+稳定性”的综合考量,BitsFlo……

    2026年7月7日
    11100
  • 我的世界网易版到底怎么在服务器装mod,有什么技巧?

    想在《我的世界》网易版服务器里装上mod,核心答案是:通过游戏自带的“组件中心”订阅并应用模组,然后在创建或进入服务器时勾选这些组件,而不是直接往服务器文件夹里丢jar文件,网易版基于基岩引擎,它和Java版的mod机制完全不同,很多玩家第一次尝试时都会栽在“找不到mods文件夹”这个问题上,这篇文章会把手机版……

    2026年10月16日
    100
  • AI翻译准确吗?揭秘2026精准翻译工具推荐

    AI翻译:突破语言壁垒的核心引擎与未来挑战核心结论:AI翻译已从实验室走向全球应用,成为跨语言沟通的底层基础设施,其核心价值在于以惊人的速度和性价比消除信息隔阂,驱动商业、科研、文化交流的全球化进程,技术飞跃的背后,“精准传达语言背后的文化与意图”仍是其面临的核心瓶颈,人机协同是当前最优解, AI翻译:重塑全球……

    程序编程 2026年2月16日
    24630
  • 2服务器host文件损坏咋办,hosts文件损坏怎么修复

    2服务器系统host文件损坏后,最直接的解决思路是:在系统目录中找到hosts文件,用记事本删除全部内容或替换为系统默认模板,保存后刷新DNS缓存即可恢复正常解析,绝大多数情况下,host文件损坏不会影响系统运行,只会导致域名解析异常,按本文步骤操作十分钟内就能搞定,怎么确认是host文件坏了而不是DNS或网络……

    程序编程 2026年11月5日
    700
  • 速达g5版本服务器怎么启动?,启动步骤有哪些?

    启动速达G5版本服务器,核心顺序是先启动数据库服务,再启动速达服务器管理器中的应用服务,最后在客户端用服务器IP或主机名连接,绝大多数“服务器启动不了”的情况,问题都出在数据库服务没运行或网络端口被拦,跟速达软件本身关系不大,速达g5服务器连接失败?先理清启动顺序速达G5版本不是一个孤立的软件,它包含数据库服务……

    2026年10月16日
    500
  • MC官网如何下载基岩版老版本的服务器,在哪下载

    要下载Minecraft基岩版老版本服务器,官方渠道有两条:官网下载页面仅提供最新版,而Mojang官方GitHub仓库则存档了所有历史版本,实际操作中,后者是获取旧版本的主要途径,mc基岩版服务器老版本下载方法:官网与GitHub双通道官网下载基岩版服务器最新版步骤很多玩家首先想到的是mc官网,但官网只提供当……

    2026年8月26日
    1700
  • 手游版二b2 t服务器怎么弄

    手游版2b2t服务器,要么自己搭建基岩版无政府服,要么通过Geyser连接Java版2b2t,其中自建服务器是更可控的选择,手游版2b2t服务器搭建教程搭建一个基岩版2b2t风格服务器,核心是让玩家拥有绝对自由,没有规则限制,你需要服务器软件、一台能稳定运行的设备,以及基本的网络设置,准备工作:服务器软件与设备……

    2026年8月13日
    500
  • SVN如何导出指定文件夹,SVN导出文件夹怎么操作?

    从SVN服务器导出指定文件夹,核心思路只有两条:用svn export走纯下载路径,或者用svn checkout拉取后清理掉多余文件,前者输出干净目录,后者保留版本控制信息,按需二选一,很多朋友第一次接触SVN服务器的时候,都以为“导出”就是把远程仓库里某个文件夹拖到本地,真操作起来才发现要么带出一大堆无关目……

    程序编程 2026年10月24日
    400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注