SSH连接失败需按网络连通性、端口可达性、服务状态、防火墙及配置顺序排查:先ping确认服务器在线,再telnet或nc测试22端口是否开放,接着检查sshd服务是否运行及监听0.0.0.0:22,最后核查防火墙、安全组和sshd_config配置。

直接用 ssh 命令本身无法“检查远程服务器运行状态”,它只是建立连接的工具。真正检查状态,需要在成功登录后执行系统命令。关键在于:先连得上,再查得准。
确认 SSH 服务是否在线
这是第一步,判断远程服务器的 SSH 守护进程(sshd)有没有在运行、端口是否可访问:
- 在本地终端运行:
ssh -o ConnectTimeout=5 -o BatchMode=yes user@host,加-o BatchMode=yes可避免卡在密码提示;如果返回Connection refused,说明sshd没启动或端口被屏蔽 - 不登录也能探活:
nc -zv host 22或telnet host 22,看是否能建立 TCP 连接(注意:仅验证端口通,不代表系统正常) - 查目标端口是否监听(需提前知道端口):
timeout 3 bash -c 'echo > /dev/tcp/host/22' 2>/dev/null && echo "SSH port open" || echo "SSH port closed"
登录后快速查看系统健康度
成功 ssh user@host 进入后,用这几个命令一眼掌握基础状态:
-
uptime:显示系统已运行多久、当前负载(1/5/15 分钟平均值),数字高于 CPU 核心数就可能过载 -
free -h:看内存使用,重点关注available列,不是free;若available接近 0,说明内存吃紧 -
df -h:检查磁盘空间,特别留意/和/var分区;使用率超 90% 易引发服务异常 -
systemctl is-system-running:返回running表示初始化完成,degraded表示有服务失败但系统仍可操作
远程执行单条状态命令(免交互登录)
不想完整登录?可用 ssh 直接运行一条命令并返回结果:
-
ssh user@host 'uptime'—— 查运行时长和负载 -
ssh user@host 'systemctl is-active sshd'—— 确认 sshd 自身是否处于 active 状态 -
ssh user@host 'cat /proc/loadavg | awk "{print \$1,\$2,\$3}"'—— 提取负载均值,适合脚本调用 - 组合多个命令:
ssh user@host 'uptime && free -h | grep Mem:'
常见连不上时的快速定位点
如果 ssh 连接失败,按顺序排查这几项:
- 目标服务器是否开机且网络可达(ping 试试)
-
sshd服务是否运行:systemctl status sshd(登录控制台或通过其他方式执行) - 防火墙是否放行端口:
sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS/RHEL) -
/etc/ssh/sshd_config中是否禁用了密码登录或设置了错误监听地址(如绑定了127.0.0.1) - 本地
~/.ssh/known_hosts是否存有旧密钥冲突(提示 fingerprint changed 时可删对应行)


















