Git Push在几次push之后卡住

6
我启动Ubuntu Linux,打开终端,编辑一些代码,快乐地执行。
git push origin master

然而,经过一段时间后(有时是30分钟,有时是几个小时),完全相同的命令会出现停顿(完全没有输出)。
当我尝试执行该命令时,
ssh -v git@github.com

我收到了以下回复:
OpenSSH_5.8p1 Debian-1ubuntu3, OpenSSL 0.9.8o 01 Jun 2010
debug1: Reading configuration data /home/avitus/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master

然后它又卡住了。似乎一旦我使用SSH连接到另一台服务器,就无法再使用SSH连接到git。有什么解决办法吗?每次都必须重新启动,这真的很烦人。

更新:

如果我从~/.ssh/config中删除以下两行内容(旨在方便连接共享),问题就会消失。

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r

你是否曾经设置过一个新的SSH连接到GitHub作为控制主机?(这是共享现有连接的机制。)那个调试信息看起来好像已经找到了一个现有的SSH控制主机。 - Mark Longair
马克 - 我认为问题就像你所提到的那样,因为当我删除了上面的两行代码后,一切都重新开始工作了。不过,在这台机器上,我只有一个用户连接到Git。 - Andy
太好了,听到你成功了我非常高兴。现在我已经添加了一个类似的答案。 - Mark Longair
2个回答

3

将我从评论中的猜测转化为回答...

ssh -v输出的最后一行:

debug1: auto-mux: Trying existing master

这段文字告诉你,SSH已经被配置为寻找可以重用的现有SSH连接。我怀疑这个现有的连接最终以某种方式被卡住了,这可以解释你所看到的行为。

这个连接共享功能在ssh_config(5)手册ControlMaster部分有描述。基本上,“主” SSH会话在/tmp中创建一个套接字,后续会话可以连接到该套接字,而无需重新进行潜在的长身份验证步骤。你设置了auto选项,这意味着这个套接字将自动创建和使用。


0

在 GitHub 的支持页面中,我费了好大劲才偶然发现了一个帮助页面:

https://docs.github.com/en/authentication/troubleshooting-ssh/using-ssh-over-the-https-port

原来我的工作场所有一种神奇的防火墙/端口保护组合,可以“几乎”允许常规的Git SSH访问GitHub,也就是说,它偶尔能够工作,但不可靠。;-b
通过在我的$HOME/.ssh/config文件中使用此咒语,使用SSH Over HTTPS,我突然能够通过我的GitHub SSH密钥从命令行访问我的GitHub存储库:
Host github.com

User git

Hostname ssh.github.com

Port 443 

PreferredAuthentications publickey

IdentityFile /home/XXX/.ssh/github_id_rsa

TCPKeepAlive yes     # not sure if truly needed

IdentitiesOnly yes   # not sure if truly needed

祝愉快!Jeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeem :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接