VPN环境下可访问Stash/Bitbucket但Git fetch提示无法读取远程仓库
我之前碰到过一模一样的场景!结合我的排查经验,给你几个针对性的解决方案,一步步来排查:
先确认Git域名的解析差异
浏览器用的stash.company.com和Git CLI用的git.company.com可能在VPN环境下解析到了不同的IP。先跑两个命令看看解析结果:nslookup git.company.com nslookup stash.company.com如果IP不一样,说明VPN的DNS配置只正确处理了浏览器的域名。这时候可以临时把Git远程URL换成
stash.company.com试试:# SSH方式的话 git remote set-url origin ssh://git@stash.company.com/你的项目路径.git # HTTPS方式的话 git remote set-url origin https://stash.company.com/你的项目路径.git测试
git fetch能不能成功,如果可以,后续直接在本地hosts文件里把git.company.com映射到正确的IP就行。排查VPN的端口/协议限制
浏览器访问用的是80/443端口,而Git如果用SSH的话走的是22端口,很多VPN会限制非HTTP/HTTPS的出站端口。先看看你的Git远程用的是啥协议:git remote -v如果是SSH协议,先试试换成HTTPS(只要服务器支持);如果必须用SSH,就联系IT确认VPN是否放行22端口。另外,有些VPN会拦截SSH连接,你可以在SSH配置里加些参数试试:
编辑~/.ssh/config(Windows用户找C:\Users\你的用户名\.ssh\config),添加:Host git.company.com ServerAliveInterval 60 TCPKeepAlive yes ProxyCommand nc -X connect -x 你的VPN代理地址:端口 %h %p(代理地址和端口得问公司IT要)
检查Git的代理/SSL配置
有时候VPN会自动设置系统代理,但Git可能没继承到,或者之前的代理配置残留了。先看看Git的代理设置:git config --global --get http.proxy git config --global --get https.proxy如果有输出但不是当前VPN的代理,直接清空:
git config --global --unset http.proxy git config --global --unset https.proxy另外,VPN的SSL证书可能导致HTTPS连接失败,可以临时关闭SSL验证测试(别长期开,只是排查用):
git config --global http.sslVerify false如果测试成功,就把VPN的根证书添加到Git的信任列表里就行。
验证SSH私钥的加载情况
虽然你说私钥没改,但VPN环境下SSH代理可能没正确加载私钥。先测试SSH连接:ssh -T git@git.company.com如果提示“Permission denied”,手动把私钥加到SSH代理里:
ssh-add ~/.ssh/你的私钥文件名Windows用户记得用Git Bash或者PowerShell执行,还要确认SSH服务在运行。
终极方案:重置Git网络配置
要是以上都不行,可能是配置缓存出问题了,重置一下网络相关的全局配置:git config --global --unset-all http.proxy git config --global --unset-all https.proxy git config --global --unset-all http.sslVerify然后再试
git fetch。
内容的提问来源于stack exchange,提问作者phagio

