如何设置 Git 个人访问令牌配置

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将指导你完成设置和配置 Git 个人访问令牌(personal access tokens)的过程。你将学习如何生成、保护和管理这些令牌,以及了解它们在 Git 生态系统中的重要性。在本指南结束时,你将对如何有效地使用个人访问令牌进行安全的 Git 操作有深入的了解。

gh auth login

本实验(Lab)需要联网学习,因此只有 LabEx Pro 用户可以启动虚拟机。将你的账户升级为 Pro


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/GitHubIntegrationToolsGroup(["GitHub Integration Tools"]) git/SetupandConfigGroup -.-> git/config("Set Configurations") git/SetupandConfigGroup -.-> git/git("Show Version") git/GitHubIntegrationToolsGroup -.-> git/cli_config("Configure CLI") subgraph Lab Skills git/config -.-> lab-393036{{"如何设置 Git 个人访问令牌配置"}} git/git -.-> lab-393036{{"如何设置 Git 个人访问令牌配置"}} git/cli_config -.-> lab-393036{{"如何设置 Git 个人访问令牌配置"}} end

理解 Git 个人访问令牌

Git 是一个广泛使用的分布式版本控制系统,它使开发者能够在项目上进行协作、跟踪更改并管理代码仓库。有效使用 Git 的一个重要方面是在与远程仓库交互时进行安全认证。

什么是个人访问令牌?

个人访问令牌(Personal Access Tokens,PATs)是一种认证凭证,允许你在不使用用户名和密码的情况下安全地访问你的 Git 仓库。它们的功能与密码类似,但具有几个优点:

  1. 增强的安全性:可以在不更改主账户密码的情况下撤销或轮换 PATs。
  2. 细粒度权限:你可以通过分配特定的作用域(scope)来限制令牌可以执行的操作。
  3. 自动化支持:PATs 允许脚本、CI/CD 管道和其他工具进行程序化访问。
  4. 多因素认证兼容性:PATs 可以与启用了多因素认证(MFA)的账户无缝配合使用。

为什么要使用个人访问令牌?

许多 Git 托管平台,包括 GitHub、GitLab 和 Bitbucket,正在逐步淘汰基于密码的 Git 操作认证方式。这一转变主要是出于安全考虑。个人访问令牌提供了一种更安全的替代方案,降低了与长期、广泛访问凭证相关的风险。

当你使用个人访问令牌而不是密码时:

  • 你可以将令牌的功能限制为仅满足所需的操作
  • 你可以为不同的目的创建多个令牌
  • 你可以撤销单个令牌而不影响其他令牌
  • 你可以更好地跟踪访问和使用情况的审计记录

在接下来的步骤中,我们将创建一个个人访问令牌并配置 Git 使用它进行认证。

在 GitHub 上生成个人访问令牌

在这一步中,我们将在 GitHub 上生成一个个人访问令牌。在其他 Git 平台(如 GitLab 或 Bitbucket)上的操作过程类似,只是用户界面略有不同。

在 GitHub 上创建令牌

按照以下步骤生成你的个人访问令牌:

  1. 打开终端并安装 GitHub CLI 工具,它提供了一种方便的方式来与 GitHub 进行交互:

    sudo apt-get update
    sudo apt-get install -y gh
  2. 通过运行以下命令与 GitHub 进行身份验证:

    gh auth login
gh auth login

按照交互式提示操作:

  • 当被问及账户时,选择“GitHub.com”
  • 选择“HTTPS”作为你首选的协议
  • 确认你要使用 GitHub 凭证进行身份验证
  • 当提示选择身份验证方法时,选择“使用 Web 浏览器登录”

将会显示一个一次性代码。GitHub 会在你的浏览器中打开,或者会要求你访问一个 URL 并输入此代码。

  1. 身份验证成功后,生成一个新的个人访问令牌:

    gh auth token

    此命令将显示你当前的身份验证令牌。复制此令牌并将其保存在安全的位置,因为我们在接下来的步骤中会用到它。

    如果你想直接创建具有特定作用域(scope)的令牌,可以使用:

    gh auth refresh -s repo,read:org
    gh auth token

    这将创建一个具有仓库和组织读取权限的令牌。

  2. 另外,你也可以直接从 GitHub 网站生成令牌:

gh auth login
  • 访问 https://github.com
  • 点击右上角的个人资料图片
  • 选择“Settings”
  • 向下滚动并点击左侧边栏中的“Developer settings”
  • 点击“Personal access tokens”,然后点击“Tokens (classic)”
  • 点击“Generate new token”并选择“Generate new token (classic)”
  • 为你的令牌起一个描述性的名称,如“Git CLI access”
  • 选择适当的作用域(至少选择“repo”以获得仓库访问权限)
  • 点击“Generate token”
  • 复制生成的令牌并安全保存

