Git for Windows SSH凭证访问Gitlab失效提示输入密码问题求助
排查&解决步骤
1. 先打印SSH连接日志定位问题
执行带调试信息的连通性测试命令,直接定位异常环节:ssh -vT git@gitlab.local
重点查看输出中debug1: Offering public key:开头的行,确认是否有读取你使用的~/.ssh/id_rsa_new密钥:
- 若未出现该密钥路径,说明SSH连接时未匹配到对应密钥
- 若出现但后续返回密钥无效,需检查密钥权限或Gitlab公钥配置
2. 优先配置SSH config固定密钥映射(最稳妥方案,无需每次手动ssh-add)
你使用了非默认路径的密钥,SSH默认只会自动读取id_rsa、id_ed25519等标准命名的密钥,通过配置config文件可永久绑定域名和对应密钥:
- 执行
vim ~/.ssh/config(或用其他文本编辑器打开该文件,不存在则新建) - 写入以下配置:
Host gitlab.local HostName gitlab.local User git IdentityFile ~/.ssh/id_rsa_new IdentitiesOnly yes
- 修正配置文件权限,SSH对权限要求严格,权限过高会直接拒绝使用:
chmod 600 ~/.ssh/config && chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_rsa_new
3. 核对Gitlab公钥配置
执行cat ~/.ssh/id_rsa_new.pub,将输出的公钥内容和Gitlab账号中添加的公钥做对比,确认没有多复制空格、换行或者漏字符的情况。
4. 配置SSH密钥持久生效(可选,解决重启Git Bash后ssh-add失效问题)
Git for Windows默认不会持久保存ssh-add的密钥,每次重启终端都需要重新执行add命令,可在~/.bashrc文件中追加以下内容实现开机自动加载:
env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add ~/.ssh/id_rsa_new elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add ~/.ssh/id_rsa_new fi unset env
保存后重启Git Bash即可自动加载密钥。
效果验证
所有配置完成后执行ssh -T git@gitlab.local,返回Welcome to GitLab, @你的用户名!即配置生效,后续执行Git命令不会再弹出密码输入提示。
内容的提问来源于stack exchange,提问作者m gold
相关产品推荐
相关产品推荐

