1.
初步诊断:确认连通性与SSH客户端输出
- 使用 ssh -vvv user@203.0.113.45 获取详细握手与超时信息,记录最后一行错误码(例:Connection timed out / Connection refused)。
- 用 ping 与 traceroute (traceroute -n 203.0.113.45) 验证到
新加坡机房的网络路径是否存在丢包或中断。
- 用 telnet 203.0.113.45 22 或 nc -zv 203.0.113.45 22 测试端口是否可达(超时代表被丢弃,拒绝代表主动封禁)。
- 若使用跳板或VPN,先在跳板上重复以上命令,排除本地或出口网络问题。
- 记录时间、客户端IP与尝试次数,便于在机房侧查看防火墙日志做关联。
2.
服务器端服务与SSH配置校验
- 登录控制台或通过KVM查看 /var/log/auth.log 与 /var/log/secure(根据系统不同)是否有连接/认证记录。
- 检查sshd是否运行:systemctl status sshd 或 ps aux | grep sshd,确认监听端口与IP(sshd_config 中 Port 与 ListenAddress)。
- 示例sshd_config关键项:Port 22、PermitRootLogin no、PasswordAuthentication no、AllowUsers deploy admin。
- 若更改端口,确认客户端使用对应端口 ssh -p 2222 user@IP;若使用密钥,确认 /home/user/.ssh/authorized_keys 权限为700/600。
- 若服务崩溃或端口未监听,重启并查看 journalctl -u sshd -n 200 获取错误栈定位问题。
3.
防火墙与安全组逐项检查(本段含示例规则表)
- 在Linux主机上检查iptables: iptables -L -n --line-numbers,或 nft list ruleset(若使用nftables)。
- 若使用Ubuntu ufw:ufw status verbose,确认22端口是否允许。
- 在CentOS/RedHat上常用 firewall-cmd --list-all 查看区域与永久规则。
- 云平台安全组(如AWS SG、GCP firewall、阿里云安全组)须确认放通源IP或0.0.0.0/0的TCP 22规则。
- 下表为示例防火墙规则(供参考),注意表中示例IP与端口需替换为实际数据:
| 序号 | 协议 | 端口 | 来源 | 动作 |
| 1 | TCP | 22 | 0.0.0.0/0 | ACCEPT |
| 2 | TCP | 2222 | 203.0.113.0/24 | ACCEPT |
| 3 | ICMP | - | 0.0.0.0/0 | ACCEPT |
| 4 | TCP | 80,443 | 0.0.0.0/0 | ACCEPT |
4.
网络与ISP/机房层面(路由、NAT、DDoS防护、CDN)
- 确认公网IP是否正确绑定在该实例上,以及是否存在二级NAT(SNAT/DNAT)导致22端口被转发到其他主机。
- 若机房使用托管防火墙或DDoS防护(如阿里云DDoS、Cloudflare Spectrum),检查控制台是否有阻断或策略触发记录。
- CDN通常不用于SSH,但若在同一IP上配置了任何代理,确认代理未拦截TCP 22。
- 使用 tcpdump -n -i eth0 dst port 22 查看服务器侧是否到达SYN包,若看不到则问题在链路或上游设备。示例:tcpdump输出显示SYN from 198.51.100.22 -> 203.0.113.45:22。
- 若存在GeoIP封禁策略,确认是否误封了来自中国/某国的IP段,调整白名单或策略放行必要源。
5.
真实案例:新加坡机房 SSH 超时故障排查
- 案例背景:客户A反馈无法从国内宿主机连接位于新加坡Equinix机房的VPS(IP 139.162.45.123),ssh 超时。
- 操作步骤:在客户侧执行 traceroute 显示在新加坡机房前一跳丢包,于机房控制台使用 tcpdump 未捕获到外网SYN。
- 排查结果:机房边界防火墙对"异地频繁失败尝试"触发了自动丢弃策略,且云平台安全组仅允许内网段,缺少公网22入站规则。
- 处理措施:在机房防火墙放行客户出口IP段 198.51.100.0/24 并在云平台添加TCP 22 0.0.0.0/0的规则,随后客户成功连接。
- 教训与建议:备份控制台密钥、在变更前通过控制台开临时管理端口(例:2222)以防被锁死,记录白名单IP方便后续审计。
6.
复核与长期防护建议
- 建议建立故障用应急端口与临时VPN,仅在必要时开放并记录变更。
- 自动化监控:对22端口的可达性设告警(例如每5分钟用外部探针检测),并将日志集中到SIEM以便溯源。
- 定期检查防火墙规则集:使用脚本导出规则快照并比对差异(如使用 iptables-save / nft list ruleset > snapshot)。
- 对高风险来源使用Fail2Ban或基于云的速率限制,同时避免误把正常流量列入黑名单。
- 最后,常备控制台/串口访问权限并测试恢复流程,确保在SSH不可用时仍可进入主机进行修复。
来源:ssh 无法连接新加坡机房 与防火墙配置的细致校验要点