排错

SSH "Connection closed by remote host":原因与修法

服务器接受后又断开你的连接——通常是 fail2ban 封禁、sshd 重启/过载、或连接数上限。怎么和 refused/timed out 区分、确认封禁、以及读服务器日志。

CC Chen Chen· 创始人·2026 年 6 月 13 日·阅读 6 分钟

"Connection closed by remote host" 是什么意思

服务器接受了你的连接,然后主动把它断开。这正是和 refused(没人在听)、timed out(完全没回应)的关键区别:这里有东西应答了,然后挂断。各种变体——Connection closed by remote hostConnection reset by peerkex_exchange_identification: Connection closed by remote host——几乎总是其中之一:你被 fail2ban 封了、服务器 sshd 在重启/过载、或撞上了连接数上限

原因,按可能性排序

#原因蛛丝马迹
1失败登录后被 fail2ban / 封 IP昨天还好,今天几次失败尝试后就死了
2sshd 在重启或刚重启服务器在重启;过一会儿就好
3连接太多(MaxStartups)繁忙服务器,负载下间歇性
4hosts.deny / TCP wrappers / 防火墙重置特定 IP 被服务器拦
5那个端口上是非 SSH 服务端口错了——别的东西应答后断开

1——头号原因:你被 fail2ban 封了

如果这之前有几次失败的密钥/密码尝试,fail2ban(或云服务商的等价物)很可能封了你的 IP——你一连它就丢包,表现就是"closed by remote host"。从另一台还能连的机器确认并解封:

sudo fail2ban-client status sshd          # 你的 IP 在列表里吗?
sudo fail2ban-client set sshd unbanip 1.2.3.4

在手机上这尤其常见:变动的 IP(Wi-Fi 切蜂窝)加上一两次错误密钥尝试,就足以触发封禁。修好底层的认证问题(见 Permission denied)能止住反复发生。

2——sshd 重启、重启中或过载

如果机器在重启、或 sshd 在重载配置,那个窗口里的连接会被断开;过一分钟再试。在长期繁忙的服务器上,sshd 的 MaxStartups 限流(默认 10:30:100)在太多未认证连接在途时开始丢弃——负载下你会看到间歇性断开。在服务器上调高它有帮助:

# /etc/ssh/sshd_config
MaxStartups 30:50:100
# 然后:sudo systemctl reload ssh

3——看服务器自己的日志

权威答案在服务器上。从任何能进去的方式(控制台、另一个会话):

sudo journalctl -u ssh -n 50      # 或:tail -n 50 /var/log/auth.log

它会明白写出是封禁、拒绝某用户、hosts.deny、还是配置错误——把猜测变成一行诊断。

在手机上恢复

移动端的恼人之处是:你往往没法 SSH 进那台刚把你断开的机器去查。如果同网络还有另一台可达,就借道进去跑 fail2ban-client / journalctl 检查。如果你盯着原始报错、不确定是五个原因里的哪个,选中它问助手——TermAI 的 AI 读真实报错和你的上下文,告诉你它更像封禁、限流还是重启,并给出确认用的命令。

TermAI 的 AI 助手解读一条 SSH 断开消息
closed-by-remote-host 有五个长得一样的常见原因。选中报错问 AI,它贴着你的会话,缩小到最可能的那个并给出验证命令。

常见问题

"Connection closed by remote host" 是什么导致的?
服务器接受后又断开——最常见是 fail2ban 封 IP、sshd 重启/过载、连接数上限(MaxStartups)、或基于主机的拦截。查服务器认证日志。

它和 connection refused 有什么区别?
Refused = 没人在听。Closed by remote host = 有东西应答了,然后主动挂断。

我老是被封,为什么?
反复的失败认证(常是错的或没递的密钥)触发 fail2ban。修认证问题本身,有稳定地址的话把它加白名单。

kex_exchange_identification: Connection closed 是什么?
同一族——服务器在初始握手期间断开,通常是封禁、限流、或那个端口上是非 SSH 服务。

快速事实

  • 含义:服务器接受后主动断开(不是 refused、不是 timed out)
  • 头号原因:失败登录后被 fail2ban / 封 IP——fail2ban-client status sshd
  • 其它:sshd 重启、负载下 MaxStartups 限流、hosts.deny、端口错
  • 诊断:服务器上 journalctl -u ssh / /var/log/auth.log 写明原因
  • 移动端提示:变动 IP + 一两次错误密钥很容易触发封禁——修认证根因
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog