跳至主要内容

排查存储库身份验证问题

了解如何在 Codespace 中克隆、推送或拉取存储库时排查常见的身份验证问题。

当您为存储库创建 Codespace 时,通常可以使用 `git pull` 和 `git push` 来拉取和推送更改到该存储库,无需任何其他身份验证。但是,有时您可能会在尝试运行这些操作时看到身份验证错误。

如果您尝试与创建 Codespace 所用的存储库以外的存储库交互,也可能会出现错误。

连接到您从中创建 Codespace 的存储库

如果您尝试推送或拉取来自创建 Codespace 的存储库的更改,但身份验证失败,您可能会看到类似于 `[email protected]: Permission denied (publickey)` 或 `Host key verification failed` 的错误。

如果您将点文件仓库与 GitHub Codespaces 配合使用,并且已将 Git 配置为使用 HTTPS 以外的协议将数据传输到远程存储库,则可能会看到这些错误。例如,您可能已将 Git 配置为使用 SSH,方法是在点文件中包含如下所示的 config 文件。

[url "[email protected]:"]
  insteadOf = https://github.com/

GitHub Codespaces 默认使用 HTTPS 协议,并使用配置为具有对创建 Codespace 的存储库的读写访问权限的 `GITHUB_TOKEN` 进行身份验证。我们建议您在 Codespace 中使用默认的 HTTPS 和 `GITHUB_TOKEN`。`GITHUB_TOKEN` 的权限通常仅限于一个存储库,遵循最小权限的安全原则。SSH 身份验证没有细粒度的存储库权限,因此意外泄露您的 SSH 密钥可能会使他人访问您所有的存储库。

要使用默认的 HTTPS,请从点文件中删除冲突的配置。如果您的点文件仓库包含安装脚本(在诸如 `install.sh` 的已识别文件中),则可以使用以下逻辑在 Codespaces 中排除该配置。

if [ -z "$CODESPACES" ]; then
  git config --global url."[email protected]".insteadOf "https://github.com"
fi

如果您在从受信任的存储库创建的 Codespace 中工作,并且需要使用 SSH,请确保您的 Codespace 已设置为使用与您的 GitHub 帐户关联的 SSH 密钥进行身份验证。有关更多信息,请参阅“生成新的 SSH 密钥并将其添加到 ssh-agent”。

连接到您未从中创建 Codespace 的存储库

Codespace 中的 `GITHUB_TOKEN` 配置为具有对创建 Codespace 的存储库的读写访问权限。默认情况下,此令牌无权访问其他存储库。您可能会发现无法克隆存储库,或者无法推送已克隆的存储库。

我们不建议手动更新 Codespace 中的GITHUB_TOKEN值。如果您的项目需要访问其他仓库,您可以通过在开发容器配置中列出其他权限来允许 Codespace 访问这些仓库。这将允许用户在创建 Codespace 时授权这些额外权限。但是,这不会更改现有 Codespace 的权限。更多信息,请参见“管理 Codespace 中其他仓库的访问权限”。

如果您需要在现有 Codespace 中访问另一个仓库,或者您需要的权限特定于您个人且不适用于其他贡献者,您可以创建一个具有仓库访问权限的个人访问令牌,并将令牌添加到您的 Codespace。我们建议您使用细粒度的个人访问令牌限制令牌的访问权限,仅选择您需要访问的仓库,并且仅授予所需的内容权限。更多信息,请参见“管理您的个人访问令牌”。

然后,您可以将令牌作为环境变量添加到 Codespace 中,或作为 GitHub Codespaces 的密钥。如果您创建密钥,则应仅允许某些受信任的仓库访问该密钥。添加新密钥后,系统会提示您重新加载现有 Codespace 以引入新密钥。更多信息,请参见“管理您针对 GitHub Codespaces 的帐户特定密钥”。

要在 Codespace 中使用令牌进行身份验证,您可以选择以下方法。

  • 创建环境变量或密钥时,您可以使用名称GH_TOKENGH_TOKEN变量在 GitHub CLI 操作中默认使用,因此您可以使用命令gh repo clone OWNER/REPO克隆仓库。

    但是,如果您随后尝试使用git push推送到仓库,Git 的凭据助手将尝试使用现有的GITHUB_TOKEN进行身份验证,并且身份验证将失败。您可以覆盖助手,但这可能会在您尝试与创建 Codespace 的原始仓库交互时带来不便。

  • 您可以使用包含访问令牌的 URL 克隆仓库。将YOUR-VARIABLE替换为您创建的环境变量或密钥的名称。

    git clone https://USERNAME:[email protected]/OWNER/REPO`
    

    这将为特定仓库存储访问令牌,因此您无需覆盖现有的凭据助手即可向仓库推送和拉取。

    注意

    如果您以这种方式克隆,则令牌将显示在您的 Git 配置中。您应仅在使用来自您信任的仓库创建的 Codespace 时使用此方法,并且应尽可能限制访问令牌的范围。