请记住将你的令牌存储在安全的位置,因为 GitHub 只会显示一次。如果你丢失了它,就需要重新生成一个。

配置 Git 使用个人访问令牌

现在你已经生成了个人访问令牌,需要配置 Git,使其在与远程仓库交互时使用该令牌进行身份验证。有几种方法可以实现这一点。

方法 1:使用 Git 凭证助手

Git 凭证助手可以让 Git 记住你的凭证,这样你就无需每次都输入它们。

  1. 打开终端并导航到你的项目目录:

    cd ~/project
  2. 配置 Git 使用凭证助手来存储你的凭证:

    git config --global credential.helper store

    注意:这会将你的凭证以未加密的形式存储在磁盘上。若要选择更安全的选项,你可以使用缓存助手,它会将凭证临时存储在内存中:

    git config --global credential.helper 'cache --timeout=3600'

    这会将你的凭证在内存中存储 1 小时(3600 秒)。

  3. 创建一个示例 Git 仓库来测试你的配置:

    mkdir -p ~/project/test-repo
    cd ~/project/test-repo
    git init
  4. 添加一个远程仓库(你需要将 yourusername 替换为你实际的 GitHub 用户名):

    git remote add origin https://github.com/yourusername/test-repo.git
  5. 下次 Git 需要进行身份验证时(例如,在推送或拉取时),系统会提示你输入凭证。输入你的 GitHub 用户名,并使用你的个人访问令牌作为密码。

方法 2:使用基于 URL 的身份验证

另一种方法是将你的令牌直接嵌入到仓库 URL 中:

  1. 在你的项目目录中,使用你的令牌配置远程仓库 URL:

    git remote set-url origin https://YOUR_TOKEN@github.com/yourusername/test-repo.git

    YOUR_TOKEN 替换为你实际的个人访问令牌,将 yourusername 替换为你的 GitHub 用户名。

  2. 创建一个测试文件来验证配置:

    echo "## Test Repository" > README.md
    git add README.md
    git commit -m "Initial commit"

方法 3:使用 Git 配置文件

你也可以直接编辑 Git 配置文件:

  1. 创建或编辑仓库中的 .git/config 文件:

    nano ~/project/test-repo/.git/config
  2. 更新 origin 远程仓库的 URL 以包含你的令牌:

    [remote "origin"]
        url = https://YOUR_TOKEN@github.com/yourusername/test-repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

    YOUR_TOKEN 替换为你实际的个人访问令牌,将 yourusername 替换为你的 GitHub 用户名。

  3. Ctrl+O 保存文件,然后按 Enter,再按 Ctrl+X 退出。

出于安全考虑,对于大多数用户,通常建议使用凭证助手方法(方法 1),因为它避免了将令牌直接存储在配置文件中。

测试个人访问令牌

在配置 Git 使用个人访问令牌后,验证身份验证是否正常工作非常重要。在这一步中,我们将通过执行常见的 Git 操作来测试该令牌。

在 GitHub 上创建测试仓库

首先,让我们使用 GitHub CLI 在 GitHub 上创建一个测试仓库:

  1. 在 GitHub 上创建一个新仓库:

    cd ~/project
    gh repo create test-pat-repo --private --clone
    cd test-pat-repo

    此命令会创建一个名为“test-pat-repo”的新私有仓库,并将其克隆到你的本地机器上。

测试基本的 Git 操作

现在,让我们执行一些基本的 Git 操作,以确保你的个人访问令牌正常工作:

  1. 创建一个简单的 README 文件:

    echo "## Test PAT Repository" > README.md
    echo "This repository is used to test Personal Access Token configuration." >> README.md
  2. 添加并提交该文件:

    git add README.md
    git commit -m "Add README file"
  3. 将更改推送到 GitHub:

    git push -u origin main

    如果你的个人访问令牌配置正确,推送操作应该会成功,且不会提示输入密码。如果你使用的是凭证助手,并且这是你第一次推送,系统可能会提示你输入用户名和令牌,之后这些信息会被存储起来供后续使用。

  4. 进行另一项更改以验证存储的凭证:

    echo "### Additional Information" >> README.md
    echo "This section contains additional information about the repository." >> README.md
    git add README.md
    git commit -m "Update README with additional information"
    git push

    第二次推送应该无需任何身份验证提示即可完成,这证实了你的令牌正在被正确使用。

验证仓库访问权限

