SSH 连接出现 Connection timed out 通常意味着客户端发出的数据包没有收到服务器响应,优先检查网络连通性和防火墙规则。
该问题多见于云服务器安全组配置错误或服务器网络中断场景,操作前需确认你有控制台访问权限以防锁死。
先说结论:Connection timed out 本质是网络包丢失或被拦截,而非服务拒绝,需按网络路径逐段排查。
- 先确认:本地能否 ping 通目标 IP,排除本地网络故障
- 先处理:检查云服务器安全组 inbound 规则和服务器内部防火墙
- 再验证:使用 telnet 或 nc 命令测试 22 端口可达性
命令速用版
以下命令用于快速定位网络层和服务层状态,直接在本地终端或服务器控制台执行。
# 1. 检查网络连通性
ping -c 4 <目标 IP>
# 2. 检查端口是否开放(推荐 nc,若无则用 telnet)
nc -zv <目标 IP> 22
# 或
telnet <目标 IP> 22
# 3. 服务器内部检查 SSH 服务状态(需控制台 VNC 登录)
systemctl status sshd
# 4. 查看服务器防火墙规则
firewall-cmd `--list-all`
# 或
iptables -L -n为什么会这样
Connection timed out 表示 TCP 握手_syn_包发出后未收到_syn-ack_响应,数据包在半路丢失或被防火墙丢弃。
这与 Connection refused 不同,后者表示包到达了服务器但目标端口没有进程监听。导致超时的常见原因包括云服务器安全组未放行 22 端口、服务器内部防火墙(iptables/firewalld)拦截、服务器网卡宕机或路由不可达。公开资料中没有看到可靠的量化数据表明哪种原因占比最高,但云平台安全组配置错误在实际运维中极为常见。
分步处理
按网络路径从客户端到服务器端逐段排查,每一步操作后需立即验证结果。
1. 检查本地网络出口
确认本地机器能访问外网,排除本地断网导致的问题。
ping 8.8.8.8若 ping 不通外网,先修复本地网络连接。若能 ping 通外网但 ping 不通目标 IP,继续下一步。
2. 检查云平台安全组
登录云厂商控制台,找到实例对应的安全组或防火墙配置,检查入站规则(Inbound Rules)。
操作动作:添加允许 TCP 协议 22 端口、来源 0.0.0.0/0(或特定 IP)的规则。风险边界:开放 0.0.0.0/0 可能增加暴力破解风险,建议配合密钥认证或 Fail2ban 使用。
3. 检查服务器内部防火墙
若安全组已放行,需登录服务器控制台(VNC/终端)检查内部防火墙是否拦截。
# CentOS/RHEL 7+
systemctl stop firewalld
# Ubuntu
ufw disable操作动作:临时关闭防火墙测试连通性。验证结果:若关闭后 SSH 恢复,则需重新配置防火墙规则放行 22 端口而非长期关闭防火墙。
4. 检查 SSH 服务监听状态
确认 SSH daemon 正在运行且监听正确 IP 和端口。
ss -tlnp | grep sshd
# 或
netstat -tlnp | grep sshd验证结果:应看到 0.0.0.0:22 或具体内网 IP:22 处于 LISTEN 状态。若只监听 127.0.0.1,需修改/etc/ssh/sshd_config 中的 ListenAddress 配置。
怎么验证是否生效
使用 verbose 模式连接 SSH 或通过端口测试工具确认握手成功。
ssh -v user@<目标 IP>观察输出日志,若看到 debug1: Connecting to <IP> port 22 后紧接着出现 debug1: Connection established,则问题解决。若仍显示 Connecting... 后超时,则网络路径仍有阻断。也可使用 nc -zv <IP> 22,返回 succeeded 即为端口可达。
常见坑
- 安全组方向错误:云服务器安全组需配置“入站”规则,配置出站规则无法解决 SSH 连接问题。
- IP 地址变更:部分云实例重启后公网 IP 可能变化,需确认连接的是当前正确的公网 IP。
- Fail2ban 误封:若多次密码错误,Fail2ban 可能将客户端 IP 加入防火墙黑名单,导致超时,需检查/var/log/fail2ban.log。
- 端口非标准:若服务器修改了 SSH 端口(如 2222),连接时必须指定-p 参数,否则默认连 22 端口会超时。
常见问题
Connection timed out 和 Connection refused 有什么区别?
timed out 是数据包没收到回应,通常是防火墙拦截或网络不通;refused 是数据包到了但端口没人接,通常是服务没启动。
修改 SSH 端口后连接超时怎么办?
确保云平台安全组和服务器内部防火墙都放行了新端口,并且连接命令使用了-p 指定新端口号。
为什么 ping 通但 SSH 超时?
ping 使用 ICMP 协议,SSH 使用 TCP 协议,防火墙可能允许 ICMP 但拦截了 TCP 22 端口。