我通过 PC 上的 SSH 通过 Virtualmin 连接到 Debian 9。我走了 +-2 分钟,回来后,SSH 断开了...我尝试更改服务器和客户端上的 ssh 配置...没有任何帮助...在哪里搜索问题?可能是网络或路由器的某些设置?
答案1
一些过于热心的路由器喜欢丢弃闲置时间过长(即不传输任何数据)的 TCP 连接。这可能是因为他们假设用户只使用 HTTP 之类的东西,其中连接通常在单个查询完成后关闭。
假设使用 OpenSSH,使用ClientAliveInterval
和ClientAliveCountMax
指令在sshd_config
,或等效地ServerAliveInterval
在ServerAliveCountMax
客户端配置(~/.ssh/config
或/etc/ssh/ssh_config
)中启用协议级保活数据包。
它们实际上是为了检测远程主机是否已离开,但由于它们会导致在连接空闲时发送消息,因此它们还可以防止外部设备将连接视为空闲。
*AliveInterval
设置客户端/服务器向远程发送查询的时间间隔(以秒为单位),并*AliveCountMax
设置客户端/服务器将连接视为非活动状态后未应答的查询的数量。
像这些值应该做的事情:
ClientAliveInterval 15
ClientAliveCountMax 4
答案2
我的华硕 DSL-N66U 多年来一直这样做,今天我找到了一个解决我的问题的设置。因此,我想详细说明该问题并在互联网上的某个位置进行修复,希望其他人可以找到它。
我托管一个本地服务器,该服务器具有 SSH、HTTP、HTTPS、IMAP、IMAPS、SMTP、SMTPS、MQTT 所有端口转发/针孔。
我有一个静态 IP 和一个与我的静态 IP 关联的域名,因此它是一个带有域名的常规家庭服务器。
当我使用内部网络中的域名连接到服务器时,连接会在一段时间后断开。这使得无法使用 SSH、IMAP、MQTT 或任何保持套接字打开的方式。 Asus DSL-N66U 上的解决方案是更改:
LAN -> Switch Control -> NAT Acceleration
到Disabled