CH-J Server Manager通过 SSH 管理服务器
菜单
全部指南与文章 →

服务器在线,但 SSH 端口 22 无响应

依次检查客户端、网络、防火墙和 sshd,找出服务器有响应但 SSH 无响应的原因。

直接测试端口

ping 有回复或网站能正常访问,并不能说明 SSH 的状态,因为它们使用的协议或端口各不相同。请从客户端直接测试 TCP 端口。Connection refused 表示收到了响应,但没有服务接受连接。超时表示完全没有响应,通常指向防火墙、路由或机器负载过高的问题。

nc -vz -w 5 server.example 22
ssh -v -o ConnectTimeout=5 user@server.example

Connection refused:通过控制台检查 sshd

使用提供商或虚拟机监控程序的控制台,而不是 SSH。检查服务是否运行、监听的地址和端口,以及配置是否有效。在较新的 Ubuntu 版本中,SSH 通过 ssh.socket 启动,因此也要检查对应的套接字单元。其他发行版可能将该服务命名为 sshd。

sudo systemctl status ssh.service ssh.socket
sudo ss -lntp | grep -E ':22\b|sshd'
sudo sshd -t
sudo journalctl -u ssh -n 50 --no-pager

超时:检查防火墙

检查服务器上的防火墙,以及服务器外部的所有过滤设施,例如云安全组、路由器或提供商控制面板。要确定数据包是否到达,请在尝试连接时在服务器上运行 tcpdump。如果看不到任何数据包,拦截发生在到达服务器之前。如果数据包到达却没有回复发出,请在服务器上查找原因。

sudo ufw status verbose
sudo nft list ruleset | less
sudo tcpdump -ni any tcp port 22

fail2ban 封禁或端口更改

登录失败后,fail2ban 可能封禁了你的地址,表现为只有从该地址连接时才超时或遭到拒绝。从其他网络测试即可快速判断。还要检查是否用 Port 更改了端口,或用 ListenAddress 将监听限制为一个地址;这些设置可能位于 sshd_config 或以下目录中的文件:/etc/ssh/sshd_config.d.

sudo fail2ban-client status sshd
sudo sshd -T | grep -E '^(port|listenaddress) '

端口连接成功,但登录卡住

如果 TCP 连接成功,却始终收不到 SSH 初始标识消息,说明 sshd 仅部分正常,或系统负载过高。请通过控制台查看内存、磁盘空间和负载。磁盘已满或内存耗尽可能导致无法建立新会话,而现有服务仍能响应。

uptime
free -h
df -h

使用 CH-J Server Manager 检查

Server Diagnostics 可在不登录的情况下,为 IPv4 和 IPv6 测试 ping、TCP 连接和 SSH 标识字符串,帮助你看出失败发生在哪个阶段。它仅从你的计算机发起测试,无法查看服务器内部,也无法指出哪个防火墙丢弃了数据包,因此上述检查仍需使用控制台。

详细文档

OpenSSH: sshd →

man: ss →

生物识别解锁与安全 →