GitHub CLI 的 Linux 签名密钥到期后怎么更新
如果你在 Debian、Ubuntu、Fedora 或其他 Linux 发行版上通过 GitHub CLI 官方 APT/RPM 仓库安装了 gh,先更新本地 keyring 或仓库配置,再执行包管理器更新。GitHub CLI 的旧签名密钥已在 2026 年 9 月 5 日到期;新 keyring 已包含替换密钥。通过 Homebrew、Conda、源码、GitHub Releases 二进制包安装的用户不属于这次轮换范围。
最稳妥的处理顺序是:先确认安装渠道,再确认本地是否已有新指纹;只有旧 keyring 的官方 APT/RPM 用户需要刷新信任配置,随后再运行 apt、dnf、yum 或 zypper 更新。
- 旧指纹为
2C6106201985B60E6C7AC87323F3D4EA75716059,新指纹为7F38BBB59D064DBCB3D84D725612B36462313325。 - Debian/Ubuntu 更新
githubcli-archive-keyring.gpg;RPM 系发行版重新获取官方gh-cli.repo。 - Docker 镜像要在
apt update前拉取新 keyring,不使用gh的基础镜像可以删除残留仓库。
先确认安装渠道和本机信任链
这不是一次所有用户都要做的 gh 升级。GitHub 公告把影响面限定在 Linux 官方 APT 和 RPM 仓库:如果是在 2026 年 4 月 8 日新 keyring 发布前按官方文档安装,且之后没有重新执行安装配置,就应当检查。已经使用新安装流程的用户,本地 keyring 通常已经同时包含旧、新两把公钥。

Debian/Ubuntu 可以直接查看 keyring。若推荐路径不存在,再检查旧路径或 APT 源文件中的 signed-by 值:
# 查看推荐路径中的公钥,确认是否有两条 pub 记录
gpg --show-keys /etc/apt/keyrings/githubcli-archive-keyring.gpg
# 文件不在推荐路径时,尝试旧路径或查看 APT 源配置
gpg --show-keys /usr/share/keyrings/githubcli-archive-keyring.gpg
cat /etc/apt/sources.list.d/github-cli.list
如果输出同时出现旧指纹和 7F38BBB59D064DBCB3D84D725612B36462313325,就不必重复导入。RPM 系统则可以查看已导入的 GitHub CLI 公钥;只有一个旧条目时才需要继续更新。
# 只筛选包描述中属于 GitHub CLI 的 RPM 公钥
rpm -qa gpg-pubkey | xargs -I{} sh -c 'rpm -qi {} | grep -q "opensource+cli@github.com" && echo {}'
Debian/Ubuntu 直接替换 keyring
APT 用户不需要手工拼接新指纹,也不要关闭签名校验。重新下载官方 keyring 文件即可,关键是保存位置必须和 /etc/apt/sources.list.d/github-cli.list 里的 signed-by 一致。推荐位置不存在时先创建目录,并保证 APT 能读取该文件。
# 创建 APT keyring 目录,权限只覆盖目录本身
sudo mkdir -p -m 755 /etc/apt/keyrings
# 下载同时包含旧、新密钥的官方 keyring,并开放读取权限
sudo curl -fsSL -o /etc/apt/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages/githubcli-archive-keyring.gpg && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
# 先刷新仓库元数据,再安装或升级 gh
sudo apt update
sudo apt install gh
完成后再用 gpg --show-keys 检查,应该能看到新指纹。遇到 NO_PUBKEY 5612B36462313325、EXPKEYSIG 23F3D4EA75716059 等错误,优先检查实际 signed-by 路径是否仍指向另一份旧文件;不要只更新了一个未被 APT 使用的副本。
RPM 系发行版按包管理器刷新 repo
RPM 系统把公钥导入自己的 keyring,处理重点不是覆盖某个 APT 文件,而是重新获取官方仓库配置,使它引用更新后的 keyring。先运行 dnf --version 判断 DNF5 还是 DNF4,再选择对应命令。
| 环境 | 刷新仓库 | 随后更新 |
|---|---|---|
| Fedora 41+ | dnf config-manager addrepo --overwrite --from-repofile=... | dnf update gh |
| Fedora 40 及更早、RHEL/CentOS | dnf config-manager --add-repo ... | dnf update gh |
| Amazon Linux 2 | yum-config-manager --add-repo ... | yum update gh |
| openSUSE/SUSE | 移除后重新添加 gh-cli repo | zypper update gh |
# DNF5:Fedora 41 或更新版本,覆盖旧 repo 配置
sudo dnf config-manager addrepo --overwrite --from-repofile=https://cli.github.com/packages/rpm/gh-cli.repo
sudo dnf update gh
# DNF4:Fedora 40 及更早版本或对应 RHEL/CentOS
sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
sudo dnf update gh
执行升级时,包管理器可能询问是否导入 PGP key。确认新指纹是 7F38BBB59D064DBCB3D84D725612B36462313325 后再接受;旧指纹是 2C6106201985B60E6C7AC87323F3D4EA75716059。如果重复添加 repo 后仍报旧 key 错误,再按官方说明确认并移除对应旧的 gpg-pubkey 条目,然后重新安装 gh。
Docker 和自动化镜像要把 keyring 放在 apt update 之前
容器最容易把旧 keyring 固定在历史层里:前一层添加了 GitHub CLI 仓库,后一层才运行 apt-get update,于是宿主机已经修复,镜像构建仍然失败。控制 Dockerfile 时,在任何包列表更新之前重新拉取 keyring,并让后续层使用同一文件。
# 在执行 apt update 前刷新镜像内的官方 keyring
RUN wget -qO /etc/apt/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages/githubcli-archive-keyring.gpg && chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
# 如果镜像根本不需要 gh,则移除残留源,避免无关校验阻断构建
RUN rm -f /etc/apt/sources.list.d/github-cli.list
这两个动作按实际用途二选一:需要安装或升级 gh 就保留仓库并刷新 keyring;只是继承了带仓库的基础镜像,就删除源。不要以禁用 GPG 校验的方式绕过问题。

