“能 ping 通,却无法 SSH 登录”是实验环境里常见的现象。Ping 只说明 ICMP 可达,并不能证明 22 端口正在监听。下面按客户端、网络、服务端三个层次排查,适合在自己的虚拟机和授权服务器上练习。
先区分错误类型
ssh -vvv user@hostConnection timed out 通常先看网络路径或过滤规则;Connection refused 常见于目标端口没有服务监听;Permission denied 则进入认证阶段,应检查用户名、密钥和服务端认证日志。不要把三种错误都归结为“SSH 坏了”。
从客户端确认目标
核对 IP、端口和用户名:ssh -p 22 user@host。若使用主机名,先用 getent hosts host 检查解析结果。对于自有设备,可用 nc -vz host 22 快速检查 TCP 连接;没有 nc 时不必为此专门改动系统。
在服务端看监听和日志
systemctl status sshd --no-pager
ss -lntp | grep :22
journalctl -u sshd -b --no-pager -n 100有些发行版服务名是 ssh,请以 systemctl list-unit-files 的结果为准。若配置刚修改,先运行 sudo sshd -t 检查语法;若服务在监听但客户端超时,再核对防火墙和云平台安全组中实际使用的端口。不要为了测试直接关闭整个防火墙。
一份有效的复盘要写什么
记录命令、关键输出、最终原因和验证方式。例如“服务未监听 22 端口”比“重启后恢复”更有价值。远程修改 SSH 配置时始终保留当前会话,确认新的连接成功后再关闭,以免把自己锁在机器外。
按认证阶段继续定位
ssh -G 主机别名可查看最终生效的用户、端口、IdentityFile 等配置,输出分享前脱敏。认证失败时检查服务端日志、用户家目录与 .ssh 权限、公钥对应关系。只提供公钥给服务器,私钥留在客户端。主机指纹变化先核对是否重装或更换机器,不要直接关闭 StrictHostKeyChecking。本站端口以 SSH 别名和现场监听为准。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)