Skip to content

GitHub 密码认证已移除:使用个人访问令牌

从 2021 年 8 月 13 日起,GitHub 不再接受账户密码进行 Git 操作认证。如果你在使用 git pullgit push 时遇到以下错误信息,这意味着你需要使用个人访问令牌 (Personal Access Token, PAT) 替代密码进行认证。

none
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for ...

问题背景

GitHub 为了提高安全性,移除了基于密码的认证方式,强制要求使用更安全的认证方法,主要包括:

  • 个人访问令牌 (PAT) - 替代密码的令牌认证
  • SSH 密钥 - 使用公钥加密技术进行认证
  • OAuth 令牌 - 通过第三方应用进行认证

解决方案

方法一:创建和使用个人访问令牌 (推荐)

步骤 1:生成个人访问令牌

  1. 登录 GitHub,进入 SettingsDeveloper settingsPersonal access tokensTokens (classic)
  2. 点击 Generate new token (classic)
  3. 填写 token 描述,选择适当的权限范围(如 repo 用于仓库访问)
  4. 点击 Generate token 并立即复制生成的令牌(只会显示一次)

重要提示

令牌一旦生成后无法再次查看,请务必立即保存到安全的地方。如果丢失,需要重新生成新令牌。

步骤 2:在不同系统中配置令牌

sh
# 方法一:使用凭据管理器
1. 打开控制面板 用户账户 凭据管理器 Windows 凭据
2. 找到 `git:https://github.com` 条目并编辑
3. 将密码替换为你的个人访问令牌

# 方法二:直接修改远程URL
git remote set-url origin https://<TOKEN>@github.com/<用户>/<仓库>.git
sh
# 方法一:使用钥匙串访问
1. 打开「钥匙串访问」应用
2. 搜索 `github.com`
3. 找到「互联网密码」条目并双击
4. 勾选「显示密码」,输入Mac密码
5. 将密码替换为个人访问令牌并保存

# 方法二:使用GitHub CLI
brew install gh
gh auth login
sh
# 配置Git凭据缓存
git config --global credential.helper cache

# 克隆时直接使用令牌
git clone https://<用户>:<>@github.com/<用户>/<仓库>.git

方法二:使用 SSH 密钥认证 (更安全)

SSH 密钥认证比令牌更安全且无需定期更换,是推荐的长期解决方案。

步骤 1:生成 SSH 密钥

bash
# 生成新的SSH密钥(如果尚未有)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或者使用传统RSA算法
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

步骤 2:添加 SSH 密钥到 GitHub

  1. 复制公钥内容:cat ~/.ssh/id_ed25519.pub
  2. 登录 GitHub,进入 SettingsSSH and GPG keys
  3. 点击 New SSH key,粘贴公钥内容
  4. 测试连接:ssh -T git@github.com

步骤 3:修改远程仓库URL为SSH格式

bash
# 查看当前远程仓库URL
git remote -v

# 修改为SSH格式
git remote set-url origin git@github.com:用户名/仓库名.git

方法三:使用 GitHub CLI 工具

GitHub 官方命令行工具可以简化认证流程:

bash
# 安装GitHub CLI
# macOS
brew install gh

# Windows
winget install --id GitHub.cli

# Ubuntu/Debian
sudo apt install gh

# 认证登录
gh auth login

# 设置Git与GH集成
gh auth setup-git

各开发环境配置

JetBrains IDE (IntelliJ, PyCharm, WebStorm 等)

  1. 打开设置 → Version ControlGitHub
  2. 点击 Add accountLog In with Token
  3. 粘贴个人访问令牌
  4. 点击 Add Account

Android Studio

  1. 生成新的个人访问令牌
  2. 移除已保存的 GitHub 账户
  3. 重新添加账户并使用令牌认证
  4. 如果仍有问题,在终端中执行:
    bash
    git remote set-url origin https://<TOKEN>@github.com/<>/<>.git

Sourcetree

  1. 工具 → 选项 → 认证
  2. 选择 GitHub 账户
  3. 点击 刷新 OAuth 令牌 或添加新账户
  4. 或者直接修改仓库URL为:https://<令牌>@github.com/用户/仓库.git

常见问题解决

问题 1:找不到 origin 远程仓库

bash
# 先添加远程仓库
git remote add origin https://github.com/用户/仓库.git

# 再设置带令牌的URL
git remote set-url origin https://<TOKEN>@github.com/用户/仓库.git

问题 2:令牌过期或无效

  1. 生成新的个人访问令牌
  2. 更新凭据管理器中的密码字段
  3. 或更新仓库URL中的令牌部分

问题 3:多仓库管理

对于多个仓库,可以使用Git配置简化令牌管理:

bash
# 在全局配置中添加URL重写规则
git config --global url."https://<TOKEN>@github.com".insteadOf "https://github.com"

# 或者在 ~/.gitconfig 中添加
[url "https://<TOKEN>@github.com/"]
    insteadOf = https://github.com/

最佳实践建议

  1. 优先使用SSH认证 - 更安全且无需定期更新
  2. 定期轮换令牌 - 定期更新个人访问令牌以提高安全性
  3. 使用最小权限原则 - 只为令牌授予必要的权限范围
  4. 安全存储令牌 - 不要将令牌提交到代码仓库中
  5. 考虑使用GitHub CLI - 简化认证流程和管理

提示

GitHub 还提供细粒度访问令牌 (Fine-grained access tokens),比经典令牌提供更精确的权限控制,建议新用户使用。

通过以上方法,你应该能够解决 GitHub 密码认证已移除的问题,并选择最适合你工作流程的认证方式。