Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙️ Pengaturan Proxy Target

Skip to main content
Skip to content

使用 GitHub CLI 进行身份验证

了解使用 GitHub CLI、交互式登录、环境变量、过期令牌以及 GitHub Actions 进行身份验证的方法。

关于 GitHub CLI 中的身份验证

大多数 GitHub CLI 命令会在 GitHub 上代表你执行操作,因此你需要先进行身份验证,然后才能使用它们。 GitHub CLI 支持多种身份验证方法,具体取决于是在计算机中以交互方式工作,还是在脚本或自动化环境中运行命令。

  • 若要进行交互式使用,请使用gh auth login登录一次,GitHub CLI会为您存储凭据。
  • 对于脚本和自动化,请通过环境变量提供令牌。
  • 对于工作流,请使用 GitHub Actions 提供的令牌。

还可以选择会过期并自动刷新的凭据,从而降低令牌泄露的风险。

以交互方式登录

  1. 若要在计算机上进行身份验证,请从终端运行以下命令。

    gh auth login
    
  2. 按照屏幕上的提示完成登录。 当被问及你使用 GitHub的位置时:

    • 如果使用 GitHub.com,请选择 GitHub.com。
    • 如果使用其他主机,请选择 “其他”,然后输入主机名,例如 octocorp.ghe.com。

默认情况下,GitHub CLI 将凭据存储在操作系统的密钥环中(如果可用),否则存储在纯文本配置文件中。 无需自行管理此文件。

使用环境变量进行身份验证

对于脚本和其他非交互式用途,可以通过环境变量而不是登录来提供令牌。 为GitHub.com和GitHub Enterprise Cloud设置GH_TOKEN,或为GitHub Enterprise Server设置GH_ENTERPRISE_TOKEN。

GH_TOKEN=YOUR-TOKEN gh api user

将 YOUR-TOKEN 替换为你的令牌。 设置其中一个变量时,GitHub CLI 会使用它而不是任何存储的凭据,并且不会将令牌写入磁盘。 若要为未绑定到特定存储库的命令设置默认主机,请设置 GH_HOST 环境变量。

在 GitHub Actions 中进行身份验证

在 GitHub Actions 工作流中,通过 GitHub CLI 环境变量传递自动提供的 GITHUB_TOKEN 来验证 GH_TOKEN。 这适用于这两者 GitHub.com 以及 GitHub Enterprise Cloud。

steps:
  - name: List open issues
    env:
      GH_TOKEN: ${{ github.token }}
    run: gh issue list --repo ${{ github.repository }}

有关 GitHub Actions 提供的令牌的详细信息,请参阅 GITHUB_TOKEN。

在GitHub Enterprise Server上,将GH_ENTERPRISE_TOKEN设置为GH_TOKEN而不是GH_HOST,并将GitHub Enterprise Server设置为您的GitHub CLI主机,以便GitHub CLI向正确的实例进行身份验证。 以下示例使用 ghes.example.com 作为主机。

steps:
  - name: List open issues
    env:
      GH_HOST: ghes.example.com
      GH_ENTERPRISE_TOKEN: ${{ github.token }}
    run: gh issue list --repo ${{ github.repository }}

通过 HTTPS 对 Git 进行身份验证

如果选择 HTTPS 作为 Git 操作的首选协议,并确认想要使用 GitHub 凭据向 Git 进行身份验证,GitHub CLI 会在尚未配置 Git 凭据帮助程序时将自身配置为该帮助程序。 这样,您便可以运行例如 git push 和 git pull 这样的 Git 命令,而无需设置单独的凭据管理器或使用 SSH。 如果已使用另一个凭据帮助程序,GitHub CLI 会改为将你的新凭据存储在该帮助程序中。

可以通过运行以下命令随时设置此设置。

gh auth setup-git

若要为单个主机而不是所有经过身份验证的主机配置 Git,请使用 --hostname 标志,例如 gh auth setup-git --hostname github.com。

使用有时效的可刷新令牌

默认情况下, GitHub CLI 使用不过期的长生存期令牌进行身份验证。 如果泄露了此类令牌,则会授予访问权限,直到你手动吊销它。

