服务器故障排查如何排查 SSH 远程连接失败原因

作者:袖梨 2026-08-25

Connection timed out、Connection refused和Permission denied三种错误分别对应云侧网络、系统层服务和认证链路三个不同问题域,需按报错类型逐层定位:先验网络与端口可达性,再查sshd服务状态及监听配置,最后核验用户权限与认证设置。

SSH 远程连接失败不能一概而论,得看终端报什么错——Connection timed outConnection refusedPermission denied 分别指向完全不同的问题层,排查顺序错了,花再多时间也白搭。

先看报错类型,锁定故障层级

终端提示是第一线索,别跳过:

  1. Connection timed out:数据包根本没到服务器。问题在“路”上——本地网络、云平台安全组、子网ACL、公网IP状态(是否欠费释放/未绑定)都可能拦住它。
  2. Connection refused:TCP包到了,但没人应答。说明服务没监听,或监听地址不对(比如只绑了127.0.0.1),或端口被改了但没告诉客户端。
  3. Permission denied:握手成功、认证阶段被拒。重点查用户是否存在、密码/密钥是否匹配、sshd_config里PermitRootLogin、AllowUsers、PubkeyAuthentication等开关是否关错。

逐层验证网络与端口可达性

别只 ping 一下就认为网络没问题:

  1. 本地先测通公网 DNS 和基础出口:ping 8.8.8.8 看连通性,nslookup your-server-domain 确认域名没解析错。
  2. 再测目标端口:telnet 公网IP 22nc -zv 公网IP 22。卡住不动 = 被中间设备(安全组、网络ACL、系统防火墙)拦截;拒绝连接 = 服务没起来或监听异常。
  3. 特别注意:云平台有两层防火墙——安全组(云控制台配)和系统防火墙(iptables/firewalld/ufw)。开了安全组≠能连,必须两者都放行22端口。

登录服务器查服务与配置真实状态

用VNC或控制台直连后执行:

  1. 确认 SSH 服务运行:systemctl status sshd(Linux)或 Get-Service -Name TermService(Windows RDP)。
  2. 查端口监听实况:ss -tuln | grep ':22'。输出里要是 0.0.0.0:22[::]:22,而不是 127.0.0.1:22;后者说明只接受本地连接。
  3. 翻配置文件关键项:/etc/ssh/sshd_config 里检查 PortListenAddressPermitRootLoginPubkeyAuthentication 是否合理,改完记得 systemctl reload sshd

留意资源与权限类隐性故障

有些问题不报错,但会让新连接静默失败:

  1. 磁盘满:df -h 查根分区,日志写满或/tmp塞死会导致sshd无法 fork 新进程。
  2. 连接数限制:cat /proc/sys/net/ipv4/ip_local_port_rangeulimit -n 看是否耗尽,尤其在大量短连接场景下。
  3. SELinux/AppArmor 干预:ausearch -m avc -ts recent | grep sshd 或查 /var/log/audit/audit.log,看是否有策略拒绝。

相关文章

精彩推荐