常见问题
Windows 或 macOS 需要更新这把 Linux 签名密钥吗?
不需要。这次公告针对 Linux APT/RPM 包仓库;Windows、macOS 和源码构建不使用这条 Linux 包签名路径。
通过 Homebrew 或 Conda 安装 gh 会受影响吗?
不受这次仓库密钥轮换影响。社区包管理器、Homebrew、Conda、GitHub Releases 的直接二进制包各自有独立的分发和校验方式。
keyring 里已经有新旧两把 key,还要重装 gh 吗?
通常不用。先确认 APT 的 signed-by 或 RPM 的 repo 配置确实引用了这份 keyring,然后重新运行包列表更新即可。
冷眸软件库权限安全吗?Android安装、隐私政策与版本核对
- 上一篇
- 冷眸软件库权限安全吗?Android安装、隐私政策与版本核对
- 下一篇
- Go 创建文件的权限为什么与传入值不同
-
- 科技周边 · 业界新闻 | 2小时前 | devops · gitHub actions · 持续集成 · GitHub Actions GitHub Actions更新 reusable workflow GITHUB_TOKEN
- GitHub Actions 九月更新有哪些工作流变化
- 143浏览 收藏
-
- 科技周边 · 业界新闻 | 12小时前 | github · rest api · 开发者工具 · 隐私 · 开放接口 · GitHub Star API Star history REST API stargazers history 仓库 Star 统计
- GitHub 新 Star 历史接口能获取哪些统计数据
- 398浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 云原生 · opentelemetry · 可观测性 · CNCF · OpenTelemetry CNCF 多信号根因分析 云原生故障响应
- CNCF 多信号根因分析为什么不能只看告警:时间、拓扑与证据链的落地边界
- 239浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 |
- kube-apiserver 缓存重建阶段如何安排控制器重试:从 429 到恢复可观测性
- 447浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 |
- CNCF 云原生构建标准化怎么验收:Buildpacks 的 OCI 镜像与供应链边界
- 222浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 云原生 · kubernetes · 故障排查 · 控制面 · 火绒流量防火墙 Kubernetes kube-apiserver WatchCache v1.37 API Priority and Fairness
- Kubernetes v1.37 watchcache 初始化为什么返回 429:控制面恢复时的请求洪峰边界
- 183浏览 收藏
-
- 科技周边 · 业界新闻 | 2天前 |
- OpenTelemetry Entity Events 怎么补齐资源关系:从实体身份到可追踪变更
- 164浏览 收藏
-
- 科技周边 · 业界新闻 | 2天前 | 云原生 · kubernetes · 证书轮换 · 工作负载身份 · Kubernetes 1.37 Pod Certificates 工作负载身份 Cluster Trust Bundles
- Kubernetes 1.37 Pod Certificates 进入 GA:工作负载身份有哪些新边界
- 187浏览 收藏
-
- 科技周边 · 业界新闻 | 3天前 | 云原生 · Etcd · kubernetes · 版本发布 · 内存优化 RangeStream Kubernetes 1.37 etcd 3.7 List请求
- Kubernetes 1.37 的 RangeStream 进入 Beta:大规模 List 请求为什么更省内存
- 458浏览 收藏
-
- 科技周边 · 业界新闻 | 4天前 | github copilot · AI编程 · 模型切换 · 模型迁移 GitHub Copilot MAI-Code-1-Flash MAI-Code-1.1-Flash
- GitHub Copilot 将弃用 MAI-Code-1-Flash:代码工作流如何完成模型切换
- 373浏览 收藏
-
- 科技周边 · 业界新闻 | 4天前 | github · copilot · AI开发工具 · 插件治理 · VS Code MCP Agent Plugins 1.0 GitHub Agent Plugins Copilot CLI
- GitHub Agent Plugins 1.0 跨客户端落地:团队接入前要先看哪些权限边界
- 462浏览 收藏
-
- 科技周边 · 业界新闻 | 6天前 | github · Spark · copilot · 开发者工具 · 应用迁移 · GitHub Spark GitHub Models llm() 应用迁移 Create repository
- GitHub Spark 弃用后应用如何迁移:运行时边界、替代路径与仓库资产盘点
- 386浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 155次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 85次使用
-
- ClickPrompt
- ClickPrompt是一款专为AI提示词编写者设计的开源在线工具,支持Stable Diffusion绘图、ChatGPT对话及GitHub Copilot代码辅助。提供Prompt自动生成、一键运行、社区分享及可视化优化功能,帮助用户高效获取精准AI输出。
- 45次使用
-
- PromptHero
- PromptHero是专业的AI提示词搜索引擎与优化平台,支持Stable Diffusion、Midjourney等主流模型。提供海量提示词库、分类搜索、在线课程及社区互动,助力用户高效生成高质量AI图像与文本。
- 25次使用
-
- Stable Diffusion Prompt Book
- 深入解析OpenArt推出的Stable Diffusion Prompt Book,这本免费的开源提示词指南涵盖从基础语法到高级技巧,提供风格化词库与参数建议,助您优化AI绘画生成效果。
- 28次使用
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览
-
- 在Linux系统中安装Go语言的详细教程
- 2022-12-29 402浏览

