我最近在 SSH 中启用了它ControlMaster
,ControlPersist
以便它重用和多路复用连接以提高速度。配置如下:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 4h
如果我关闭ControlPersist
,一切都很好。有了它在但是,第一个 git/hg 连接总是会冻结。正常情况下(在 shell 中)使用 SSH 连接工作正常,即使是第一次,但 git/hg 会冻结。如果我使用 ctrl+C 停止它然后重试,它将使用已经建立的连接进行多路复用,而且速度会很快,但第一次不会这样做。调到LogLevel
11 会给我:
remote: debug2: fd 4 setting O_NONBLOCK
remote: debug1: forking to background
remote: debug1: Entering interactive session.
remote: debug2: set_control_persist_exit_time: schedule exit in 14400 seconds
remote: debug1: multiplexing control connection
remote: debug2: fd 5 setting O_NONBLOCK
此时,它就冻结并永远停留在那里。出了什么问题?
答案1
我看到了相同的行为,我认为这是由于这个 OpenSSH 错误造成的:https://bugzilla.mindrot.org/show_bug.cgi?id=1988(ControlPersist 导致 stderr 保持打开状态,直到主连接超时)
希望它最终能够得到修复。