已配置SSH密钥,推送代码至GitHub时仍需输入用户名和密码,原因是什么?
已配置SSH密钥但GitHub推送仍要求输入用户名密码的原因
- 仓库远程地址用的是HTTPS而非SSH:这是最常见的问题。执行
git remote -v查看当前仓库的远程地址,如果输出是https://github.com/<用户名>/<仓库名>.git格式,说明Git用的是HTTPS协议,不管SSH密钥有没有配置,都会触发用户名密码验证。 - SSH公钥未正确添加到GitHub账户:你可能只在本地生成了密钥对,但没把公钥内容添加到GitHub的SSH密钥列表里。登录GitHub后进入「Settings」→「SSH and GPG keys」,检查是否有你本地生成的公钥条目。
- SSH连接本身存在问题:可以用
ssh -T git@github.com测试与GitHub的SSH连接,如果返回错误信息(比如权限被拒、找不到密钥),说明SSH配置有问题——可能是本地~/.ssh/config文件配置错误,或者密钥路径没指定对,也可能是防火墙/代理干扰了SSH连接。 - 系统缓存了旧的HTTPS凭证:之前用HTTPS方式推送代码时,系统可能保存了用户名密码的缓存,导致Git优先使用HTTPS的凭证验证,而非SSH。Windows用户可以通过「凭据管理器」删除GitHub相关的凭证;macOS用户在「钥匙串访问」里删除对应条目;Linux用户可以执行
git config --global credential.helper unset清除缓存。 - SSH密钥文件权限不符合要求:SSH对密钥文件的权限有严格要求,私钥(比如
id_rsa)权限如果过于开放(比如设成777),SSH会拒绝使用该密钥。执行以下命令修正权限:chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub - Git配置强制转换SSH地址为HTTPS:全局或仓库级的Git配置中可能存在
url.https://github.com/.insteadOf git@github.com:设置,强制把SSH地址转成HTTPS。执行git config --global --get url.https://github.com/.insteadOf查看是否有该配置,如果有,用git config --global --unset url.https://github.com/.insteadOf删除。
内容的提问来源于stack exchange,提问作者user17433353
相关产品推荐
相关产品推荐

