
你刚买了一台服务器,准备连上去搭环境。输入ssh root@你的IP,回车。等了几秒,屏幕上出现一行红字:Connection refused。
你检查了IP,没输错。密码也没错。但就是连不上。你开始怀疑:是不是服务器没开机?是不是IP给错了?是不是被攻击了?
别慌。SSH连接失败的原因大多有规律可循。今天把最常见的10种错误列出来,附上解决方法。
先看一个数据
在服务器管理过程中,SSH连接失败是最常遇到的问题之一。大多数情况下,问题出在网络层面:端口被防火墙拦截、安全组未放行,或服务器上的SSH服务未启动。其中Connection refused是最常见的错误,其次是Connection timed out。理解这些错误的含义,是快速恢复连接的第一步。
错误一:Connection refused
这是最常见的错误。意思是:你的客户端尝试连接服务器的22端口,但服务器拒绝了连接。
原因:
- SSH服务没有运行
- 服务器防火墙阻止了22端口
- SSH端口被修改了(不是22)
- 服务器上的SSH服务绑定了错误的IP
解决方法:
bash
# 检查SSH服务状态 systemctl status sshd # 检查端口监听 netstat -tuln | grep :22 # 或者 ss -tuln | grep :22
如果服务没运行:systemctl start sshd。如果防火墙拦了:firewall-cmd --add-port=22/tcp --permanent(CentOS)或ufw allow 22(Ubuntu)。如果SSH端口被改了,去安全组放行新端口,连接时用-p 新端口。如果SSH监听了127.0.0.1而不是0.0.0.0,改成0.0.0.0。
错误二:Connection timed out
连接超时,比拒绝更让人头疼。这意味着你的请求根本没到达服务器的SSH服务。
原因:
- IP地址或端口写错了
- 云厂商安全组没放行22端口
- 服务器防火墙丢包
- 网络路由不通或服务器关机
解决方法:
- 确认IP正确:
ping 服务器IP,看通不通 - 检查云厂商安全组:入方向规则有没有允许22端口
- 检查本地网络:试试用手机热点连接
- 确认服务器在运行:去云控制台看实例状态
错误三:Permission denied (publickey,password)
密码输入正确,但被拒绝登录。
原因:
- 密码确实错了(最常见的可能)
- 该账号被禁止登录(
/etc/passwd中shell为/sbin/nologin) - SSH配置禁止密码登录(
PasswordAuthentication no) - 启用了密钥登录但客户端没提供正确的密钥
解决方法:
- 确认用户名和密码正确。注意大小写,用户名首字母通常小写
- 检查SSH配置:
grep PasswordAuthentication /etc/ssh/sshd_config,如果显示no,改用密钥登录或通过云控制台修改配置 - 查看登录失败日志:
tail -f /var/log/auth.log(Ubuntu)或/var/log/secure(CentOS),会告诉你具体失败原因
错误四:Connection closed by remote host
连接建立后立即被关闭。
原因:
- 服务器的SSH服务有问题,启动后崩溃
- 服务器资源耗尽(内存/磁盘满),无法处理新连接
- 防火墙规则在握手阶段中断了连接
- 服务器配置了
MaxAuthTries,连续失败后被断开
解决方法:
- 检查磁盘是否满:
df -h - 检查内存:
free -h - 检查SSH服务日志:
journalctl -u sshd -n 50 - 通过云厂商的网页控制台(VNC)登录,排查服务状态。如果磁盘满了,先清理磁盘空间。
错误五:Host key verification failed
你之前连接过这台服务器,但服务器的SSH主机密钥发生了变化。
原因:服务器系统重装、SSH重新配置,或中间人攻击(极少见)。
解决方法:
bash
ssh-keygen -R 服务器IP
这条命令会从~/.ssh/known_hosts中删除旧的主机密钥记录。删除后重新连接即可。
错误六:Too many authentication failures
客户端尝试了太多认证方式,达到服务器的失败次数限制。
解决方法:
bash
ssh -o NumberOfPasswordPrompts=1 root@服务器IP # 或指定使用密码认证 ssh -o PreferredAuthentications=password root@服务器IP
错误七:Connection refused / no route to host(端口被云厂商安全组拦截)
这是云服务器用户的专属坑。问题不在服务器内部,在云厂商的安全组。
解决方法:去云厂商控制台,找到“安全组”或“防火墙”规则,添加入方向规则:端口22(或你的SSH端口),来源0.0.0.0/0(或你的IP)。保存后立即生效。
错误八:ssh: connect to host port 22: Resource temporarily unavailable
服务器资源耗尽,无法接受新连接。
原因:并发连接数达到MaxStartups限制,或系统文件描述符用尽。
解决方法:
- 等待几秒再试
- 检查连接数:
ss -s - 临时调大限制:修改
/etc/security/limits.conf,增加* soft nofile 65535和* hard nofile 65535
错误九:Permission denied (publickey) 但你想用密码
服务器只允许密钥登录。
解决方法:通过云厂商VNC登录,修改/etc/ssh/sshd_config中的PasswordAuthentication yes,重启SSH,或用已有的密钥登录。如果已有密钥,直接用ssh -i ~/.ssh/你的私钥 root@IP。
错误十:ssh: connect to host port 22: Network is unreachable
本地网络无法到达服务器。
原因:
- 本地没网
- 服务器IP是内网IP(如192.168.x.x)
- 本地网络与服务器网络不通
解决方法:
- 检查本地网络:
ping 8.8.8.8 - 确认使用的是公网IP(不是内网IP)
- 如果必须用内网,先通过VPN连入内网
排查速查表
| 错误信息 | 常见原因 | 优先检查 |
|---|---|---|
| Connection refused | SSH没开/端口被挡 | SSH服务、防火墙、端口 |
| Connection timed out | 网络不通/IP错了 | ping、安全组 |
| Permission denied | 密码错/认证方式错 | 密码、PasswordAuthentication |
| Host key verification | 主机密钥变了 | known_hosts文件 |
| Too many auth failures | 尝试次数过多 | 指定认证方式 |
真实案例
一个朋友买了台新服务器,用SSH连接时报Connection timed out。他确认IP对、密码对、服务器开机,还是不行。最后发现是云厂商的安全组只放行了80和443端口,没放行22。加了一条22端口的入方向规则后,瞬间连上。
最后一句
SSH连接失败,通常不是你的错。是某个环节被忘了开:端口没放行、服务没启动、密码不对、安全组没加。按上面的排查顺序走一遍,问题大概率就在前三项里。
下次连不上,先检查端口放行,再检查服务状态,最后再看密码。大部分情况都不需要惊动客服。你自己就能修好。




