基础网络连通性排查
这是所有网络连接问题的第一步,如果基础网络不通,后续的一切都无从谈起。

使用
ping命令测试
在您的本地计算机(Windows 或 macOS)上打开命令行工具(如 CMD 或 Terminal),执行以下命令:ping <您的CentOS服务器IP地址>
- 如果能 ping 通:说明您的本地机器与 CentOS 服务器之间的网络链路是基本通畅的,问题可能出在更上层的服务或配置上。
- ping 不通:显示“请求超时”或“目标主机不可达”,则问题根源在网络层面,请检查:
- IP 地址是否正确:确认您在 XShell 中输入的 IP 地址与 CentOS 服务器的实际 IP 地址完全一致,您可以在 CentOS 上通过
ip addr命令查看。 - 网络设备状态:检查服务器和本地机器之间的网络设备(路由器、交换机)是否工作正常。
- 虚拟机网络设置(如果适用):如果您的 CentOS 运行在虚拟机中(如 VMware、VirtualBox),请检查其网络模式设置,NAT 模式和桥接模式有不同的行为。
- IP 地址是否正确:确认您在 XShell 中输入的 IP 地址与 CentOS 服务器的实际 IP 地址完全一致,您可以在 CentOS 上通过
网络模式 特点 适用场景 NAT (网络地址转换) 虚拟机通过主机进行网络访问,对外部网络隐藏了虚拟机的真实 IP。 适合测试环境,主机与虚拟机可以互通,但外部直接访问虚拟机需配置端口转发。 Bridged (桥接) 虚拟机像一台独立的物理机一样连接到物理网络,拥有与主机在同一网段的 IP。 适合需要与局域网内其他设备直接通信的生产或测试环境。
检查 CentOS 端 SSH 服务状态
网络通畅后,下一步是确认 CentOS 服务器上的 SSH 服务是否正在运行并监听正确的端口。
检查 SSH 服务运行状态
在 CentOS 服务器上,执行以下命令查看sshd服务的状态:systemctl status sshd
- 如果输出中显示
active (running),则表示服务正在运行。 - 如果显示
inactive (dead),则表示服务未运行,您需要启动它:sudo systemctl start sshd
- 为了确保服务器重启后 SSH 服务能自动启动,建议设置开机自启:
sudo systemctl enable sshd
- 如果输出中显示
检查 SSH 监听端口
默认情况下,SSH 服务监听 22 端口,您需要确认它确实在监听,并且没有限制 IP。sudo netstat -tuln | grep 22
或者使用更现代的
ss命令:sudo ss -tuln | grep 22
正常的输出应该类似
tcp LISTEN 0 128 0.0.0.0:22,这表示服务正在监听所有网络接口的 22 端口,如果没有任何输出,说明服务未正确启动或配置有误。
防火墙与安全策略检查
这是导致连接失败最常见的原因之一,即使 SSH 服务正在运行,防火墙也可能阻止了访问请求。
CentOS 内置防火墙
CentOS 7 及以上版本默认使用firewalld作为防火墙管理工具。
- 查看防火墙状态:
sudo firewall-cmd --state
- 查看当前允许的服务/端口:
sudo firewall-cmd --list-all
在输出的
services列表中,检查是否有ssh,如果没有,说明防火墙阻止了 SSH 连接。 - 永久开放 SSH 服务:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
如果您修改了 SSH 的默认端口,需要开放对应的端口号而非服务名,例如开放 2222 端口:
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
- 查看防火墙状态:
SELinux 安全模块
SELinux 是 CentOS 的一个强制访问控制(MAC)系统,它也可能阻止 SSH 连接,尤其是在使用非标准端口时。- 查看 SELinux 状态:
getenforce
- 如果返回
Enforcing,表示它处于强制模式,您可以临时将其设置为Permissive(宽容模式)以测试是否是 SELinux 导致的问题:sudo setenforce 0
此时尝试用 XShell 连接,如果成功,则说明是 SELinux 的策略问题。注意:
setenforce 0只是临时生效,重启后会恢复,永久解决方法需要配置 SELinux 策略,若使用 2222 端口,需执行:sudo semanage port -a -t ssh_port_t -p tcp 2222
- 查看 SELinux 状态:
云服务商安全组
如果您的 CentOS 托管在阿里云、腾讯云、AWS 等云平台上,除了服务器内部的防火墙,还必须检查云平台提供的“安全组”规则,您需要在云控制台的安全组设置中,添加一条入站(Inbound)规则,允许来自您 IP 地址(或 0.0.0.0/0,即所有 IP)的 TCP 协议 22 端口(或您的自定义 SSH 端口)的访问。
SSH 服务配置文件审查
SSH 服务的详细行为由 /etc/ssh/sshd_config 文件控制,错误的配置会导致连接失败。
常用配置项检查:
Port 22:确认端口号是否正确。PermitRootLogin yes/no:如果您需要用 root 用户登录,此项必须为yes,出于安全考虑,建议使用普通用户登录,再通过su切换。PasswordAuthentication yes:如果您使用密码认证,此项必须为yes,如果设置为no,则只能使用密钥对登录。ListenAddress 0.0.0.0:确保它没有绑定到某个错误的 IP 地址上。
修改此文件后,必须重启 SSH 服务才能使配置生效:

sudo systemctl restart sshd
XShell 客户端配置核对
不要忘记检查 XShell 本身的会话配置是否正确。
- 主机:IP 地址是否拼写错误?
- 端口号:是否与服务器
sshd_config中设置的端口一致? - 用户名:是否是服务器上存在的有效用户?
- 连接方法:是否选择为 SSH?
相关问答FAQs
问题1:我能 ping 通服务器,但 XShell 还是连接不上,提示“Connection timed out”,该怎么办?
解答:ping 通但连接超时,这几乎可以肯定问题出在服务器端或中间网络设备的访问策略上,而不是基础网络链路,请按以下顺序重点排查:
- CentOS 防火墙:这是最可能的原因,检查
firewalld是否开放了 SSH 端口(默认 22)。 - 云平台安全组:如果您的服务器在云上,检查安全组的入站规则是否允许了您的 IP 访问 SSH 端口。
- SSH 服务状态:确认
sshd服务确实在运行,netstat或ss命令能看到它在监听端口。 - SELinux:
getenforce返回Enforcing,尝试临时关闭(setenforce 0)再连接,以判断是否是 SELinux 导致。
问题2:我为了安全,修改了 SSH 的默认端口为 2222,之后就再也连不上了,是什么原因?
解答:修改 SSH 端口后无法连接,通常是因为忘记更新防火墙规则,这是一个非常典型的“两步操作,只做了一步”的错误,您需要完成以下两个步骤:
- 服务器端:在 CentOS 的防火墙
firewalld中,永久添加新的 2222 端口,并重载防火墙配置(firewall-cmd --permanent --add-port=2222/tcp&&firewall-cmd --reload),如果开启了 SELinux,也需要为新端口添加 SELinux 策略。 - 客户端:在您的 XShell 会话属性中,将端口号从默认的 22 修改为您新设置的 2222。
确保这两个地方都已正确配置后,连接就应该恢复正常了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复