升级Git至2.36.1后执行git push提示输入密码如何解决
Git 2.36.1版本升级后GitLab SSH认证失效、push弹密码框排查方案
按以下优先级逐步排查,覆盖该版本升级后所有已知的触发场景:
- 先确认远程仓库地址协议
进入本地仓库目录执行git remote -v,若输出的origin地址为https://开头,说明升级过程中旧的SSH远程地址被异常改写,所有SSH密钥配置都不会生效。直接执行命令改回SSH地址即可:git remote set-url origin git@<你的本地GitLab域名>:<项目组路径>/<仓库名>.git,修改后直接测试push是否恢复正常。 - 校验SSH连接的密钥协商逻辑
执行ssh -T git@<你的本地GitLab域名> -v查看debug级连接日志:- 若日志中出现
no mutual signature algorithm报错,是因为Git 2.36.1绑定的OpenSSH版本默认禁用了基于SHA-1的RSA签名算法,旧版生成的RSA密钥默认走SHA-1哈希,会被直接拒绝。编辑~/.ssh/config文件(Windows系统对应路径为C:\Users\<你的用户名>\.ssh\config),添加如下配置:Host <你的本地GitLab域名> HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa - 若日志中未读取到你配置的RSA私钥,先检查私钥文件权限:Linux/macOS系统执行
chmod 600 ~/.ssh/id_rsa修正权限;Windows系统右键私钥文件打开「属性-安全-高级」,禁用权限继承,删除所有非当前登录用户的权限条目,仅保留当前用户的完全控制权限——OpenSSH检测到私钥权限过宽会直接拒绝读取,直接回退到密码认证流程。
- 若日志中出现
- 校验safe.directory配置有效性
之前执行的git config --global --add safe.directory *foldername*需要替换为仓库的实际绝对路径,路径中的通配符仅支持全量匹配,不支持路径片段匹配。如果需要快速绕过目录归属校验,可以直接执行git config --global --add safe.directory "*"全局信任所有目录,避免因为目录归属问题导致SSH认证逻辑异常fallback到密码输入。 - 清理残留的错误凭据缓存
Windows系统打开「凭据管理器-Windows凭据」,删除所有和本地GitLab域名相关的git类凭据;macOS系统打开「钥匙串访问」,搜索本地GitLab域名删除对应的Git凭据条目;Linux系统执行git config --global --unset credential.helper临时禁用凭据缓存,避免旧的HTTP错误凭据被自动调用触发密码框。
补充:如果最终暂时无法修复SSH认证,走HTTP协议认证时不能直接输入账号密码,需要在GitLab生成对应权限的个人访问令牌(PAT),将PAT作为密码输入才能通过MFA校验,优先修复SSH认证可跳过该步骤。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

