我使用 OpenSSH 的ControlMaster 功能大大加快了我大量使用的几个系统的新连接的速度。
我的 中有以下内容~/.ssh/config
:
Host *
ConnectTimeout 7
ControlMaster auto
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlPersist 10m
一般来说,这种方法效果很好。但是,有一个主要麻烦:如果主机的 ControlMaster 套接字由于网络中断而“挂起”,ssh that_host
则永远挂起据我所知,它实际上从未放弃现有的 ControlMaster 套接字并尝试创建一个新的。我必须手动操作ssh -O exit that_host
才能使其工作。
我真正希望能够说服ssh
大家放弃并拆除 ControlMaster 插座,如果它无法在ConnectTimeout
.
是否有ControlMasterConnectTimeout
我遗漏的选项?或者我可以通过其他方式让 ssh 检测并重新启动已死的 ControlMaster 套接字?
答案1
总结
Host *
ServerAliveInterval 11
我猜测ConnectTimeout
这里不适用因为主机已经连接。
这并不是特定的,ControlMaster
但您可以轻松地将其应用于配置中的相关条目。
您可以使用两种不同的方法来检测陈旧连接:
TCPKeepAlive
使用底层套接字中的机制。ServerAliveInterval
(直至ServerAliveCountMax
连续失败)
我喜欢后者,因为可能还有其他损坏/挂起的东西会被捡起来,而且手册中也提到了欺骗的可能性。
显然,您可以选择其他数字。此变量与ServerAliveCountMax
(默认值 3)的组合将确定何时断开连接,因此我看到在断开 vpn 连接后大约 33 秒内问题消失(我没有准确测量这一点,并注意到一个会话花费的时间更长,但我全局应用了此设置,也许我应该只将其应用于我使用的主机ProxyJump
)。