git push 报 "Authentication Failed" 怎么解决
认证失败的排查顺序:GitHub 已禁用密码认证,必须用 PAT 或 SSH;检查凭据管理器里是否存了过期凭据并清除重试;确认账号对该仓库有写权限;双因素认证开启时密码必然无效。
最常见的原因:GitHub 自 2021 年起不再接受账号密码做 Git 操作认证,可用个人访问令牌(PAT)、SSH 密钥或凭据助手的浏览器授权等受支持方式。 如果你还在用密码,失败是必然。排查按这个顺序:① 密码 → 换 PAT;② 清掉凭据缓存里的过期条目;③ 确认有仓库写权限。
排查步骤
1. 确认认证方式
git remote -v
https://github.com/...→ 密码栏填 PAT,不是登录密码;git@github.com:...→ 走 SSH,检查密钥:ssh -T git@github.com。
2. 生成/更新 PAT
GitHub → Settings → Developer settings → Personal access tokens → 优先生成细粒度令牌并只授权目标仓库所需权限(如写 Contents);经典令牌的 repo scope 较宽,不应无条件要求→ 复制。下次 push 时用户名照常、密码处粘贴 PAT。
3. 清除过期凭据
# Windows:凭据管理器 → Windows 凭据 → 删除 git:https://github.com
# macOS:钥匙串访问 → 搜 github.com → 删除
# 或命令行
git credential-manager erase # 输入 protocol=https / host=github.com
printf "protocol=https\nhost=github.com\n" | git credential reject
4. 检查权限与 SSO
- 别人的仓库/组织仓库:确认你是 collaborator 或组织成员且有写权限;
- 组织开了 SAML SSO:经典 PAT 可能需要 Configure SSO;细粒度 PAT 则按组织选择与批准策略授权,不能一概使用同一流程。
常见问题(FAQ)
Q:开了两步验证(2FA)后还能用密码吗?
不能,开不开 2FA 密码都无效。还可使用受支持的凭据助手浏览器授权等方式。
Q:SSH 也报 Permission denied (publickey)?
那是 SSH 认证问题:ssh -T git@github.com 测试;确认 ~/.ssh/id_ed25519.pub 已添加到 GitHub,ssh-agent 已加载私钥(ssh-add)。
Q:fatal: Authentication failed 和 403 有什么区别?
Authentication failed 不能机械对应单一 HTTP 状态;应结合返回信息检查凭据、仓库 URL 与组织策略。403 常与授权或策略有关,检查写权限、SSO 和分支保护。