一张表看懂 SSH 排错
几乎所有 SSH 故障都落在三类里——连接建不起来、认证被拒、会话断开。最快的修法是读准确的报错、跳到它的原因。本页是所有常见 SSH 报错的地图:每个是什么意思、用哪篇专文修。
按症状诊断
| 你看到的报错 | 通常意味着 | 修法 |
|---|---|---|
Connection refused | 机器可达,那个端口上没人在听 | Connection refused → |
Connection timed out | 完全没回应——IP 错、主机关了、或从外部连私有地址 | Timed out → |
Connection closed by remote host | 服务器接受后又断开——常是 fail2ban 封禁 | Closed by remote → |
Permission denied (publickey) | 服务器拒绝认证——密钥/用户名/权限 | Permission denied → |
Too many authentication failures | 客户端递了太多密钥,对的那把没轮到 | Too many auth → |
UNPROTECTED PRIVATE KEY FILE | 密钥文件能被他人读——SSH 忽略它 | Unprotected key → |
Host key verification failed | 服务器身份密钥比上次变了 | Host key changed → |
no matching host key type found | 新客户端 vs 老服务器——算法不匹配 | No matching host key → |
Broken pipe / client_loop | 闲置连接被断,或网络变了 | Broken pipe → |
连接层报错(连不上)
这些发生在认证之前——问题在网络路径,不是凭证。三者很好区分:
- Connection refused——机器回答"这里没人在听"。sshd 没跑、端口错、或防火墙拒绝。
- Connection timed out——完全没回应。IP 错/变了、主机睡了、或从外部连私有局域网地址(移动端头号原因)。
- Connection closed by remote host——它接受了,然后挂断。通常是失败登录后被 fail2ban 封,或 sshd 过载。
认证层报错(连上了但拒绝你)
连接通了;服务器不接受你的凭证。
- Permission denied (publickey)——万能错:用户名错、没递密钥、密钥不在
authorized_keys、或权限不对。 - Too many authentication failures——客户端密钥太多,在对的那把之前烧光了服务器的限额。用
IdentitiesOnly修。 - UNPROTECTED PRIVATE KEY FILE——你的私钥全员可读,SSH 忽略它。一条
chmod 600。
主机密钥与算法报错
- Host key verification failed——服务器身份密钥和你固定的那把不一致。通常是重装或 IP 复用;接受前先核实。
- no matching host key type found——新客户端拒绝了老服务器的旧算法(
ssh-rsa)。按主机限定一个兼容选项。
会话与其它报错
- Broken pipe / client_loop: send disconnect——连接死了,通常是 NAT 闲置丢弃或网络变化。保活能修。
- 没法"SSH 进"Docker 容器?——别这么做;SSH 到宿主再
docker exec。
在手机上排错
SSH 报错在移动端的难点是读冗长输出、记诊断命令。只要你有任何能用的会话,选中报错问助手——TermAI 的 AI 读真实报错和你的服务器上下文,告诉你是哪个原因,并给出确认和修复的确切命令。
常见问题
怎么排查 SSH 连接?
读准确的报错并归类:连接层(refused/timed-out/closed)是网络或服务器问题;认证层(permission denied/too many auth)是凭证;主机密钥错是身份或算法不匹配。然后按那个报错的专文修。
refused、timed out、closed 有什么区别?
Refused = 没人在听。Timed out = 完全没回应。Closed by remote host = 应答了然后把你断开(常是封禁)。
为什么 SSH 在家能用、移动数据下不行?
你多半在连一个家外不存在的私有局域网地址——用 Tailscale 拿稳定地址。见 timed out。
SSH 报错记在服务器哪里?/var/log/auth.log(Debian/Ubuntu)或 journalctl -u ssh——多数认证和连接拒绝它都写明真实原因。
快速事实
- 三大类:连接层(refused/timed-out/closed)、认证层(permission denied/too many auth/unprotected key)、主机密钥/算法
- 区分连接错:refused = 没人听 · timed out = 没回应 · closed = 应答后断开
- 服务器端真相:
/var/log/auth.log或journalctl -u ssh - 移动端:选中报错,让 AI 归类并修复
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.