首页 帮助中心 SSH连接超时或拒绝连接?网络/端口/防火墙逐层排查!
SSH连接超时或拒绝连接?网络/端口/防火墙逐层排查!
时间 : 2026-07-28 16:27:36
编辑 : 华纳云
阅读量 : 11

  SSH连接不上了——这是运维工作中最常见的故障之一,也是新手最容易慌神的时刻。屏幕上那行Connection timed out或者Connection refused看起来像是机器在跟你对抗,但本质上,它只是在一个特定环节卡住了。这篇文章我们总结了一套可以落地的排查方法论。不管你是刚接触Linux的新手,还是需要快速恢复业务的开发人员,跟着这套流程走,大概率能在10分钟内定位问题。

  一、先搞清楚报错类型:超时和拒绝是两码事

  遇到SSH连不上,第一步不是去改配置,而是看清报错信息。这两个报错背后的故障点完全不同:

  Connection timed out(连接超时):你的客户端发出的Syn包石沉大海,没有收到服务器的Syn-Ack响应。问题出在网络不可达或包被丢弃。

  Connection refused(连接拒绝):服务器收到了你的请求,但在目标端口上没有进程在监听,或者防火墙主动发了RST包回来。问题出在端口或服务状态。

  如果屏幕上什么都没显示,卡住直到超时,那基本属于第一种情况。明确了报错类型,排查方向就锁定了一半。

  二、第一层:网络可达性检查

  先从最基础的开始。在你急着登服务器改配置之前,先在本地做几个快速测试。

  1. Ping一下,看ICMP通不通

ping 你的服务器IP

  能通:说明三层网络是通的,数据包能走到服务器。问题不在网络层。

  不通:要么是服务器禁了ICMP(很多云厂商默认禁Ping),要么是路由根本不可达。这时候用traceroute看一眼路径在哪里断了:

traceroute 你的服务器IP   # Linux/Mac
tracert 你的服务器IP      # Windows

  如果 traceroute 在某一跳之后全是星号,说明那一跳之后的路由出了问题。但要注意,某些节点只是禁了ICMP响应,不表示真的断了,要结合后面的测试综合判断。

  2. 用telnet测试端口是否开放

  这是最直观的端口连通性测试。SSH默认端口是22,命令如下:

telnet 你的服务器IP 22
  • 显示 Connected:端口是开放的,SSH服务正常监听,问题可能出在认证阶段或客户端配置。
  • 卡住不动直到超时:端口被防火墙拦截,或者服务器根本没把包送到22端口上。
  • 显示 Connection refused:服务器收到了包,但22端口上没有服务在监听。

  3. 用nc或nmap做更精细的探测

  如果 telnet 不好使,可以用 nc(netcat)探测:

nc -zv 你的服务器IP 22

  加上 -v 参数会输出更详细的连接信息。z 参数让 nc 只做连接测试而不发送数据,非常适合快速扫描端口状态。

  三、第二层:本地与沿途防火墙排查

  如果网络层测试发现包到不了服务器,或者端口被卡住,接下来就要检查防火墙了。

  1. 检查本地防火墙(Windows/Mac)

  很多人忽略了自己电脑上的防火墙。Windows Defender 或 Mac 的 pf 防火墙可能会拦截出站SSH连接。临时关闭本地防火墙测试一下(测试完记得打开),如果能连上,那就是本地防火墙的规则需要调整。

  2. 检查云服务商的安全组(这是最常见的坑)

  绝大多数SSH超时问题,根源都在云服务商的控制台上,而不是服务器内部的防火墙。

  华纳云:找到“安全组”或“防火墙”规则,检查入方向是否放行了22端口。特别注意“协议类型”要选TCP,“授权对象”要填你的IP或0.0.0.0/0(虽然不推荐全开,但测试阶段可以先用)。很多用户买了服务器之后,以为系统装好了就能直接连,但厂商默认只开放了80和443端口,22端口默认是关闭的——这是最容易踩的坑,没有之一。

  3. 检查服务器内部的防火墙(iptables/firewalld)

  如果你能通过 VNC 或 Web Console 登进服务器(这是最后的救命通道),检查本地防火墙规则:

# 对于使用 iptables 的系统
iptables -L -n -v | grep 22

# 对于使用 firewalld 的系统
firewall-cmd --list-all

  如果看到 DROPREJECT 相关的规则,或者 22/tcp 没有出现在开放列表中,说明本地防火墙挡住了连接。临时放行22端口:

# iptables 放行
iptables -I INPUT -p tcp --dport 22 -j ACCEPT

# firewalld 放行
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload

  四、第三层:SSH服务状态检查

  如果网络和防火墙都没问题,那就要看SSH服务本身了。

  1. 检查sshd是否在运行

systemctl status sshd
# 或
ps aux | grep sshd

  如果服务是 inactive failed,尝试启动它:

systemctl start sshd
systemctl enable sshd   # 设置开机自启

  2. 检查sshd监听的端口和地址

netstat -tlnp | grep ssh
# 或
ss -tlnp | grep ssh

  正常的输出应该看到 0.0.0.0:22 或 :::22(表示监听所有IPv4和IPv6地址)。如果看到 127.0.0.1:22,说明只监听了本地回环,远程自然连不上。这种情况需要检查 /etc/ssh/sshd_config 中的 ListenAddress 配置。

  3. 查看SSH日志

  日志是定位问题的金矿。SSH的日志通常写在:

journalctl -u sshd -n 50        # 使用systemd的系统
tail -f /var/log/auth.log       # Debian/Ubuntu
tail -f /var/log/secure         # CentOS/RHEL

  常见的失败原因包括:

  Authentication refused:密钥或密码认证失败。

  Address already in use:端口被占用,通常是有其他进程占用了22端口。

  no matching key exchange method:客户端和服务器的加密算法不匹配,通常是旧版客户端连新版服务端(或反之)。

  Did not receive identification string from client:客户端连接后没有发送SSH协议头,可能是使用了不兼容的工具或网络中间设备干扰。

  五、进阶排查:TCP三次握手与MTU问题

  如果以上所有步骤都查不出问题,那就得往更底层挖了。

  1. TCP Wrappers 限制

  检查 /etc/hosts.allow /etc/hosts.deny 文件中是否有限制SSH访问的规则:

grep sshd /etc/hosts.allow
grep sshd /etc/hosts.deny

  如果 hosts.deny 中有 sshd: ALL,那所有IP都被拒绝了——这种情况虽然少见,但踩到了就是大坑。

  2. MTU(最大传输单元)不匹配

  某些网络环境下,路径上的MTU不一致会导致大包被丢弃,而SSH握手过程中的某些包恰好就超过了路径MTU值。现象是:ping -s 1472 能通,但SSH连不上。

  临时降低网卡的MTU测试:

ip link set dev eth0 mtu 1400

  如果调整后能连上,说明你的网络环境存在MTU不匹配问题,需要根据上游路由器的实际MTU值做永久配置。

  3. Fail2ban或DDoS防护误封

  很多服务器装了 Fail2ban 来防止暴力破解。如果输错密码次数过多,你的IP会被自动拉入黑名单。检查:

fail2ban-client status sshd
iptables -L -n | grep 你的IP

  如果被误封,手动解封:

fail2ban-client set sshd unbanip 你的IP

  云厂商的DDoS基础防护有时也会误判正常SSH流量为攻击,这时候只能在控制台提交白名单申请。

  六、最后的兜底方案

  如果以上所有方法都试过了还是连不上,不要硬扛:

  1. 通过VNC或串口控制台登录:大部分云厂商都提供网页版VNC或Serial Console,这是绕过所有网络问题的最后通道。

  2. 挂载系统盘到另一台正常机器上救援:如果你用的是华纳云,可以将系统盘卸载,挂载到一台正常运行的实例上,在挂载目录中修改 sshd_config 或查看日志。

  3. 直接重装系统:如果机器刚买不到一天,且数据不重要,重装系统往往比排查问题快得多。但记得重装后立刻改root密码并配置好防火墙规则。

  SSH连接问题没那么玄乎,本质上就是数据包在“客户端网络 → 运营商骨干网 → 云厂商安全组 → 服务器iptables → sshd进程”这条路径上,在某一步被拦住了。按照从外向内的顺序逐层检查,每层都用对应的工具验证,很快就能把那个“拦路虎”揪出来。

相关内容
客服咨询
7*24小时技术支持
技术支持
渠道支持