SSH 连接如何在网络重启后继续存在?

Ser*_*ier 69 networking ssh ip

在 Linux SSH shell 中,键入/etc/init.d/network restart以重新启动网络服务。

由于网络服务出现故障,我希望我的 SSH 连接终止。但事实并非如此。很酷。但是 Linux 是如何做到这一点的呢?它如何在服务重启期间保持我的 SSH 连接有效?

Dav*_*rtz 77

它通过不做任何特别的事情来做到这一点。网络重新启动的时间比 TCP 连接超时所用的时间短,因此 TCP 连接在“中断”后仍然存在,就像在任何暂时网络中断时一样。

Windows 不做同样事情的唯一原因是因为当网络接口出现故障时,Windows 会专门重置 TCP 连接。至少可以说,这是一件非常愚蠢的事情,因为 TCP 是专门为在短暂的网络中断中幸存下来而设计的。


Nil*_*ils 16

SSHD 在连接时分叉一个子进程。如果 SSHD 或整个网络重新启动,这个子进程不会死。这就是为什么您可以更新 ssh 和/或其配置,执行service sshd restart并仍然保持连接到旧设置的旧 ssh 会话的原因。除此之外,ssh 可以从小型网络中断中很好地恢复。

  • 这个答案对我很有用,因为它增加了关于“sshd”如何避免“service sshd restart”停机的见解。如果您更新`sshd`(安全更新等),子进程仍会在原始代码上运行(更新前),但会继续提供服务,而不是被中断。我猜主`sshd`进程的侦听套接字的可用性非常短暂地中断,但是,当第一个子进程结束并且网络接口暂时指示端口已关闭时。 (5认同)
  • 由于 David Schwartz 给出的原因,SSH 甚至不*知道*“小网络中断”。它不是 SSH 特有的属性。 (3认同)
  • 正如 EJP 所解释的那样,您的答案是正确但无关紧要的。 (3认同)