SSH连接总掉线?三招教你告别”Connection closed by remote host”
大家好,我是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服务太真实了,我就经常忘记这一步导致修改不生效😂
这些方法确实实用,不过遇到云服务器的话可能还得检查安全组设置,上周刚吃过这个亏