我最近在安全企业网络(带有代理和防火墙)上运行 Windows 10 22H2 的系统上,在 Windows Subsystem for Linux version 2 中设置了 Ubuntu 24.04 LTS Noble Numbat。它运行得非常好,我似乎可以通过 ping、DNS、HTTP(S) 和 SSH 完全访问网络。例如,我可以使用 APT 安装软件。然而,我面临一个主要问题:我可以克隆一些 Git 存储库,但不能克隆其他 Git 存储库。我必须使用基于密钥的身份验证通过 SSH 克隆存储库,当我无法克隆存储库时,在等待几分钟后会收到以下错误消息:
Cloning into 'Foo'...
client_loop: send disconnect: Broken pipe
fatal: the remote end hung up unexpectedly
使用
ssh -T
访问 git 服务器效果很好,就像 nslookup 其主机名、ping 它并使用 curl
从中获取网页一样。我可以从 Git 服务器克隆一些其他存储库。
我已尝试了所有常见建议的修复方法,但似乎都不起作用。以下是我尝试过但失败的事情的列表:
IPQoS
设置为 throughput
并在 ServerAliveInterval
中设置 ~/.ssh/config
,如下所示:
Host *
ServerAliveInterval 600
IPQoS throughput
networkingMode=mirrored
中设置 /etc/wsl.conf
并重新启动分发(使用 8 秒规则),如下所示:
[wsl2]
networkingMode=mirrored
应用这些想法后,我仍然遇到完全相同的错误。在环境变量
GIT_SSH_COMMAND
设置为 ssh -vvv
的情况下运行 Git 表示连接已设置并且用户(我)已成功通过身份验证,但最终会以几乎相同的通知结束,即远程端意外挂断。
在同一台计算机上,我可以通过 SSH 在本机 Windows、MSYS2 和在 VMWare Workstation Player 中运行的虚拟机中克隆有问题的存储库。
这里可能出了什么问题?我怎样才能知道呢?我真的很困惑...
提前感谢您的输入!
正如你所说,
回购相当大
所以克隆很可能只是超时了。我不熟悉 WSL 细节,但是
http.postBuffer
对 SSH 会话的影响为零,并且仅当到任何服务器的路由中的所有节点也处于该设置时,将 MTU 更改为巨型帧才会起作用(否则你只会被降到 1500 或其他什么,并且伴随着很多额外的碎片)。
相反,请考虑部分克隆。这里的详细信息可能取决于您的目标:
git clone --filter=blob:none <url>
。git clone --filter=tree:0 <url>
。git clone --depth=n <url>
(其中 n
是要获取的提交数量 - 实际上大多数人只需要 1)。GitHub 有一篇关于部分克隆的优秀博客文章,我建议进一步阅读。