刚部署完云服务器,Ping测试一切正常,但SSH客户端却反复提示"Connection timed out"——这个经典故障场景几乎困扰过每个运维新人。不同于简单的网络不可达问题,这种"半瘫痪"状态往往隐藏着从本地防火墙到云端安全策略的多重陷阱。本文将用实战视角带您逐层解剖问题链,掌握一套可复用的诊断方法论。
Windows系统按下Win+R输入wf.msc打开高级安全防火墙,重点检查入站规则中是否存在SSH相关限制:
powershell复制# PowerShell快速检查防火墙状态
Get-NetFirewallProfile | Select-Object Name, Enabled
典型故障案例:某开发者使用公共WiFi时,系统自动应用"公用网络"配置,导致防火墙默认阻止22端口通信。解决方法:
主流SSH客户端存在配置缓存问题,特别关注:
bash复制# 调试模式启动SSH连接(显示详细日志)
ssh -vvv user@server_ip
企业网络环境常存在透明代理,通过traceroute可发现异常跳点:
bash复制# Linux/macOS
traceroute -T -p 22 server_ip
# Windows
tracert server_ip
注意:若出现非预期网关IP,需联系网络管理员确认是否过滤SSH流量
本地端口占用会导致SSH客户端无法建立新连接:
bash复制# 检查本地端口占用情况(Linux/macOS)
lsof -i :22
# Windows等效命令
netstat -ano | findstr :22
通过控制台或VNC登录服务器后,按顺序执行:
服务进程检查:
bash复制systemctl status sshd
正常状态应显示"active (running)",若未启动则需:
bash复制sudo systemctl start sshd
sudo systemctl enable sshd
端口监听确认:
bash复制ss -tulnp | grep ssh
预期输出示例:
code复制tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=1234,fd=3))
配置有效性测试:
bash复制sudo sshd -t
无输出表示配置正确,否则需修复/etc/ssh/sshd_config文件
突然的SSH连接失败可能是资源耗尽的前兆:
bash复制# 检查系统负载
uptime
# 查看内存使用
free -h
# 检测磁盘空间
df -h / /var/log
紧急处理方案:当/var/log目录写满时,快速清理旧日志:
bash复制sudo journalctl --vacuum-size=200M
| 云服务商 | 默认规则 | 配置路径 | 特殊限制 |
|---|---|---|---|
| 阿里云 | 全拒绝 | 安全组→配置规则 | 需单独放行内网/外网 |
| 腾讯云 | ICMP允许 | 安全组→入站规则 | 规则有优先级数值 |
| AWS | 全拒绝 | Security Groups → Inbound | 需指定源IP范围 |
关键提示:修改安全组后通常即时生效,但部分云平台存在1-2分钟延迟
当Nginx等服务占用22端口时,通过进程追踪定位:
bash复制sudo netstat -tulnp | grep :22
sudo kill -9 冲突进程PID
安全增强Linux可能导致SSH连接异常,临时解决方案:
bash复制# 查看SELinux状态
sestatus
# 临时禁用(重启后恢复)
sudo setenforce 0
# 永久修改需编辑/etc/selinux/config
检查/etc/hosts.allow和/etc/hosts.deny文件,临时测试可清空文件内容。
bash复制telnet server_ip 22
bash复制nmap -p 22 server_ip
bash复制sudo tcpdump -i eth0 port 22 -w ssh.pcap
关键日志路径:
/var/log/auth.log(Debian系)/var/log/secure(RHEL系)快速过滤错误:
bash复制sudo grep 'sshd' /var/log/auth.log | grep -i failed
bash复制sudo vim /etc/ssh/sshd_config
修改或添加:code复制Port 49222
bash复制sudo ufw allow 49222/tcp
bash复制sudo systemctl restart sshd
生成密钥对:
bash复制ssh-keygen -t ed25519 -C "your_email@example.com"
部署公钥:
bash复制ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 49222
禁用密码登录:
code复制PasswordAuthentication no
ChallengeResponseAuthentication no