SSH远程连接自动断线的三种处理方法

2025.7.18 杂七杂八 1668
33BLOG智能摘要
SSH连接总掉线可通过以下三种方法解决。首先,调整客户端的KeepAlive设置,修改~/.ssh/config文件,添加Host * ServerAliveInterval 60 ServerAliveCountMax 5配置,客户端每隔60秒发送心跳包,连续5次无响应才会断开。其次,修改服务端超时时间,在/etc/ssh/sshd_config中添加ClientAliveInterval 30、ClientAliveCountMax 86400、TCPKeepAlive yes,注意ClientAliveInterval单位为秒,ClientAliveCountMax单位为次数,设置不当可能导致资源占用问题。最后,推荐使用Tmux或Screen终端复用工具,如新建会话tmux new -s my_session,断开连接时使用Ctrl+b d,重新连接用tmux attach -t my_session,可避免因网络波动导致的操作中断。多数SSH断开问题可通过前两种方法解决,若问题依旧,可能需排查防火墙或中间网络设备。修改sshd配置后,需重启服务,执行sudo systemctl restart sshd。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

SSH连接总掉线?三招教你告别”Connection closed by remote host”

SSH远程连接自动断线的三种处理方法

大家好,我是33blog的技术小编。今天想和大家聊聊一个运维人员都遇到过的问题——SSH远程连接莫名其妙断开。上周我在维护服务器时就遇到了这个烦心事,明明正在修改Nginx配置,突然就跳出”Connection closed by remote host”的提示,改了一半的配置全没了…

1. 调整客户端KeepAlive设置

首先检查的是客户端配置。很多SSH断开其实是因为网络环境不稳定导致的超时。我们可以通过修改~/.ssh/config文件来保持连接:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5

这个配置会让客户端每隔60秒发送一个心跳包,如果连续5次没有响应才会断开。我在公司内网测试时发现,设置这个参数后,即使网络短暂波动也不会立即断开连接。

2. 修改服务端超时时间

如果问题出在服务端,我们需要修改/etc/ssh/sshd_config

ClientAliveInterval 30
ClientAliveCountMax 86400
TCPKeepAlive yes

这里有个小坑要注意:ClientAliveInterval的单位是秒,而ClientAliveCountMax是次数。我刚开始误以为是分钟,结果设置太大导致连接迟迟不断,反而占用了服务器资源。

3. 使用Tmux/Screen持久化会话

对于必须保持的长时间操作,我强烈推荐使用终端复用工具。以Tmux为例:

# 新建会话
tmux new -s my_session

# 断开连接(保持后台运行)
Ctrl+b d

# 重新连接
tmux attach -t my_session

记得有次服务器升级,我用Tmux跑了整整两天的编译过程,中间网络断了三次都没影响。这种”后悔药”式的解决方案,关键时刻真的能救命。

写在最后

经过这些年的运维工作,我发现SSH断开问题90%都能用前两种方法解决。如果还不行,可能是防火墙或中间网络设备的问题,需要具体排查。大家如果有其他妙招,欢迎在评论区分享~

对了,修改完sshd配置后别忘了sudo systemctl restart sshd哦!这个低级错误我犯过不止一次…

评论

  • 太实用了!最近总被SSH断线困扰,正好按这个方法改改看

  • 感谢分享,原来客户端和服务端都要设置,之前只改了一边难怪还断⚡️

  • Tmux真是救命神器!建议新手一定要学,谁用谁知道

  • 小编提醒重启sshd服务太真实了,我就经常忘记这一步导致修改不生效😂

  • 这些方法确实实用,不过遇到云服务器的话可能还得检查安全组设置,上周刚吃过这个亏