Files
StudyDiary-20261009/10-WebClipper/Linux使用ssh超时断开连接的真正原因与解决【转】.md

16 lines
8.8 KiB
Markdown
Raw Normal View History

2026-10-09 22:06:40 +08:00
---
title: "Linux使用ssh超时断开连接的真正原因与解决【转】"
source: "https://zhuanlan.zhihu.com/p/376629899"
author:
- "[[王从安B/S程序开发]]"
published:
created: 2025-11-26
description: "原文时间:2017-01-28 20:39:23 原文作者:永动机 原文出处:Linux使用ssh超时断开连接的真正原因一、挖坑这篇的起因主要是来自上一个问题「 iTerm2中ssh保持连接不断开」。原本以为是个很常见的小问题,随手一搜…"
tags:
- "clippings"
---
![](https://pic4.zhimg.com/v2-32084879955c0d76f52e5fce409d4409_1440w.jpg)
原文时间:2017-01-28 20:39:23 原文作者: 永动机 原文出处: Linux使用ssh超时断开连接的真正原因 一、挖坑 这篇的起因主要是来自上一个问题「 iTerm2中ssh保持连接不断开 」。 原本以为是个很常见的小问题,随手一搜,解决办法一大堆,试了试可行,就觉得没什么问题了。但,正因为觉得太简单了,在文末去查看了一下服务端配置,想找找问题起因,结果却发现开辟了一个深坑…… 查看的默认配置: $ echo $TMOUT $ #... #TCPKeepAlive yes #... #ClientAliveInterval 0 #ClientAliveCountMax 3 #... 二、入坑 1、提问 提个问题:既然ssh是空闲过久导致连接超时而断开,那么 「ssh默认是多久时间,会自动断开连接?」 结果翻遍大半个搜索引擎……全都是诸如「如何设置,才能让ssh不超时自动断」这样的鬼title,而且大部分都是互相抄,复制粘贴的内容……而我想问的问题是「到底多久超时」,却没人说过……或者说,其实跟本没有ssh超时这一说?! 再提个问题:如果ssh默认设置都没有限制,那 「为什么ssh会断开连接?」 本以为是ssh自动断开超时连接的,但通过配置看到,默认值中并没有做任何限制,那么理论上,ssh的连接是不会断开的。那到底是谁,干了这件「坏事」? 2、再问 实在没什么头绪,跑到QQ群问了一番,结果真有大神回应,并且顺利找到了线索! 最后通过各种摸索,终于知道了问题的主要原因,因为连接是可以的,只是会超时断开,根据网络结构来看,问题就可能出现在一下这几个部分\[ 1 \] : 1. 服务器存在防火墙,会关闭超时空闲连接,或设置了关闭超时空闲连接。 2. 客服端和服务器之间存在路由器,路由器也可能带有防火墙,会关闭超时空闲连接。 3. 客服端存在防火墙,会关闭超时空闲连接。 原来,问题出在 防火墙 !! 3、追问 为什么会是防火墙呢?根据大神指点:在iptables的一些NAT配置说明里有提到—— 4.3.6 State match 状态匹配扩展要有内核里的连接跟踪代码的协助,因为它是从连接跟踪机制中得到包的状态的。这样我们就可以了解连接所处的状态。它几乎适用于所有的协议,包括那些无状态的协议,如ICMP和UDP。 针对每个连接都有一个缺省的超时值,如果连接的时间超过了这个值,那么这个连接的记录就被会从连接跟踪的记录数据库中删除,也就是说连接就不再存在了。 这个match必须有-m state作为前提才能使用。状态机制的详细内容在章节状态机制中。\[ 2 \] NAT firewalls like to time out idle sessions to keep their state tables clean and their memory footprint low. NAT防火墙喜欢对空闲的会话进行超时处理,以确保它们状态表的干净和内存的低占用率。 Some firewalls are nice, and let you idle for up to a day or so; some are gestapo and terminate your session after 5 minutes. 一些防火墙比较友好,允许你的空闲会话时间为一天甚至超过一天;另一些却如盖世太保,5分钟空闲就终止你的会话。 \[ 3 通过这段描述(好吧,其实这段我没看得太透彻-0-。看来平时缺少些TCP等的知识细节的积累,对处理问题时的一些方向,线索,还是会有不少的障碍的。),我们就比较能大致想到断开的原因了—— 通过ssh连接后,客户端和服务端长时间没响应时,在两方机器设置中均没任何限制,但在各自的防火墙,或是中转网络连接路由的防火墙中,出现了「闲置超时断开」的缺省机制! 三、填坑 总算知道了问题所在。既然如此,那就可以「对症下药」了: 让连接「忙」起来,别「闲」着! 方法有几种,选其一即可。 1、修改服务端配置 TCPKeepAlive yes 表示TCP保持连接不断开 ClientAliveInterval 300 指定服务端向客户端请求消息<E6B688><E681AF>
编辑于 2022-04-27 23:06[SSH(Secure Shell)](https://www.zhihu.com/topic/19557973)[防火墙](https://www.zhihu.com/topic/19571143)[Linux](https://www.zhihu.com/topic/19554300)