Linux 服务器无法远程连接?教你排查网络
第一步:先确认故障现象和准备工作
当 Linux 服务器无法远程连接 时,不要急着重启。
先确定具体现象:是 连接超时(Time out)还是 连接被拒绝(Connection refused)?
不同报错对应不同的排查方向。
准备工作:你需要知道服务器的公网IP、SSH端口(默认22)、以及自己的本地网络环境(比如是否在公司内网或家宽环境下)。
另外准备好 本地终端(Windows 用 PowerShell 或 CMD,macOS/Linux 直接用终端)。
第二步:从本地侧检查网络可达性
2.1 先做 Ping 测试
在本地终端输入:
ping 你的服务器公网IP
- 如果能 ping 通,说明物理链路正常,问题出在上层应用或安全策略上。
- 如果 ping 不通(持续 Request timeout),说明 网络层不通。此时检查:
- 服务器是否关机或宕机(去云服务商后台查看实例状态)。
- 云服务商的 安全组 / 防火墙 是否放行了 ICMP(ping)协议。
2.2 再用 Telnet 检查端口
ping 通但 SSH 连不上,就需要检查端口是否开放:
telnet 你的服务器公网IP 22
- 如果显示
Connected to ...,表示端口可通,问题在 SSH 服务端配置或认证。 - 如果提示
Connection refused,说明端口没打开要么 SSH 服务没启动,要么防火墙/安全组拦截了 22 端口。 - 如果提示
Connection timed out,说明网络层有防火墙或路由问题,继续往下排查安全组。
第三步:检查云服务商安全组与本地防火墙
3.1 云平台安全组规则
以阿里云/腾讯云为例:
- 登录云控制台,找到实例对应的 安全组。
- 查看 入方向规则 是否允许源IP为 0.0.0.0/0 或你的本机IP,协议为 TCP,端口为 22。
- 常见坑:如果安全组规则里只放行了特定端口(比如 HTTP 80),却遗漏了 SSH 22,就会导致
Connection timed out。 - 正确做法:添加入方向规则:协议 TCP,端口 22,授权对象 0.0.0.0/0(生产环境建议限制为你的办公IP)。
3.2 本地防火墙(服务器侧)
如果服务器没有装云助手或无法通过 VNC 登录,可以先重启试试?
但更稳的方法是先通过云平台的 VNC 登录(或救援模式)进入系统。
登录后检查防火墙状态:
# 对于 firewalld
systemctl status firewalld
firewall-cmd --list-all
# 对于 iptables
iptables -L -n | grep 22
如果防火墙开启了但没放行 22 端口,执行:
# firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
service iptables save
第四步:检查 SSH 服务端配置与运行状态
4.1 确认 SSH 服务是否运行
systemctl status sshd
如果显示 active (running) 则正常;
如果 inactive (dead) 则启动:
systemctl start sshd
systemctl enable sshd
4.2 检查 SSH 监听地址和端口
查看 /etc/ssh/sshd_config 中的关键项:
#Port 22 # 确认没有被注释且值正确
#ListenAddress 0.0.0.0 # 建议设置为 0.0.0.0 表示监听所有IP
#PermitRootLogin yes # 如果需要 root 登录,取消注释
修改后重启 sshd:
systemctl restart sshd
4.3 常见错误补充
- Connection refused:SSH 服务未运行、端口被占用、或防火墙/iptables 拦截。
- Permission denied (publickey):密钥认证失败,检查本地密钥对是否匹配,或云平台秘钥配置。
- No route to host:网络路由问题,检查安全组或本地是否有代理/VPN干扰。
第五步:避坑说明与效果验证
避坑:
- 云服务器的 弹性公网IP 可能是独立的,如果实例没有绑定公网IP,直接连内网IP肯定失败。
- 修改防火墙规则时千万不要把自己锁在外面。建议在 VNC 终端里操作,并且先测试(比如
iptables -P INPUT ACCEPT先放行,再慢慢精细化)。 - 如果使用的是 centos7 默认可能会启用 firewalld,而低版本用 iptables,不要混淆。
效果验证:
完成上述步骤后,在本地再次执行:
ssh 用户名@服务器公网IP -p 22
如果能成功登录,问题解决。
如果仍然失败,回到第二步重新检查链路,或者看云服务商 VNC 界面的网络日志。
如果实在找不到原因,建议在云控制台 重启实例 后再试,有时简单的重启能恢复网络状态。
最后记住:网络排查的核心是分层验证,从链路层→网络层→传输层→应用层,一步步缩小范围,不要跳跃。