"Connection refused" 是什么意思
"Connection refused" 是网络层的拒绝:你的包到达了那台机器(或它前面的防火墙),有个东西主动回答"这里没有人在听"。它不同于 Permission denied(连上之后认证失败),也不同于超时(包石沉大海——通常是 IP 错或网络不可达)。Refused 的意思是:机器对了,但那个端口上没有 SSH 服务在应答。四个原因几乎覆盖所有情况。
四个原因
| # | 原因 | 快速检查 |
|---|---|---|
| 1 | SSH 服务没在跑 | 在机器上 systemctl status ssh |
| 2 | 端口不对 | SSH 被挪离 22 了吗?查连接的端口 |
| 3 | 防火墙主动拒绝 | ufw status / 云安全组 |
| 4 | 机器不对(那个 IP 上是别的东西) | IP 变了(DHCP)?是对的机器吗? |
1——sshd 真的在跑吗?
在服务器上(控制台、web VNC、或任何别的进去方式):
sudo systemctl status ssh # Debian/Ubuntu(RHEL 上是 sshd)
sudo systemctl enable --now ssh 新装系统是经典场景:树莓派系统和很多精简镜像出厂时 SSH 是关闭的。启用一次就持久了。见在树莓派上启用 SSH。
2——端口对吗?
如果管理员把 SSH 挪离了 22 端口(常见的降噪做法),连 22 就会被拒。检查连接配置里的端口字段,或从另一台机器探测:nc -vz host 22 对比 nc -vz host 2222。
3——防火墙在拒绝
配置成拒绝(而非丢弃)的防火墙正好产生这个报错。在机器上:sudo ufw status——你的 SSH 端口放行了吗?云服务器还要查服务商面板里的安全组/防火墙规则;在服务商层面关了 22 端口的 VPS,操作系统根本看不到包就被拒了。
4——那个地址上是别的机器
家庭网络会重新分配 IP(DHCP)。如果你保存的连接指着 192.168.1.42,而那台机器重启后变成了 .57,你可能正连到另一台拒绝 22 端口的设备。重查路由器的设备列表——或者用 Tailscale 绕开整类问题:无论局域网怎么变,每台机器保持一个稳定的私有地址。TermAI 内置它。见 Tailscale SSH 设置。
Refused vs 超时 vs Permission denied
- Connection refused——机器可达,没人在听(本文)。
- Connection timed out——包消失了:IP 错、机器关了、或你在网络外面试图连私有地址(用 Tailscale)。
- Permission denied——SSH 应答了,你的认证失败:见 publickey 指南。
在手机上排查
这个错在移动端的别扭之处是:你往往没法 SSH 进那台机器去查它。如果同网络还有任何一台机器可达,就借道:SSH 进它,然后 nc -vz / ping 那台被拒的机器,看什么端口真的开着。记不住诊断咒语,就把情况描述给 TermAI 的助手——"查一下 192.168.1.42 的 22 端口有没有东西在听"——在你能连上的那台机器上运行建议的命令。
常见问题
SSH connection refused 是什么导致的?
SSH 服务没在跑、SSH 在别的端口、防火墙拒绝那个端口、或那个 IP 上是别的机器。这是网络层的拒绝,不是认证失败。
它和 connection timed out 有什么区别?
Refused = 机器回答了"这里没有"。Timed out = 完全没有回答(IP 错、主机关机、或网络不可达)。
树莓派上的 connection refused 怎么修?
树莓派系统默认关闭 SSH——用 raspi-config 启用,或在 boot 分区放一个 ssh 文件,之后就持久了。
快速事实
- 含义:机器可达、那个端口上没人在听(网络层,认证之前)
- 原因:sshd 没跑 · 端口不对 · 防火墙拒绝 · 机器不对/IP 变了
- 检查:机器上
systemctl status ssh;外部nc -vz host port - 避免 IP 漂移:用稳定的 Tailscale 地址代替局域网 DHCP IP
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.