为了进一步确认你的令牌正常工作,你可以列出你的仓库:

gh repo list --limit 5

此命令应该会显示你的 GitHub 仓库列表,包括我们刚刚创建的测试仓库。如果此命令执行成功,则证实你的个人访问令牌具有访问仓库的正确权限。

如果你在这些测试过程中遇到任何问题,请仔细检查你的令牌配置,并确保令牌具有你尝试执行的操作所需的作用域(权限)。

管理和轮换个人访问令牌

个人访问令牌应像对待密码一样谨慎处理。在最后这一步,我们将讨论管理和轮换令牌以维护安全性的最佳实践。

列出你的个人访问令牌

要查看你在 GitHub 上现有的个人访问令牌:

  1. 使用 GitHub CLI:

    gh auth status

    此命令会显示你当前的身份验证状态信息,包括正在使用的令牌。

  2. 另外,你也可以通过 GitHub 网页界面查看所有令牌:

    • 访问 GitHub.com 并登录
    • 点击右上角的个人资料图片
    • 选择“Settings”
    • 导航至“Developer settings” > “Personal access tokens” > “Tokens (classic)”

令牌安全最佳实践

为了维护个人访问令牌的安全性,请遵循以下最佳实践:

  1. 限制令牌作用域:仅授予令牌完成预期用途所需的最小权限。

  2. 使用描述性名称:为你的令牌赋予有意义的名称,以表明其用途和使用场景。

  3. 设置过期日期:对于非关键令牌,设置过期日期以强制定期轮换。

    要使用 GitHub CLI 创建带有过期日期的令牌:

    gh auth refresh -s repo,read:org --expiry 30d
    gh auth token

    这将创建一个 30 天后过期的令牌。

  4. 定期审计令牌:定期审查你的令牌,并撤销任何不再需要的令牌。

  5. 安全存储令牌:切勿将令牌存储在公共仓库、未加密的文件中,或与他人共享。

  6. 使用环境变量:在脚本或应用程序中使用令牌时,将其存储为环境变量,而不是硬编码。

    例如:

    export GITHUB_TOKEN=your_token_here

撤销个人访问令牌

如果你怀疑某个令牌已泄露或不再需要,请立即撤销它:

  1. 使用 GitHub CLI(将 TOKEN 替换为你的令牌):

    gh auth logout

    这会让你退出登录并使当前令牌失效。

  2. 通过 GitHub 网页界面:

    • 访问 GitHub.com 并登录
    • 导航至“Settings” > “Developer settings” > “Personal access tokens” > “Tokens (classic)”
    • 找到你要撤销的令牌
    • 点击“Delete”并确认操作

轮换你的令牌

定期轮换令牌是一种良好的安全实践。以下是轮换令牌的方法:

  1. 生成一个与旧令牌具有相同权限的新令牌。
  2. 更新你的应用程序和配置以使用新令牌。
  3. 测试新令牌是否能正常工作。
  4. 撤销旧令牌。

对于自动化流程,可以考虑使用环境变量或安全保管库来存储令牌,这样会使轮换更容易。

## Generate a new token
gh auth refresh -s repo,read:org
NEW_TOKEN=$(gh auth token)

## Update your Git remote URL with the new token
git remote set-url origin https://${NEW_TOKEN}@github.com/yourusername/your-repo.git

## Verify it works
git fetch

## Revoke the old token through GitHub website
echo "Remember to revoke your old token in GitHub settings"

通过遵循这些最佳实践,你可以在最小化未经授权访问风险的同时,保持对 Git 仓库的安全访问。

总结

在本教程中,你已经学习了如何有效地使用 Git 个人访问令牌。以下是你所完成内容的回顾:

  1. 理解了使用个人访问令牌进行 Git 身份验证的重要性和好处
  2. 使用 CLI 和网页界面在 GitHub 上生成了个人访问令牌
  3. 配置 Git 使用个人访问令牌进行仓库操作
  4. 通过执行基本的 Git 操作测试了令牌配置
  5. 学习了管理、保护和轮换令牌的最佳实践

通过使用个人访问令牌而非密码,你增强了 Git 工作流程的安全性。现在,你可以创建具有特定权限的令牌,限制其使用期限,并在必要时撤销它们,而不会影响你的主账户凭证。

请记住以下要点:

  • 始终为你的令牌使用最小必要权限
  • 安全存储令牌,切勿共享
  • 定期轮换令牌,特别是对于敏感仓库
  • 立即撤销未使用或已泄露的令牌

遵循这些实践,你可以在最小化安全风险的同时,保持对 Git 仓库的安全访问。