本地SSH无法连接云服务器(浏览器可访问)排查方案

问题现象

浏览器能正常访问云服务器,但本地SSH连接失败,执行 telnet 服务器IP 22 提示不可达,开启智能加速后可正常SSH登录。

核心排查步骤(按优先级排序)

1. 验证SSH服务状态与端口监听

通过服务器控制台(或CloudShell)执行以下命令,确认服务正常运行:

# 检查sshd服务状态(Ubuntu/Debian用ssh,CentOS用sshd)
systemctl status sshd
# 若未运行,启动并设开机自启
systemctl start sshd && systemctl enable sshd
# 查看22端口监听(需显示0.0.0.0:22或:::22)
ss -tuln | grep 22

若端口无监听,编辑配置文件 /etc/ssh/sshd_config

  • 确保 Port 22 未被注释(删除开头#)
  • 确认 ListenAddress 0.0.0.0(监听所有网卡)
  • 保存后重启服务:systemctl restart sshd

2. 检查云安全组与防火墙规则

(1)云安全组(华为云等通用操作)
  • 登录云服务器控制台→进入安全组→入方向规则
  • 确认已放行TCP 22端口,源地址设为0.0.0.0/0(临时测试)或本地公网IP(安全)
  • 优先级设为100以内,保存后等待1-2分钟生效
(2)服务器本地防火墙

根据系统类型执行对应命令:

  • CentOS/RHEL(firewalld):
firewall-cmd --permanent --add-port=22/tcp && firewall-cmd --reload
  • Ubuntu/Debian(ufw):
ufw allow 22/tcp && ufw reload
  • 清理iptables旧规则:
iptables -F INPUT && iptables -I INPUT -p tcp --dport 22 -j ACCEPT

3. 排查网络链路连通性

本地电脑执行路由跟踪命令,检测链路是否阻断:

  • Windows系统:tracert 服务器IP
  • Linux/Mac系统:traceroute 服务器IP
    若某一跳出现“* * *”超时,说明中间节点阻断通信,属于运营商路由限制。

4. 额外排查SELinux拦截(部分Linux系统)

若上述步骤无效,临时关闭SELinux测试:

setenforce 0

若测试连通,执行以下命令永久放行:

semanage port -a -t ssh_port_t -p tcp 22 && setenforce 1

问题根因与解决方案

核心原因

服务器SSH服务与端口配置正常,问题出在本地到服务器的网络链路:

  • 本地运营商临时管控22端口或IP段
  • 中间网络节点路由策略限制
  • 云厂商安全系统误拦截本地IP

高效解决方案

  1. 优先使用智能加速功能,通过优化链路绕开阻断节点;
  2. 更换SSH端口(避开22端口限制):
    • 编辑 /etc/ssh/sshd_config,将Port 22改为Port 2222(自定义端口)
    • 云安全组与防火墙同步放行新端口
    • 本地连接命令:ssh -p 新端口 用户名@服务器IP
  3. 备选方案:部署Web SSH工具(如webssh),通过浏览器直接连接。

总结

此类“浏览器可访问、SSH直连失败”的场景,多为网络链路限制或临时策略调整导致。优先使用智能加速是最高效的解决方式,若需直连可更换SSH端口或联系运营商/云厂商排查IP拦截问题。

更多推荐