WSL2环境下克隆特定Git仓库失败问题排查求助
问题描述
运行Windows 10 22H2设备,在WSL2中部署Ubuntu 24.04 LTS系统,处于带代理和防火墙的企业网络环境。网络基础访问正常(ping、DNS、HTTP(S)、SSH均可用,APT能正常安装软件),但通过SSH密钥克隆部分Git仓库时失败,等待数分钟后报错:
Cloning into 'Foo'... client_loop: send disconnect: Broken pipe fatal: the remote end hung up unexpectedly
- 用
ssh -T连接Git服务器、nslookup主机名、ping服务器、curl访问网页均正常 - 可正常克隆该Git服务器上的其他仓库
- 同一设备的原生Windows、MSYS2、VMWare虚拟机环境下,均可正常克隆这些失败的仓库
- 设置
GIT_SSH_COMMAND=ssh -vvv运行Git,显示连接建立且认证成功,但最终仍出现远程端挂起错误
已尝试的无效修复方案
- 在
~/.ssh/config中配置:Host * ServerAliveInterval 600 IPQoS throughput - 在
/etc/wsl.conf中设置镜像网络模式并重启分发版:[wsl2] networkingMode=mirrored - 增大Git的
http.postBuffer至1048576000 - 将分发版MTU从1500调整为9000
- 禁用主机系统防火墙
排查方向
调整SSH心跳参数
尝试缩短SSH心跳间隔,避免长时间无数据传输被防火墙切断,在~/.ssh/config中添加:Host * TCPKeepAlive yes ServerAliveCountMax 3 ServerAliveInterval 30切换克隆目录到WSL2内部文件系统
若之前克隆到Windows挂载目录(如/mnt/c),尝试克隆到WSL2内部路径(如~/),排查是否因跨文件系统IO阻塞导致连接超时。使用Windows原生SSH客户端
在WSL2中强制调用Windows的SSH执行Git操作,验证是否为WSL2原生OpenSSH的问题:export GIT_SSH_COMMAND="/mnt/c/Windows/System32/OpenSSH/ssh.exe"之后再执行克隆命令。
更新WSL2内核
部分旧版WSL2内核存在TCP连接稳定性问题,执行以下命令更新内核:wsl --update更新完成后重启WSL。
调整Git传输配置
尝试关闭压缩或减小SSH发送包大小,避免大数据包被防火墙拦截:git config --global core.compression 0 git config --global ssh.maxSendPacket 1024
内容的提问来源于stack exchange,提问作者Joshua Schroijen
相关产品推荐
相关产品推荐

