xshell连接linux失败主因是sshd服务未运行、网络通路受阻或认证配置错误;需依次验证sshd状态与端口监听、防火墙及安全组规则、passwordauthentication等配置,并清除known_hosts缓存。

Xshell 连接 Linux 服务器失败,八成不是软件问题,而是 sshd 服务、网络通路或认证配置三者中至少有一处没对齐。别急着重装,先按真实排查链路操作。
确认 sshd 服务是否真在运行且监听 22 端口
很多人以为“装了 OpenSSH 就等于能连”,其实服务可能没启、配置被改、端口被换。必须登录服务器本地(或用 VNC/控制台)验证:
- 执行
systemctl status sshd或systemctl status ssh(Ubuntu 默认服务名是ssh),看状态是不是active (running) - 如果显示
inactive,运行systemctl start sshd(或ssh)并加自启:systemctl enable sshd - 再跑
ss -lnt | grep ':22',必须看到类似*:22或[::]:22的监听行;若无输出,说明 SSH 没监听默认端口——检查/etc/ssh/sshd_config中的Port 22是否被注释或改成了别的数字
防火墙是否悄悄拦住了 22 端口
CentOS/RHEL 默认开 firewalld,Ubuntu 默认用 ufw,它们不会主动放行 SSH。不关防火墙,只加规则更安全:
- CentOS/RHEL:运行
firewall-cmd --list-ports看 22/tcp 是否在列;没有就加:firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reload - Ubuntu:运行
ufw status,若显示Inactive可跳过;若为Active但没 22/tcp,则执行ufw allow 22 - 注意:云服务器(阿里云/腾讯云等)还需在**安全组**里手动放行 22 端口,这个和系统防火墙是两层,缺一不可
Connection refused / No route to host / Connection timed out 区分处理
这三个报错看着像,根源完全不同,不能统一重启了事:
-
Connection refused:说明网络可达,但目标 IP 的 22 端口没人监听 → 回头查sshd状态和端口监听 -
No route to host:本地根本发不出包,通常是虚拟机网络模式错(比如用了仅主机模式却想从宿主机连)、IP 地址输错、或路由表异常 → 先ping服务器 IP,不通就停在这步 -
Connection timed out:包发出去了但没回音,90% 是防火墙(系统级或云平台安全组)丢弃了连接请求,也可能是中间网络设备策略拦截 → 重点查防火墙和安全组
Password denied 但密码确定没错?重点看这三项
输对密码还被拒,不是 Xshell 问题,是服务器端限制生效了:
- 检查
/etc/ssh/sshd_config中PasswordAuthentication是否为yes;若为no,改为yes后必须systemctl restart sshd - 确认用户是否被禁止远程登录:
PermitRootLogin若设为no且你连的是root,就会直接拒绝;可临时设为yes测试,或改用普通用户 - 某些系统(如 CentOS Stream)默认禁用空密码或弱密码策略,即使密码正确,也可能因 PAM 模块拦截而报错;可临时在
/etc/pam.d/sshd中注释掉相关auth [default=die]行测试(仅调试,勿长期保留)
最容易被忽略的点:Xshell 首次连接时弹出的 “The server’s host key is not cached” 提示,如果点了“拒绝”而不是“接受”,后续所有连接都会失败,且错误信息极不直观。遇到连不上又查不出原因时,先删掉 Xshell 的 known_hosts 缓存(菜单:文件 → 属性 → 连接 → SSH → 安全 → 清除已知主机密钥)。











