题目:服务器突然 ssh 连不上了,可能是什么问题?
难度:low
标签:practice/debug, linux/sshd, difficulty/low
评分:⭐⭐⭐☆☆(3/5)
根据不同服务部署情况有不同的方案;
首先如果是云服务,那么登录对应服务商的服务后台,查看服务状态是否正常可用,看是否能通过云服务平台登录到机器,而不是通过ssh;
在本地检查网络链接,通过telnet 检查对应的ssh端口是否还可以访问,网络是否可达,默认是22,但是有些时候会修改,具体看服务方面开启的配置;
如果网络端口访问不通,而云服务平台的机器是正常的,那么可能中间的安全策略导致服务无法访问,或者本地网络到云服务的安全网络是不通的可以进行检查排查,是否未登录VPN等;
如果发现机器活着无法登录,那么排查密钥是否正确,是否有人调整了服务器配置,或者你的密钥出现了问题;
可以通过云服务器的管理平台登录进去检查具体信息;
优点:有真实运维视角,先分层再定位——云控制台 → 本地网络 → 安全策略 → 密钥/配置,并且明确用了控制台 VNC 作为带外通道,这是很多人漏掉的关键一步;还注意到 sshd 端口不一定是 22。
不足:① 少了"机器活着但登不上"的高频内因:sshd 进程挂了、磁盘写满、系统负载过高 fork 失败、iptables/firewalld 误封、fail2ban 拉黑、PAM/limits 配置、/etc/nologin;② 没有给出每层的判定证据(超时 vs 拒绝 vs 握手后断开,三者指向完全不同的原因);③ 没提日志这个最终定位手段(sshd 日志、/var/log/secure、dmesg OOM Killer)。
补充:telnet 22 的三种结果要分开说:Connection timeout = 网络/安全组层面;Connection refused = 机器可达但 sshd 没监听;能连上但认证失败/立即断开 = sshd 正常但认证、PAM、磁盘或 shell 配置有问题。云上还要注意安全组与主机内防火墙是两层,安全组放通不代表 firewalld 放通。
核心考点定位:考察「分层排查」的思维纪律——能不能把"连不上"拆成网络层、主机层、服务层、认证层,并为每层找到成本最低的观测手段。
知识点拆解:
-bash: fork: Cannot allocate memory)、/etc/nologin 存在、/etc/security/limits 或 PAM 配置错误、inode 耗尽。PermitRootLogin/AllowUsers 被改、fail2ban 或云 WAF 把来源 IP 拉黑。journalctl -u sshd、/var/log/secure、/var/log/auth.log、dmesg -T | grep -i oom,基本能一锤定音。按「底层原理 → 设计权衡 → 工程实践」递进排列。
考察方向:
延伸递进面试题:
ssh -vvv 看卡在哪个阶段;查 /var/log/secure、/etc/nologin、PAM 配置、用户 shell 是否被改成 /sbin/nologin、磁盘与 inode。【一句话结论】
面试官您好,SSH 连不上我会按"带外通道 → 网络 → 主机 → sshd → 认证"五层往下收,而不是直接重启。
【三点展开】
第一,先用云控制台或 VNC 登进去,这是唯一不依赖 sshd 的通道。能进去就说明机器活着,问题在 sshd 或网络策略;进不去再怀疑内核、硬件或宿主机。
第二,用 telnet 看返回值区分层次。timeout 是网络或安全组没放通;refused 是机器可达但 sshd 没监听,去看进程和端口;能连上却认证失败或秒断,就查密钥权限、/etc/nologin、PAM 和磁盘。
第三,主机层最常见的其实是资源问题:磁盘写满、inode 耗尽、内存不足被 OOM Killer 杀掉 sshd、负载过高 fork 失败。最后看 sshd 日志、/var/log/secure 和 dmesg,基本能定死原因。
【一句边界】
当然,如果是安全组被误改或 fail2ban 拉黑了来源 IP,机器本身完全正常,只在机器内部查是永远查不出来的——所以一定要先确认外部网络路径。