Skip to main content

轮换升级包签名密钥

了解当 GitHub Enterprise Server 更新用于对升级包进行签名的密钥时,如何在 GitHub 上轮换 GPG 公钥。

关于升级包签名密钥

GitHub Enterprise Server 升级包使用 GPG 密钥进行签名,以便管理员可以验证包来自 GitHub。 安装升级时,设备会使用其密钥环中存储的 GPG 公钥来验证软件包签名。

有时, GitHub 可能会轮换此签名密钥。 发生这种情况时,必须在实例上更新 GPG 公钥,然后才能安装使用新密钥签名的任何升级包。 即使不进行密钥轮换,您的实例也将继续正常运行,但在密钥更新之前,升级将无法通过签名验证。

如果未轮换签名密钥,尝试安装升级包将失败,并出现以下错误:

Error: The file provided is not a valid GitHub Enterprise Server package.

不受支持的版本的注意事项

GitHub 强烈建议尽快升级到受支持的版本。

GitHub Enterprise Server 3.16 之前的版本未使用新的 GPG 密钥重新签名。 如果使用的是版本 3.13 或更早版本,则在至少使用版本 3.14 之前,将无法轮换 GPG 公钥。 如果在升级到至少 3.14 之前轮换 GPG 公钥,将无法安装升级,因为以前的 GPG 公钥将从实例中删除 GitHub Enterprise Server 。

如需帮助确定正确的升级路径,请使用升级助手

Prerequisites

  • 通过 SSH 访问您的 GitHub Enterprise Server 实例。 有关详细信息,请参阅“访问管理 shell (SSH)”。
  • 实例必须能够通过 HTTPS 访问 enterprise.github.com 才能下载轮换脚本。 如果实例位于限制性防火墙或空隙环境中,请从外部计算机下载脚本并将其手动传输到设备。

轮换单节点实例上的签名密钥

  1. 通过 SSH 连接到 GitHub Enterprise Server 实例。

  2. 下载由 GitHub. 提供的旋转脚本。

    curl -fsSL https://enterprise.github.com/security/2026-05-24/rotate-gpg.sh -o rotate-gpg.sh
    
  3. 运行旋转脚本。 脚本必须运行两次:一次以 admin 用户身份运行,另一次使用 sudo 运行,因为密钥同时存储在 admin 和 root 帐户中。

    chmod ug+x ./rotate-gpg.sh
    ./rotate-gpg.sh
    sudo ./rotate-gpg.sh
    
  4. 验证轮换是否已成功完成。 脚本的每个运行都会输出一条包含新密钥指纹的确认消息。

在 HA 或群集拓扑中轮换签名密钥

对于配置了高可用性或群集的实例,必须在每个节点上轮换密钥。

  1. 通过 SSH 连接到 HA 或群集安装中的任何节点。

  2. 下载由 GitHub. 提供的旋转脚本。

    curl -fsSL https://enterprise.github.com/security/2026-05-24/rotate-gpg.sh -o rotate-gpg.sh
    
  3. 运行以下命令。 该 ghe-cluster-each 命令将脚本复制到所有节点,并在所有节点上运行该脚本。

    ghe-cluster-each -- chmod ug+x ./rotate-gpg.sh
    ghe-cluster-each -- ./rotate-gpg.sh
    ghe-cluster-each -- sudo ./rotate-gpg.sh
    
  4. 验证每个节点上的轮换是否已成功完成。

验证当前签名密钥

若要检查实例上当前安装了哪个 GPG 签名密钥,请通过 SSH 进行连接并运行:

gpg --list-keys --keyid-format long

输出会显示密钥环中该密钥的指纹。 将该指纹与由 GitHub 发布的预期值进行比对,以确认轮换已正确应用。

轮换密钥后会发生什么

轮换签名密钥后:

  • 实例继续正常运行。 无需用户停机。
  • 以前下载的使用上一密钥签名的升级包将无法验证。 下载最新的可用修补程序版本,以获取使用新密钥签名的包。
  • 仅从官方发布页面下载 GitHub Enterprise Server 更新。 有关更多信息,请参阅 GitHub Enterprise Server 发行说明

回退密钥轮换

在导入新密钥之前,轮换脚本会从 GPG 密钥器中删除上一个密钥。 没有内置方法可撤销旋转。

如果您需要协助撤销密钥轮换或从升级失败中恢复,请联系 GitHub 支持