文档首页> 常见问题> 能 ping 通但 22 端口拒绝连接

能 ping 通但 22 端口拒绝连接

发布时间:2025-12-18 18:52        更新时间:2025-12-18 20:17
ping 得通说明链路是活的,拒绝连接(connection refused)说明请求到了机器、但 22 端口上没有服务在接。这个错误和"连接超时"要区分开:超时是包根本没到,拒绝是包到了没人接,性质完全不同,后面的路也完全不同。范围已经缩小到机器本身,顺着三层往下查。动手前先在客户端确认一遍:ssh -v 的输出里明确写着 refused,才对得上本篇的排查路线;如果是卡住不动最后超时,先去查安全组。 第一层:sshd 在不在跑 systemctl status sshd ss -lntp | grep :22 状态是 inactive 或 failed,直接 systemctl start sshd,起不来就看 journalctl -u sshd -n 50 的报错。ss 的输出里要看 State 列的 LISTEN:只有 ESTABLISHED 而没有 LISTEN,说明没有进程在新连接上守着。配置文件改坏导致服务无法启动是常见戏码,sshd -t 可以检查 /etc/ssh/sshd_config 的语法,无输出即正常;报 Bad configuration option 时,多半是改配置时写错了关键字或多了多余字符。 第二层:监听地址对不对 ss 的输出里如果只有 127.0.0.1:22,说明 sshd 只监听本机回环地址,外部连接自然被拒。这种情况常见于照抄了别人的配置模板,ListenAddress 一行被人改过。打开 /etc/ssh/sshd_config 检查,改成 0.0.0.0 或直接注释掉,systemctl restart sshd 生效。 第三层:防火墙在不在拒绝 超时对应防火墙的 DROP(默默丢包),拒绝对应 REJECT(明确回绝),两种规则都可能存在: iptables -L -n | grep -i reject firewall-cmd --list-all 还有一种容易被忽略的:TCP Wrappers 的 hosts.deny 里写了拒绝条目,sshd 接受连接前会先查它,现象同样是拒绝连接。找到针对 22 端口的拒绝规则后放行: firewall-cmd --add-service=ssh --permanent && firewall-cmd --reload 客户端侧还有个趁手的工具:ssh -v user@服务器IP,详细输出会显示卡在哪一步。停在 Connecting to 之后立刻 refused,就和上面三层一一对应着看。 改 sshd 或防火墙配置前,先保持一个已连接的会话不断开,再动手改,防止把自己锁在外面。拒绝连接是所有连接故障里定位最快的一种,三层过一遍,通常十分钟内解决。改完配置,先从另一台机器验证一次再退出当前会话,这是所有远程改动的通用保命习惯。