登录
首页 >  文章 >  常见问题

SSH端口22连接失败解决方法

时间:2026-05-10 17:24:44 297浏览 收藏

当SSH连接提示“Connection refused”时,问题根源几乎总在服务端——并非网络不通,而是服务器未在目标IP和端口上真正监听SSH请求。本文提供一套清晰、可操作的五步排查法:从核对IP与端口配置、测试网络及端口可达性,到验证sshd进程状态、确认服务是否安装,最后深入检查sshd_config语法与关键参数,每一步都直击常见陷阱(如仅监听127.0.0.1、云服务器安全组未放行、host key缺失、配置语法错误等),并附带精准命令和典型错误日志解读,助你快速定位并彻底解决SSH连接被拒这一高频运维难题。

SSH Connection refused port 22排查步骤

如果您尝试使用SSH客户端连接Linux服务器,但提示“Connection refused”或“ssh: connect to host port 22: Connection refused”,则表明客户端发出的TCP连接请求未被服务器响应。该错误明确指向服务端未在目标IP和端口上提供有效监听。以下是系统性排查此问题的步骤:

一、验证服务器IP地址与SSH端口配置

IP地址不可达或SSH服务未绑定到对外接口,是触发“Connection refused”的首要原因。Xshell或OpenSSH客户端必须能准确抵达服务器实际监听SSH的网络地址与端口。

1、在服务器本地执行ip ahostname -I,确认输出中包含您在SSH客户端中填写的IP地址,且该地址不属于127.0.0.1或内网不可路由段(如192.168.x.x在公网环境无法直连)。

2、运行sudo ss -tlnp | grep ':22',检查输出是否含0.0.0.0:22[::]:22;若仅显示127.0.0.1:22,说明sshd仅监听回环接口,不接受外部连接。

3、核对SSH客户端中填写的“主机”字段是否为服务器真实对外IP,“端口”字段是否与ss命令显示的监听端口完全一致;特别注意:若修改过Port配置,客户端必须显式指定-p参数

二、测试网络层连通性与端口可达性

即使IP正确,中间链路中的路由器、虚拟交换机、云平台安全组或主机防火墙也可能拦截SYN包,导致连接被直接拒绝而非超时。

1、在客户端执行ping 服务器IP;若全部超时,需检查本地网络配置、VMware/VirtualBox网络模式(推荐桥接)、物理网线或Wi-Fi状态。

2、执行telnet 服务器IP 22(Windows需启用Telnet客户端)或nc -zv 服务器IP 22(Linux/macOS);若返回“Connection refused”,说明服务器TCP栈收到SYN但无进程监听该端口;若返回“Connection timed out”,则大概率被防火墙或安全组静默丢弃。

3、若为云服务器(如阿里云、腾讯云、AWS),登录控制台进入安全组页面,确认已添加入方向规则:协议类型为TCP,端口范围精确匹配SSH监听端口(如22或2222),源IP可临时设为0.0.0.0/0用于验证

三、确认sshd进程运行状态与绑定行为

“Connection refused”最常见直接原因是sshd服务未启动,或虽启动但因配置错误未成功绑定端口。必须在服务器本地验证其真实生命周期与监听上下文。

1、执行systemctl status sshd(CentOS/RHEL 7+、Ubuntu 16.04+)或service ssh status(Debian旧版);若Active状态为inactive (dead)failed,立即执行systemctl start sshd

2、再次运行sudo ss -tlnp | grep ssh,观察PID列是否存在sshd进程;若无输出,说明服务启动失败,需进一步查日志。

3、执行journalctl -u sshd --since "1 hour ago" -n 20,重点查找fatalerrorCould not load host key类条目;常见致命错误包括/etc/ssh/sshd_config语法错误、缺失host key文件、端口被其他进程占用

四、检查SSH服务是否已安装并初始化

部分最小化安装的Linux系统(如某些Docker镜像或精简版CentOS)默认不预装openssh-server,导致systemctl根本识别不到sshd服务单元。

1、执行rpm -qa | grep openssh(RHEL/CentOS)或dpkg -l | grep openssh(Debian/Ubuntu);若无openssh-serveropenssh-daemon输出,说明未安装。

2、执行which sshd;若无返回,证实sshd二进制文件缺失。

3、根据发行版安装服务:yum install -y openssh-server(CentOS 7)或apt update && apt install -y openssh-server(Ubuntu);安装后首次运行会自动生成host key,务必等待初始化完成再尝试启动服务

五、审查sshd_config关键配置项

配置文件中存在非法指令、路径错误或逻辑冲突,会导致sshd启动时跳过端口绑定,表面运行实则未监听。

1、执行sudo sshd -t进行语法校验;若报错,按提示定位行号(如line 86),用sudo nano /etc/ssh/sshd_config打开修正。

2、检查Port指令值是否与客户端一致;确认ListenAddress未被设为127.0.0.1或特定内网IP而遗漏外网接口。

3、验证PermitRootLoginPasswordAuthentication等非监听相关参数不影响启动,但HostKey路径必须存在且可读;若修改过配置,必须执行systemctl restart sshd而非reload,因部分变更需完全重启生效

以上就是《SSH端口22连接失败解决方法》的详细内容,更多关于的资料请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>