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

GitBeginner
立即练习

简介

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

gh auth login

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

理解 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 仓库的安全访问。