SSH 连接 CN2 VPS 提示 Connection refused,是端口被防火墙拦截吗?

文章导读
SSH 连接 CN2 VPS 提示"Connection refused"通常表明服务端 SSH 进程未运行或端口未监听,而非防火墙静默丢弃。防火墙若配置为 DROP 策略通常导致连接超时,只有配置了 REJECT 策略或服务主动拒绝时才会出现该报错。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

SSH 连接 CN2 VPS 提示"Connection refused"通常表明服务端 SSH 进程未运行或端口未监听,而非防火墙静默丢弃。防火墙若配置为 DROP 策略通常导致连接超时,只有配置了 REJECT 策略或服务主动拒绝时才会出现该报错。

先说结论:"Connection refused"核心原因是目标主机 TCP 栈返回了 RST 包,多数情况是 SSH 服务未启动或监听配置错误,防火墙拦截通常表现为超时。

  • 先确认:SSH 服务进程(sshd)是否处于 active 运行状态。
  • 先处理:检查服务器本地防火墙及安全组是否放行 22 端口。
  • 再验证:使用 telnet 或 nc 命令测试端口可达性。

命令速用版

若具备服务器本地访问权限(如 VNC 或控制台),可直接执行以下命令快速定位:

1. 检查服务状态(Ubuntu 使用 ssh,CentOS 使用 sshd):

systemctl status ssh

2. 检查端口监听情况(确认是否监听 0.0.0.0):

ss -tlnp | grep ':22'

3. 测试外部连通性(在客户端执行):

nc -zv 服务器 IP 22

为什么会这样

"Connection refused"是 TCP 三次握手阶段被明确拒绝的信号,意味着网络路由可达但目标端口无服务响应。这与"Connection timed out"有本质区别,后者通常是数据包被防火墙静默丢弃或路由不可达。当客户端发送 SYN 包后,若服务器内核返回 RST 包,客户端即报"Connection refused",常见于 SSH 服务未启动、端口被占用或防火墙配置了 REJECT 规则。

分步处理

按照以下顺序排查,可覆盖 90% 以上的连接拒绝场景:

第一步:验证网络层连通性

在本地客户端执行 ping 命令,确认 IP 层可达。若 ping 不通,需检查云服务器安全组是否放行 ICMP 协议或本地网络配置。

ping 服务器 IP

第二步:检查 SSH 服务运行状态

SSH 连接 CN2 VPS 提示 Connection refused,是端口被防火墙拦截吗?

登录服务器本地终端,查看服务状态。若显示 inactive (dead),需启动服务。

sudo systemctl start ssh

注意 Ubuntu 22.04 等新版系统服务名可能为 ssh 而非 sshd。

第三步:确认端口监听范围

执行 ss 命令查看监听地址。若显示 127.0.0.1:22,说明仅允许本地访问,需修改 sshd_config 中的 ListenAddress 配置。

sudo ss -tlnp | grep ':22'

第四步:排查防火墙与安全组

检查服务器本地防火墙(如 ufw、firewalld)及云厂商控制台的安全组规则,确保入方向 TCP 22 端口对客户端 IP 开放。

sudo ufw allow 22/tcp

怎么验证是否生效

完成配置修改后,在客户端使用 verbose 模式尝试连接,观察握手过程。

ssh -v user@服务器 IP

若输出中出现"Connected to..."且不再报"Connection refused",说明问题已解决。若仍失败,查看服务端日志/var/log/auth.log 或/var/log/secure 获取详细拒绝原因。

常见坑

1. 服务名称差异:CentOS/RHEL 系统服务名为 sshd,Ubuntu/Debian 系统通常为 ssh,执行 systemctl 命令时需区分。

SSH 连接 CN2 VPS 提示 Connection refused,是端口被防火墙拦截吗?

2. 监听地址限制:sshd_config 中若配置了 ListenAddress 127.0.0.1,外网将无法连接,需注释该行或改为 0.0.0.0。

3. 安全组规则优先级:云厂商安全组规则若有 deny 所有入站流量,需确保允许 22 端口的规则优先级更高或单独添加。

常见问题

Connection refused 和 Connection timed out 有什么区别?

Connection refused 表示目标主机收到了请求但主动拒绝(通常无服务监听),Connection timed out 表示请求发出后无响应(通常被防火墙丢弃或网络不通)。

修改 SSH 端口后连接被拒绝怎么办?

修改端口后必须在 ssh 命令中显式指定-p 参数,并同时更新防火墙和安全组规则放行新端口。

云服务器安全组放行了为什么还是拒绝?

需检查服务器操作系统内部的防火墙(如 iptables、ufw)是否拦截,安全组仅控制云平台网络边界。

参考来源

1. SSH Connection refused port 22 排查步骤

2. Ubuntu 22.04 SSH 连接被拒绝:sshd 未启动或端口被防火墙拦截?

3. SSH 连接被拒绝:常见原因有哪些?_编程语言-CSDN 问答

4. 从 Permission denied 到 Connection refused:SSH 连接失败的 7 种典型场景及解决方案

5. SSH 疑难问题排查:轻松解决连接中的“绊脚石”