GitHub 密码认证已移除:使用个人访问令牌
从 2021 年 8 月 13 日起,GitHub 不再接受账户密码进行 Git 操作认证。如果你在使用 git pull
或 git 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:生成个人访问令牌
- 登录 GitHub,进入 Settings → Developer settings → Personal access tokens → Tokens (classic)
- 点击 Generate new token (classic)
- 填写 token 描述,选择适当的权限范围(如
repo
用于仓库访问) - 点击 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
- 复制公钥内容:
cat ~/.ssh/id_ed25519.pub
- 登录 GitHub,进入 Settings → SSH and GPG keys
- 点击 New SSH key,粘贴公钥内容
- 测试连接:
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 等)
- 打开设置 → Version Control → GitHub
- 点击 Add account → Log In with Token
- 粘贴个人访问令牌
- 点击 Add Account
Android Studio
- 生成新的个人访问令牌
- 移除已保存的 GitHub 账户
- 重新添加账户并使用令牌认证
- 如果仍有问题,在终端中执行:bash
git remote set-url origin https://<TOKEN>@github.com/<用户>/<仓库>.git
Sourcetree
- 工具 → 选项 → 认证
- 选择 GitHub 账户
- 点击 刷新 OAuth 令牌 或添加新账户
- 或者直接修改仓库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:令牌过期或无效
- 生成新的个人访问令牌
- 更新凭据管理器中的密码字段
- 或更新仓库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/
最佳实践建议
- 优先使用SSH认证 - 更安全且无需定期更新
- 定期轮换令牌 - 定期更新个人访问令牌以提高安全性
- 使用最小权限原则 - 只为令牌授予必要的权限范围
- 安全存储令牌 - 不要将令牌提交到代码仓库中
- 考虑使用GitHub CLI - 简化认证流程和管理
提示
GitHub 还提供细粒度访问令牌 (Fine-grained access tokens),比经典令牌提供更精确的权限控制,建议新用户使用。
通过以上方法,你应该能够解决 GitHub 密码认证已移除的问题,并选择最适合你工作流程的认证方式。