SSH 非 22 端口连接失败从安全组、防火墙到 sshd 监听的完整排障指南把 SSH 端口从默认的22改成1025后Xshell 提示连接失败账号和密码却没有问题。遇到这种情况时反复修改客户端配置通常没有用因为一次 SSH 连接至少要通过三个关卡云安全组、服务器防火墙、sshd 监听端口。在启用 SELinux 的系统中还要检查第四层策略。本文以阿里云 ECS、宝塔面板和 Xshell 为例整理一套从外到内的排查流程。示例端口使用1025替换成自己的端口即可。重要远程修改 SSH 配置时不要关闭当前已经连上的会话也不要立即删除Port 22。确认新端口能通过另一个终端正常登录后再考虑是否停用 22 端口。一、先理解 SSH 连接经过了哪些位置Xshell / SSH 客户端云平台安全组系统或宝塔防火墙SELinux 端口策略sshd 监听端口账号与密钥认证只修改/etc/ssh/sshd_config并不够。如果安全组或防火墙没有放行请求仍然到不了 sshd反过来只开放防火墙而没有让 sshd 监听该端口也无法建立 SSH 会话。检查层级要确认的内容云安全组入方向允许目标 TCP 端口主机防火墙firewalld、ufw或宝塔防火墙已经放行SELinux非默认端口属于ssh_port_t类型sshd配置正确且进程正在监听目标端口客户端IP、端口、用户名和认证方式正确二、修改之前先做两项检查1. 确认端口没有被其他程序占用sudoss-lntp|grep:1025\b没有输出通常表示端口当前没有监听程序。若已经被占用应换一个端口或者先确认占用它的服务是否可以调整。2. 备份 sshd 配置sudocp/etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date%F-%H%M%S)远程服务器只有 SSH 一个管理入口时配置错误可能导致自己被锁在服务器外。保留旧会话和备份文件能省下很多麻烦。三、让 sshd 同时监听 22 和新端口使用vi打开服务端配置文件sudovi/etc/ssh/sshd_config按i进入编辑模式在全局配置区域加入Port 22 Port 1025这里暂时保留Port 22让新旧端口同时可用。不要把端口配置写进Match条件块中。部分系统在/etc/ssh/sshd_config顶部包含Include /etc/ssh/sshd_config.d/*.conf这类系统也可以把端口配置写入独立文件例如/etc/ssh/sshd_config.d/10-custom-port.conf。完成后可查看最终生效配置sudosshd-T|grep^port预期结果中应同时出现port 22 port 1025四、启用 SELinux 时放行新端口先查看 SELinux 状态getenforce如果结果是Enforcing需要把新端口加入 SSH 允许使用的端口类型sudosemanage port-a-tssh_port_t-ptcp1025sudosemanage port-l|grepssh_port_t如果提示端口已经存在于其他类型中不要直接忽略应先使用semanage port -l | grep 1025查清原有归属。缺少semanage命令时在 RHEL、CentOS、Rocky Linux 或 Alibaba Cloud Linux 上通常需要安装policycoreutils-python-utils。五、开放服务器防火墙firewalldsudofirewall-cmd--permanent--add-port1025/tcpsudofirewall-cmd--reloadsudofirewall-cmd --list-portsUbuntu 的 ufw只允许自己的公网出口 IP 访问会更安全sudoufw allow from你的公网出口IPto any port1025proto tcpsudoufw status numbered如果服务器使用宝塔面板还要进入安全页面在防火墙规则中放行1025/TCP。宝塔防火墙和云安全组不是同一个东西不能只配置其中一处。六、在阿里云安全组中增加入方向规则进入阿里云 ECS 控制台找到实例关联的安全组增加一条入方向规则配置项建议值授权策略允许协议类型自定义 TCP目的端口1025/1025来源自己的固定公网 IP 或可信网段不建议为了方便长期设置为0.0.0.0/0这会允许所有公网地址访问 SSH 端口。修改的是哪个 SSH 端口安全组和服务器防火墙就放行同一个端口并不是“开放两个不同的端口”。七、检查配置并加载 sshd首先检查配置语法sudosshd-t没有输出表示语法检查通过。若出现错误先修复错误不要重启服务。RHEL、CentOS、Rocky Linux 和 Alibaba Cloud Linux 通常使用sudosystemctl reload sshdsudosystemctl status sshd --no-pagerUbuntu、Debian 通常使用sudosystemctl reloadsshsudosystemctl statusssh--no-pager如果当前系统不支持reload确认sshd -t通过后再执行对应服务的restart。最后检查实际监听状态sudoss-lntp|grep-E:(22|1025)\b应当能看到 sshd 同时监听0.0.0.0:1025或[::]:1025。只看到 22 端口说明新配置还没有生效。八、宝塔面板中如何修改 sshd_config不熟悉vi时也可以在宝塔面板的文件管理中进入/etc/ssh/sshd_config双击文件加入Port 22和Port 1025后保存使用宝塔修改文件后同样必须执行sshd -t并重新加载 sshd在线编辑器只负责保存文件不会自动完成所有系统配置。九、从客户端验证新端口Windows PowerShell 可以先测试 TCP 端口Test-NetConnection203.0.113.10-Port 1025其中203.0.113.10是文档示例地址请替换为自己的服务器地址。TcpTestSucceeded为True只能说明 TCP 端口可达不代表用户名和密码一定正确。使用 OpenSSH 客户端测试ssh-vvv-p1025your_user203.0.113.10Xshell 中则新建一个会话填写主机地址把端口改为1025。建议新开窗口测试不要直接改掉当前仍可用的 22 端口会话。十、根据错误提示快速定位1.Connection timed out或Connection failed客户端没有收到有效响应优先检查阿里云安全组是否存在新端口的入方向规则宝塔、firewalld或ufw是否放行公网 IP、端口和路由是否正确sshd 是否真的监听该端口。2.Connection refused通常说明服务器地址可达但目标端口没有进程监听或者防火墙明确拒绝连接。先执行sudoss-lntp|grep:1025\b3.Connection established后立即Connection closed这表示 TCP 层已经接通但远端很快关闭了连接。它不能单独证明“账号密码错误”或“sshd 没监听”还可能是目标端口运行的并非 SSH、sshd 策略拒绝、连接限制或协议协商失败。可以检查 SSH 服务是否返回正确的协议标识nc-v203.0.113.101025正常的 OpenSSH 服务通常会返回以SSH-2.0-OpenSSH_开头的信息。随后查看服务日志# RHEL/CentOS/Alibaba Cloud Linuxsudojournalctl-usshd--since10 minutes ago--no-pager# Ubuntu/Debiansudojournalctl-ussh--since10 minutes ago--no-pager还可以检查/var/log/secure或/var/log/auth.log。4.Permission denied网络和 SSH 服务通常已经正常应继续检查用户名、密码、私钥、PasswordAuthentication、PubkeyAuthentication和登录用户权限。十一、确认成功后的安全收尾只有在新终端能够通过1025正常登录后才能考虑删除Port 22以及对应的安全组、防火墙规则。改端口只能减少针对默认端口的自动扫描并不能替代真正的安全措施。建议继续完成以下配置优先使用 SSH 密钥登录禁止 root 直接登录限制安全组来源 IP配置 Fail2ban 或其他登录防护定期检查journalctl和登录记录。十二、一页检查清单新端口没有被其他服务占用当前 SSH 会话保持连接sshd_config暂时同时保留 22 和新端口sshd -t没有报错SELinux 已允许新端口系统或宝塔防火墙已放行云安全组已放行同一个 TCP 端口ss -lntp能看到 sshd 监听新端口新终端已经成功登录再决定是否关闭 22 端口。参考资料OpenSSHsshd_config手册Ubuntu OpenSSH Server 文档Ubuntu UFW 防火墙文档Red HatOpenSSH 非默认端口与 SELinux 配置阿里云 ECS 安全组说明如果这篇文章帮你解决了问题可以收藏这份检查清单。以后遇到 SSH 端口连接失败按“安全组 → 主机防火墙 → SELinux → sshd 监听 → 认证”的顺序排查通常很快就能定位到问题所在。