"Connection closed by" 错误的原因与解决
在 SSH、数据库连接、HTTP 请求中经常遇到 "Connection closed by remote host" 或 "Connection closed by [IP]" 错误。意思是远端主动关闭了连接,但原因有很多。
一、常见原因
- 空闲超时:SSH 服务器设置了 ClientAliveInterval,长时间无操作被断开。
- 网络不稳定:WiFi 切换、VPN 断连、NAT 超时。
- 服务器资源不足:内存/CPU 满载,sshd 进程被 OOM killer 杀掉。
- 防火墙/安全组:云服务器安全组规则变更,或 fail2ban 封禁 IP。
- 并发连接超限:sshd MaxStartups 限制,连接数过多被拒绝。
- 协议不匹配:客户端与服务端 SSH 版本不兼容。
二、排查步骤
- 用
ssh -vvv user@host查看详细日志,定位断开点。 - 检查服务器日志:/var/log/auth.log 或 /var/log/secure。
- 测试网络稳定性:ping、mtr 追踪路由。
- 检查服务器负载:top、free -h、df -h。
三、解决方法
- 空闲超时:客户端配置 ServerAliveInterval 60;服务端配置 ClientAliveInterval 60。
- 网络不稳:使用 mosh 替代 SSH,或 tmux/screen 保持会话。
- 防火墙:检查安全组、fail2ban 日志,解封 IP。
- 连接数超限:调整 sshd_config 的 MaxStartups。