该报错本质是远程服务已弃用密码认证,git却仍在尝试用过期凭证或错误协议连接;需先确认https或ssh协议类型,清理macos keychain中旧凭据,改用personal access token或ssh密钥认证。
macos 上 git 远程操作报错“invalid username or password”或“authentication failed”,大概率不是输错了密码,而是凭据已失效、过期或协议不匹配。关键在于:git 仍在用旧凭证自动登录,而远程服务(如 github)早已拒绝密码直连——它只认 personal access token(pat)或 ssh 密钥。
确认当前使用的是 HTTPS 还是 SSH 协议
先看 Git 正在尝试哪种连接方式:
- 运行 git remote -v,查看输出中的 URL 是以
https://还是git@开头 - 如果是
https://github.com/user/repo.git,说明走的是 HTTPS + 凭据管理器路径,必须用 PAT,不能用账户密码 - 如果是
git@github.com:user/repo.git,则走 SSH,需检查本地~/.ssh/id_rsa.pub是否已添加到 GitHub,且 ssh-agent 是否已加载密钥
检查并清理 Keychain 中的过期凭据
macOS 默认用 git-credential-osxkeychain 缓存 HTTPS 凭据,但不会自动更新。旧密码、过期 PAT 或错误用户名都卡在这里:
- 打开 Spotlight(Cmd + 空格),输入 Keychain Access 并回车
- 在右上角搜索框中输入你的远程主机名,例如
github.com - 找到类型为“Internet Password”的条目,双击打开 → 点击“显示密码”前先解锁钥匙串(可能需要输入 macOS 登录密码)
- 确认里面存的是 PAT(一长串以
ghp_开头的字符串),而不是你的账户密码;如果不是,直接编辑或删除该条目
命令行快速擦除并重置凭据
比图形界面更直接,适合批量处理或脚本化:
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
- 执行:
git credential-osxkeychain erase host=github.com protocol=https,然后按回车(无任何输出即成功) - 再执行一次
git pull或git push,Git 会重新弹出用户名和密码提示框 - 此时用户名填 GitHub 账户名,密码栏务必粘贴你新生成的 Personal Access Token(不是登录密码)
推荐转向更可靠的认证方式
HTTPS + Keychain 容易因 PAT 过期、权限变更或系统升级失效。长期开发建议切换:
-
改用 SSH:生成密钥(
ssh-keygen -t ed25519 -C "your_email@example.com"),添加到 ssh-agent,再把公钥(cat ~/.ssh/id_ed25519.pub)贴到 GitHub Settings → SSH and GPG keys -
升级到 Git Credential Manager(GCM):它支持自动刷新令牌、2FA 集成,且跨平台统一。安装后运行
git config --global credential.helper manager
问题本质不是“密码错”,而是 Git 还在用旧规则敲门,而门锁已经换了。看清协议、清掉缓存、换上有效凭证,就能绕过这个看似神秘的报错。










