“Connection refused”表明TCP连接可达但22端口无响应,主因是sshd未运行、未监听22端口(如仅绑定127.0.0.1或端口被修改)、防火墙显式拒绝、SELinux/AppArmor拦截;需依次检查服务状态、端口监听、防火墙规则及安全模块限制。

“Connection refused”不是网络不通,而是你已经抵达服务器门口,但门没开——说明 TCP 连接能建立,但 22 端口没人应答。问题一定出在服务器内部:SSH 服务没跑、端口没监听、或被防火墙明确拒绝。按这个顺序查,90% 的情况三分钟内就能定位。
确认 sshd 服务是否真正运行
别只信“已启用”,要看它此刻有没有活。
- 用 VNC 或云控制台登录服务器,执行:
systemctl status sshd(CentOS/RHEL)或systemctl status ssh(Ubuntu/Debian) - 若显示 inactive (dead) 或 failed,说明服务根本没起来;先尝试启动:
sudo systemctl start sshd - 若启动失败,看报错日志:
journalctl -u sshd -n 30 -f,常见原因包括 OpenSSL 库缺失、配置语法错误、端口被占用等
验证 22 端口是否在监听
服务跑了,不等于它在听 22 号门铃——可能改了端口,也可能只监听本地回环。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 执行:
ss -tlnp | grep :22或netstat -tlnp | grep :22 - 如果没输出,说明 sshd 没监听 22;检查
/etc/ssh/sshd_config中 Port 22 是否被注释或改成其他值(如 2222) - 同时确认 ListenAddress 设置——若写成
ListenAddress 127.0.0.1,外部 IP 就连不上;建议留空或设为0.0.0.0 - 改完配置务必重启:
sudo systemctl restart sshd
检查系统级防火墙是否主动拒绝
安全组放行只是第一步;服务器本地防火墙(firewalld/iptables/ufw)若设了 REJECT 规则,会直接返回 RST 包,触发 “Connection refused”。
- Ubuntu 上检查:
sudo ufw status verbose,确认 22/tcp 是 ALLOW - CentOS 上检查:
sudo firewall-cmd --list-all,看 ports 里是否有22/tcp - 若没放行,补上:
sudo firewall-cmd --permanent --add-port=22/tcp && sudo firewall-cmd --reload - 临时关闭防火墙测试(仅调试):
sudo systemctl stop firewalld或sudo ufw disable,再试 SSH
排除 SELinux 或 AppArmor 干预
这类强制访问控制模块有时会静默拦截 sshd 绑定端口,不报错但就是不监听。
- CentOS/RHEL 查 SELinux 状态:
sestatus,若为 enforcing,临时设为 permissive:sudo setenforce 0 - 查看是否拦截:
sudo ausearch -m avc -ts recent | grep sshd - Debian/Ubuntu 检查 AppArmor:
sudo aa-status | grep ssh,若有 denials,可临时禁用:sudo aa-disable /usr/sbin/sshd

















