OpenSSH连接心跳检测及空闲会话自动断开教程

夏墨同学_5672

夏墨同学_5672

2026-03-23

542人浏览

原创

openssh客户端防断连需配置serveraliveinterval和serveralivecountmax,前者设心跳间隔(如30秒),后者设最大失败次数(如3次),二者合起来实现主动保活;服务端则用clientaliveinterval和clientalivecountmax控制空闲超时,与客户端机制不同。

openssh连接心跳检测及空闲会话自动断开教程

OpenSSH 客户端怎么设置心跳防止断连

客户端主动发心跳,靠的是 ServerAliveInterval 和 ServerAliveCountMax 这两个配置。不设它们,SSH 默认完全不发任何保活包,网络中间设备(比如 NAT 网关、防火墙)静默丢包后,连接就卡住或悄无声息断开。

常见错误现象:终端突然卡死、ssh 命令无响应、执行命令后光标不动但实际已断连;再敲字符会报 Write failed: Broken pipe。

  • ServerAliveInterval 30 表示每 30 秒向服务端发一次空包(TCP 层的 ACK + SSH keepalive 消息)
  • ServerAliveCountMax 3 表示连续 3 次没收到响应才断开连接(即最多容忍 90 秒无响应)
  • 这两个参数只在客户端生效,写在 ~/.ssh/config 里最稳妥,例如:
    Host example.com
        HostName example.com
        User alice
        ServerAliveInterval 30
        ServerAliveCountMax 3
  • 别用 ClientAliveInterval —— 那是服务端配置项,对单个客户端无效,且需要 root 权限改 /etc/ssh/sshd_config

OpenSSH 服务端如何限制空闲会话时长

服务端控制空闲断连,核心是 ClientAliveInterval 和 ClientAliveCountMax,但它们的行为和客户端的 ServerAlive* 完全不同:服务端是「等客户端不说话太久才动手」,不是「帮客户端保活」。

典型使用场景:运维统一管理服务器,防止用户忘记登出、长期挂着 shell 占资源,或规避审计漏洞。

  • ClientAliveInterval 60 表示服务端每 60 秒检查一次该连接是否有新数据(包括 stdin 输入、命令输出等)
  • ClientAliveCountMax 5 表示连续 5 次检查都无活动(即空闲满 300 秒),就强制关闭连接
  • 必须重启 sshd 或重载配置(sudo systemctl reload sshd)才生效
  • 注意:这个机制对正在运行长任务(如 tail -f、ping)的会话无效——只要 TCP 连接有数据流(哪怕只是服务端在持续吐日志),就不算“空闲”

为什么开了心跳还是被断?常见兼容性坑

心跳不是万能的。有些网络环境或旧版 OpenSSH 会绕过或忽略 keepalive 包,导致配置看似生效实则无效。

  • OpenSSH 5.4 以前版本不支持 ServerAliveInterval,客户端会静默忽略——检查版本用 ssh -V
  • 某些企业级防火墙(如 Palo Alto、深信服)默认过滤 SSH keepalive 报文,需在策略中放行 SSH_MSG_GLOBAL_REQUEST 类型消息
  • 如果服务端设置了极短的 TCPKeepAlive(非 SSH 层,是系统级 TCP 参数),而客户端心跳间隔比它还长,可能被内核先掐断——查用 sysctl net.ipv4.tcp_keepalive_time
  • 使用 mosh 或跳板机(ProxyJump)时,心跳只作用于最后一跳;中间跳板若没配,照样断

tmux/screen 能替代心跳吗

不能。tmux 和 screen 是会话保持工具,解决的是「SSH 断开后进程不退出」的问题,和「防止 SSH 连接被中间设备切断」完全无关。

真实情况:你开着 tmux,SSH 连接被路由器超时踢掉,本地终端显示断开,tmux 会话还在远端活着;但你无法再连回去——除非服务端同时配了 ClientAlive* 给你留足重连窗口,或者你本就用了 mosh 这类协议。

  • tmux 的 set -g set-remain-on-exit off 之类配置,只影响 pane 行为,不影响底层 TCP 连接生命周期
  • 想真正抗断线,必须双管齐下:客户端开 ServerAliveInterval 主动保活,服务端设合理 ClientAlive* 防僵死
  • 如果连不上、ping 得通但 ssh 握手卡住,优先怀疑是中间链路 kill 了 keepalive,而不是 tmux 没启好

真正麻烦的是混合环境:客户端在 Windows(OpenSSH for Windows 旧版)、跳板机跑 CentOS 6、目标服务器是 Alpine 上的 dropbear —— 这时候 keepalive 可能根本没协商成功,连日志都看不到提示,得抓包确认。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4090

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3473

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2673

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6530

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6182

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3593

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3085

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3319

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习