过期令牌可降低该风险。 选择加入时,GitHub CLI 将会过期的访问令牌与轮换刷新令牌一起存储。 访问令牌将在数小时内过期,并且 GitHub CLI 会在需要新的访问令牌时自动使用刷新令牌换取新的访问令牌。 在未再次登录的情况下保持身份验证状态,而泄露的访问令牌在数小时内变得不可用,而不是无限期地持续。

此行为需主动启用,且向后兼容。 如果不选择加入,则不会有任何变化,并且现有登录和手动提供的令牌将继续像以前一样工作。

选择加入

会过期的令牌需要 GitHub CLI 版本 v2.103.0 或更高版本。

即将过期的令牌可在 GitHub Enterprise Server 和 GitHub.com 上使用。 有关即将过期的 OAuth 令牌和刷新令牌的工作原理的详细信息,请参阅 授权 OAuth 应用。

若要请求即将过期的凭据,请在登录时添加 --expiring 标志。

gh auth login --expiring

是否会收到即将过期的凭据取决于服务器支持。 请求它们的是 --expiring 标志。 如果服务器不支持它们,GitHub CLI 将回退为正常、不会过期的令牌并显示信息性消息。

选择加入后,GitHub CLI 会在需要时为你刷新凭据,因此日常无需执行任何新操作。

若要在每次登录时都启用,而无需每次都传递该标志,请启用该设置:

gh config set expiring_credentials enabled

将会过期的令牌与 Git 配合使用

若要在通过 HTTPS 执行 Git 操作时使用有时效的令牌,GitHub CLI 必须是 Git 凭据帮助程序,以便它可以为 Git 提供并刷新轮换凭据。 使用过期凭据登录时,如果尚未配置,GitHub CLI 会要求你将其配置为 Git 凭据帮助程序。 若要确保 GitHub CLI 随时设置为辅助程序,请运行 gh auth setup-git。

我们还建议升级到 Git 2.46 或更高版本。 在 Git 2.46 及更高版本中,GitHub CLI 可以标记即将过期的凭据,以便缓存凭据帮助程序不会在超过其有效期后继续存储该凭据。 在较旧版本的 Git 上,GitHub CLI 仍然有效,但会一次性提示你升级。

读取存储的令牌

某些脚本和扩展需要使用 GitHub CLI 正在使用的令牌,例如对 curl 请求或其他 HTTP 客户端进行身份验证。 若要打印活动令牌,请运行以下命令。

gh auth token

对于即将过期的凭据,GitHub CLI 会在打印前根据需要刷新访问令牌,以确保你收到的令牌有效。 若要读取特定主机的令牌,请使用 --hostname 标志。 若要打印当前令牌而不刷新它,请使用 --no-refresh 标志。

刷新或添加作用域

随着时间的推移,命令可能需要您的凭据尚未具备的其他权限范围。

如果使用过期令牌,请在运行expiring_credentials时传递--expiring标志(或启用gh auth refresh设置)。 否则,更改范围可以将即将过期的凭据替换为不会过期的凭据。

若要更改现有凭据的范围,请使用以下命令。

gh auth refresh --scopes SCOPES

用您所需作用域的逗号分隔列表替换 SCOPES。

这与过期令牌的自动刷新不同,该自动刷新会在后台进行,不会更改您的作用域。 请参阅 “使用会过期的可刷新令牌”。

检查身份验证状态

若要查看登录的帐户以及令牌到期等详细信息,请运行以下命令。

gh auth status

默认情况下,令牌本身处于隐藏状态。 令牌过期或即将过期时,gh auth status 会作为报告状态的一部分将其刷新。

使用这些标志自定义输出和刷新行为:

  • 若要在输出中包含令牌,请添加 --show-token。
  • 对于计算机可读输出,请使用 --json,你可以将其与 --show-token 组合使用。
  • 若要在不刷新的情况下报告当前状态,请添加 --no-refresh。

注销

若要注销帐户,请运行以下命令并按照提示进行操作。

gh auth logout

若要退出特定主机的登录状态而不提示选择一个主机,请使用标志 --hostname,例如 gh auth logout --hostname github.com。

使用多个账户

可以向多个帐户进行身份验证,并可通过 gh auth switch 在这些帐户之间切换。 有关详细信息,请参阅“跨 GitHub 平台使用 GitHub CLI”。

延伸阅读