SSH连接被拒绝?10种常见错误与解决方法

SSH连接被拒绝?10种常见错误与解决方法

你刚买了一台服务器,准备连上去搭环境。输入ssh root@你的IP,回车。等了几秒,屏幕上出现一行红字:Connection refused

你检查了IP,没输错。密码也没错。但就是连不上。你开始怀疑:是不是服务器没开机?是不是IP给错了?是不是被攻击了?

别慌。SSH连接失败的原因大多有规律可循。今天把最常见的10种错误列出来,附上解决方法。

先看一个数据

在服务器管理过程中,SSH连接失败是最常遇到的问题之一。大多数情况下,问题出在网络层面:端口被防火墙拦截、安全组未放行,或服务器上的SSH服务未启动。其中Connection refused是最常见的错误,其次是Connection timed out。理解这些错误的含义,是快速恢复连接的第一步。

错误一:Connection refused

这是最常见的错误。意思是:你的客户端尝试连接服务器的22端口,但服务器拒绝了连接。

原因

  1. SSH服务没有运行
  2. 服务器防火墙阻止了22端口
  3. SSH端口被修改了(不是22)
  4. 服务器上的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服务。

原因

  1. IP地址或端口写错了
  2. 云厂商安全组没放行22端口
  3. 服务器防火墙丢包
  4. 网络路由不通或服务器关机

解决方法

  • 确认IP正确:ping 服务器IP,看通不通
  • 检查云厂商安全组:入方向规则有没有允许22端口
  • 检查本地网络:试试用手机热点连接
  • 确认服务器在运行:去云控制台看实例状态

错误三:Permission denied (publickey,password)

密码输入正确,但被拒绝登录。

原因

  1. 密码确实错了(最常见的可能)
  2. 该账号被禁止登录(/etc/passwd中shell为/sbin/nologin
  3. SSH配置禁止密码登录(PasswordAuthentication no
  4. 启用了密钥登录但客户端没提供正确的密钥

解决方法

  • 确认用户名和密码正确。注意大小写,用户名首字母通常小写
  • 检查SSH配置:grep PasswordAuthentication /etc/ssh/sshd_config,如果显示no,改用密钥登录或通过云控制台修改配置
  • 查看登录失败日志:tail -f /var/log/auth.log(Ubuntu)或/var/log/secure(CentOS),会告诉你具体失败原因

错误四:Connection closed by remote host

连接建立后立即被关闭。

原因

  1. 服务器的SSH服务有问题,启动后崩溃
  2. 服务器资源耗尽(内存/磁盘满),无法处理新连接
  3. 防火墙规则在握手阶段中断了连接
  4. 服务器配置了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 refusedSSH没开/端口被挡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连接失败,通常不是你的错。是某个环节被忘了开:端口没放行、服务没启动、密码不对、安全组没加。按上面的排查顺序走一遍,问题大概率就在前三项里。

下次连不上,先检查端口放行,再检查服务状态,最后再看密码。大部分情况都不需要惊动客服。你自己就能修好。

知识库

服务器被植入后门:隐藏用户与SSH密钥排查

2026-6-24 18:00:15

知识库

网站搬家实战:从旧服务器到新服务器完整指南

2026-6-25 16:26:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