96SEO 2025-10-23 04:15 0
SSH是我们远程管理Linux、 Unix系统的首选工具,但在使用过程中,遇到“Connection refused”错误却十分常见。这个错误意味着客户端向服务器发起的连接请求被拒绝, 根本原因可能有多种,本文将帮你系统化、专业化地排查与解决这一问题。
收到“Connection refused”错误。简单就是服务器明确拒绝了你的连接请求。

检查IP地址是否正确及可达性是第一步。
ping : 测试网络是否连通。如果ping不通,说明存在网络层面的问题,需要排查路由、防火墙、VPN等因素。traceroute : 查看数据包传输路径,有助于判断中间节点是否阻断通信。telnet 22: 检测能否访问SSH默认端口。如果提示“Connection refused”, 说明该端口没有开放或被屏蔽;如果超时则可能是网络不可达或被丢弃包。*小王尝试远程登录公司云主机, 但发现ping可以通,telnet却显示connection refused。经确认,公司防火墙对外开放22端口策略未生效,是原因所在。*
*常见操作系统下检测及启动命令如下*:
| 操作系统 | 检测状态命令 | 启动命令 |
|---|---|---|
| CENTOS/REDHAT 系列 | systemctl status sshd.service | systemctl start sshd.service
systemctl enable sshd.service #开机自启 |
| IDEBIAN/UBUNTU 系列 | systemctl status ssh.service 或 systemctl status sshd.service | systemctl start ssh.service
systemctl enable ssh.service #开机自启 |
| SYSTEM V INIT 脚本 | /etc/init.d/sshd status 或 /etc/init.d/ssh status | /etc/init.d/sshd start 或 /etc/init.d/ssh start |
*若提示“Unit not found”, 则说明未安装OpenSSH Server,需要安装后再启动。*
*张工发现某Ubuntu机器无法ssh登录, 经诊断发现sshd未启动,他施行sudo systemctl start ssh.service,成功恢复远程连接。*
*在部分最小化安装环境里没有预装OpenSSH Server导致无服务监听。确认方法如下:*
rpm -qa | grep openssh-server # 无输出则需安装: yum install -y openssh-server # 安装完成后重启sshd systemctl restart sshd.service
dpkg -l | grep openssh-server # 若无则安装: apt-get update && apt-get install -y openssh-server # 启动并设置开机自启: systemctl restart ssh systemctl enable ssh
*即使ssh服务正常运行, 如果防火墙策略阻止了TCP 22端口,也同样导致“Connection refused”。所以呢, 需要检查以下几个方面*:
firewall-cmd --list-all #查看当前允许的服务和端口 firewall-cmd --add-service=ssh --permanent #添加永久允许ssh服务 firewall-cmd --reload #重新加载firewalld规则 firewall-cmd --list-ports #查看当前打开的所有端口 # 如果你使用的是iptables,可以用下面命令查看相关规则: iptables -L -n | grep :22 iptables -I INPUT -p tcp --dport 22 -j ACCEPT #允许TCP22入站流量 service iptables save #保存规则
ufw status verbose #查看状态和允许情况 ufw allow ssh #放行默认tcp22端口 ufw reload #重新加载规则 # 若禁止状态,可施行: ufw enable #开启ufw防火墙,并确保允许ssh后重连避免锁死 .
*默认情况下OpenSSH监听TCP 22端口。但若修改过配置文件,或者有其他程序占用了该端口,会导致连接被拒绝。具体操作如下*:
sudo vim /etc/ssh/sshd_config # 查找Port字段是否被修改, 比方说改为2222: Port 2222 # 如果更改过请记住新端口号,在客户端使用: ssh user@ip -p 新端口号 # 保存退出后重启SSHD: sudo systemctl restart sshd .
sudo netstat -tulpn | grep sshd # 或者 sudo ss -tlnp | grep sshd # 确认哪一个接口与哪个端口在监听。 如果看不到对应的tcp 0.0.0.0:22或::表示没有正确绑定。 .
sudo lsof -i tcp:22 # 如果显示其他程序占用,可以考虑kill掉冲突进程。 .
当客户端发起TCP三次握手请求至服务器指定PORT时 若此PORT无人响应,内核直接返回RST信号给客户端,从而引发connection refused,即拒绝建立连接。这也是区别于“timeout”的关键点——timeout代表数据包丢失等待超时而refused代表主动拒绝连接请求。
# tail -100 /var/log/auth.log | grep sshd
Apr 26 09:41:sshd: Failed password for root from xx.xx.xx.xx port xxxx ...
Apr 26 09:sshd: Server listening on :: port xx.
...
# journalctl -u sshd Apr XX XX:sshd: error messages or service failure notices. 及时获取最新日志帮助分析。
常见场景下快速解决方案
问题现象 快速定位措施 解决方案指引 无法ping 通 IP 网络不通 排查物理链路、 VPN、网卡设置 ping 通但 telnet ip port=22 connection refused 服务未运行、防火墙阻止
- 检查并启动 SSH 服务
- 调整防火墙策略放行 TCP22
出现 Port 非标准值 确认 SSH 配置中 Port 设置 更改客户端对应新 Port 参数进行连接 日志中频繁出现认证失败 账户权限、密钥认证异常 核实账号密码/公钥授权目录 ~/.ssh 权限 云主机平安组拒绝 云平台策略屏蔽 TCP 外部访问 添加平安组入站允许 TCP22 或对应 SSH 自定义 Port
与最佳实践建议
遇到 SSH “Connection Refused” 错误,不要慌!按上述流程逐步排查, 大多数问题都能快速定位解决:
- 先确保 IP 和网络层面完全畅通;
- 再确认 SSH 服务是否正常安装且运行中;
- 细致检视防火墙、平安组以及本地权限控制;
- 务必关注 SSH 配置文件合理性以及监听状态;
- **持续积累实践经验,比如搭建测试环境模拟故障,有助于提升自身故障处理效率** 。 建议关注官方文档和社区最新动态保持知识更新。
© 2024 — ——打造高效运维必备指南!©& nbsp;
Demand feedback