尝试通过SSH进行git克隆,但出现管道损坏错误

sulc1iza  于 2023-08-01  发布在  Git
关注(0)|答案(7)|浏览(132)

由于一个奇怪的问题,我在尝试git clone我的一个公共GitHub存储库时遇到了一些奇怪的问题。我知道这不是我的密钥的问题,因为我已经从另一个虚拟机中获取了相同的密钥,只是简单地修复了其权限。这是我在尝试使用SSH时遇到的错误:

[root:kali:~/scripts]# ssh -T git@github.compacket_write_wait:
Connection to 192.30.253.112 port 22: Broken pipe

字符串

建议1

参考:https://gitlab.com/gitlab-com/support-forum/issues/129
已尝试将以下内容添加到/etc/ssh/ssh_config文件中:

Host *
ServerAliveInterval 120
TCPKeepAlive no


但没有运气我甚至尝试将TCPKeepAlive更改为yes,结果还是一样。
我的DNS服务器设置为8.8.8.8,所以不太确定这是问题所在。我可以用git克隆http URL,但不能克隆SSH URL。

建议二

我还尝试使用verbose选项运行ssh命令,根据输出,它看起来确实成功地进行了身份验证,如下所示:

debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to github.com ([192.30.253.113]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8
debug1: Sending env LC_CTYPE = C.UTF-8
packet_write_wait: Connection to 192.30.253.113 port 22: Broken pipe


你知道还有什么地方出了问题吗?

kr98yfug

kr98yfug1#

我不知道这家伙是谁,但保佑他!这对我很有效:https://blog.bchoy.me/post/2018-09-11-vmware-ssh-bug/
把这个放进你的~/.ssh/config

Host *
   ServerAliveInterval 600
   TCPKeepAlive yes
   IPQoS=throughput

字符串
他提供了一个关于IPQoS参数讨论的链接,这为我解决了这个问题。

rks48beu

rks48beu2#

解决方案

@crunk1为我提供了the right answer,但我不需要他列出的所有设置。最低限度,在~/.ssh/config中,我只需要设置:

Host *
   IPQoS=throughput

字符串

IPQoS信息

这解决了我的问题,但后来我想知道的是IPQoS到底是什么。我在任何地方都找不到一个简单的解释(这个线程是SO上ipqos的热门主题),但至少有一些信息在那里。

  • ssh_config手册页描述了我们在上面设置的IPQoS选项,并列出了它的所有有效值。
  • Debian文档描述了与OP类似的故障排除情况。在他们的情况下,他们建议
Host *
    IPQoS=0x00


作为修复方法不知道有什么区别。

  • 最后,openssh specifications page列表有spec RFC8325,它非常详细地描述了QoS(服务质量)。不那么简单,但从我所能收集到的想法是,在连接时,openssh服务器的现代版本将传递ToS(服务类型),这在某种程度上必须与客户端的QoS设置保持一致。
lx0bsm1f

lx0bsm1f3#

没关系。把网络接口从NAT切换到桥接模式,现在一切都很好。疯了

zed5wv10

zed5wv104#

我在macOS 10.15.6上遇到了同样的错误。一个奇怪的转折是,我可以通过打开我的VPN来解决这个错误。我看到其他一些人who use AT&T fiber也有这个问题。
我的解决方法是将其添加到~./ssh/config中

Host github.com
  IPQoS 0x00

字符串
设置IPQoS=throughput不适合我。感谢@tel的修复。

wh6knrhe

wh6knrhe5#

尝试关闭您的VPN。对我很有效

uyto3xhc

uyto3xhc6#

这个问题可能只是因为VPN。我面对这个问题,并意识到,在我的组织中,他们正在使用网络驱动器(NTFS),我可以看到一些VPN相关的文件在那里。
显示红色(x)图标,表示连接已断开。当我点击驱动器时,它自动连接上了。
然后当我通过git克隆时,它工作得很好。

xlpyo6sf

xlpyo6sf7#

帮助我的是,在公共WiFi上切换到port 443,症状是一样的,但原因实际上是port 22被阻止了。
尝试

ssh -T -p 443 git@ssh.github.com`
# > Hi USERNAME! You've successfully authenticated, but GitHub does not
# > provide shell access.

字符串
如果ssh以这种方式工作,但没有443就不能工作,这就是问题所在。
参见:https://docs.github.com/en/authentication/troubleshooting-ssh/using-ssh-over-the-https-port
简而言之,要么在git行中使用ssh://git@ssh.github.com:443,要么添加到~/.ssh/config行中。

Host github.com
    Hostname ssh.github.com
    Port 443

相关问题