楔子
使用 Mac 或 Linux 原生的命令行 ssh user@ip
方式连接 Linux 闲时会自动断开终端卡死。
为解决这个问题,查了到篇博客翻译下关键步骤记录下来。解决方式可以分服务端设置和客户端设置。
客户端设置
在不修改连接的服务端,仅设置客户端的配置,较常用。
#追加闲时超时配置,每隔120秒向服务端发一个心跳包,如果依旧超时,再减小这个值即可
echo "ServerAliveInterval 120" >> ~/.ssh/config
服务端设置
服务端设置的好处是不用为每个客户端分别去设置闲时会话保持时间。缺点是需要重启 sshd 服务。
添加 如下配置到 /etc/ssh/sshd_config
#向客户端发送心跳包间隔,以下是每120秒发一次心跳包,以保持会话存活。
ClientAliveInterval 120
#统计向客户端发送心跳我次数上限,也就是最多发送720次,按此配置是 120s * 720次 = 86400s = 24小时
ClientAliveCountMax 720
保存后重启 sshd 服务
/etc/init.d/ssh restart
总结
当服务端与客户端都处理闲时状态时,如果其中一者配置了闲时会话保持,则会话不会中断。
参考原文地址:https://www.bjornjohansen.com/ssh-timeout