Xshell连接SSH失败需依次检查:一、确认sshd服务运行并监听正确端口;二、启用sshd_config中PasswordAuthentication yes;三、放行防火墙及云平台安全组的SSH端口;四、核对Xshell主机、端口、用户名和认证方式;五、SELinux环境下需配置端口策略或临时设为permissive模式。

如果您尝试使用Xshell连接SSH服务器,但收到“密码被拒绝”或“无法连接”的提示,则可能是由于服务器配置、网络设置或客户端参数不匹配导致。以下是解决此问题的具体配置操作步骤:
一、检查SSH服务是否运行并监听正确端口
SSH服务器必须处于运行状态,并在指定端口(默认22)上接受连接请求。若服务未启动或监听端口被修改,Xshell将无法建立TCP连接。
1、登录服务器本地终端或控制台。
2、执行命令 systemctl status sshd(CentOS/RHEL)或 systemctl status ssh(Ubuntu/Debian)确认服务状态。
3、若服务未运行,执行 systemctl start sshd 或 systemctl start ssh 启动服务。
4、执行 ss -tuln | grep :22 检查22端口是否被sshd进程监听;若端口非22,需记录实际监听端口。
二、验证SSH配置文件中允许密码认证
OpenSSH服务器默认可能禁用密码登录,仅支持密钥认证。若未启用PasswordAuthentication,即使密码正确也会被拒绝。
1、使用文本编辑器打开SSH主配置文件:/etc/ssh/sshd_config。
2、查找 PasswordAuthentication 行,确保其值为 yes(而非no或注释状态)。
3、查找 PermitRootLogin 行,若使用root账户登录,需设为 yes 或 prohibit-password;若设为 no 则root密码登录被彻底禁止。
4、保存文件后执行 systemctl restart sshd 使配置生效。
三、确认防火墙放行SSH端口
系统级防火墙(如firewalld或ufw)或云平台安全组策略可能拦截入站SSH连接,导致连接超时或被重置。
1、对于firewalld(CentOS/RHEL),执行 firewall-cmd --list-ports 查看22端口是否开放。
2、若未开放,执行 firewall-cmd --permanent --add-port=22/tcp 添加规则,再运行 firewall-cmd --reload 生效。
3、对于ufw(Ubuntu/Debian),执行 ufw status 检查状态,若启用则运行 ufw allow 22。
4、若服务器部署于阿里云、腾讯云等平台,需同步检查对应实例的**安全组入方向规则**,确保添加了允许来源IP访问22端口的TCP策略。
四、在Xshell中核对连接参数与认证方式
Xshell会话配置错误(如端口、用户名、认证类型)将直接导致连接失败或密码拒绝,需逐项比对服务器实际设置。
1、新建会话时,在“连接”选项卡中确认 主机 填写的是服务器可路由的IP或域名,且 端口号 与sshd实际监听端口一致。
2、在“用户身份验证”选项卡中,确认 用户名 与服务器上存在的账户名完全一致(区分大小写)。
3、检查“方法”下拉菜单:若服务器仅启用密码认证,必须选择 Password;若误选 Public Key 且未加载私钥,将跳过密码输入直接失败。
4、勾选 记住密码 前,先取消勾选以排除密码缓存干扰;首次连接建议手动输入密码测试。
五、排查SELinux对SSH端口的限制(仅限RHEL/CentOS)
SELinux处于enforcing模式时,可能阻止sshd绑定到非标准端口或限制网络连接行为,造成连接被拒绝但无明确日志提示。
1、执行 getenforce 查看当前模式;若返回 Enforcing,需进一步检查。
2、执行 sestatus -b | grep ssh 确认 sshd_disable_trans 和 allow_ssh_keysign 是否启用。
3、若SSH端口非22(如改为2222),需运行 semanage port -a -t ssh_port_t -p tcp 2222 将新端口加入SELinux允许列表。
4、临时切换至permissive模式验证:执行 setenforce 0;若此时Xshell连接成功,则确认为SELinux策略限制。








