本系列:SSH 安全加固实战(共 5 篇) ① 为什么你的 SSH 正在裸奔(本篇) → ② 先读懂配置文件再动手 → ③ 用密钥认证告别密码 → ④ 限制谁能登录、从哪里登录 → ⑤ 防暴力破解与安全审计

如果你有一台公网服务器,大概率会遇到这种时刻:apt upgrade 时刷屏一堆 Failed password for root from x.x.x.x,或者某天醒来发现机器被装了挖矿程序。SSH 是绝大多数 Linux 服务器唯一的远程入口,而默认配置下它就像把家门钥匙挂在门锁旁边。

这篇先不讲怎么做,讲清楚三件事:SSH 到底在保护什么、攻击者是怎么盯上你的、以及如何确认你已经处于暴露之中。想明白"为什么"再动手,后面的加固才不会变形。

SSH 在服务器上扮演什么角色

SSH(Secure Shell)是加密的远程登录协议。它做三件基本的事:

  1. 身份认证——确认"你是谁"(密码 / 密钥 / 证书等)
  2. 加密传输——保证你敲的每条命令、传的每个文件都不被窃听
  3. 安全通道——基于它还能转发端口、开隧道、传文件(scp / sftp

可以简单理解为:服务器只有一个门,这门就是 SSH,默认配置下任何人都能来试着撬一下。

攻击者是怎么盯上你的

大多数攻击者并不"认识"你。他们用自动扫描器在公网上地毯式扫 IP,发现有 22 端口开着就记录在案,然后挂着字典用常见账号(rootadminubuntu)和弱口令(123456passwordroot)一轮轮爆破。

几个容易忽略的真相:

  • 你的 IP 被扫描是常态,不是针对你个人。只要暴露在公网,通常几分钟内就会被扫描器发现。
  • SSH 默认允许密码登录,而弱密码在字典里几乎必中。
  • 默认允许 root 直接登录,等于给了攻击者一个"命中即最高权限"的目标账号。
  • 爆破是一夜之间就能完成的,日志里成千上万条 Failed password 就是证据。

先确认自己是否已经被盯上

动手加固之前,先看看暴露面。请在你自己的服务器上执行(非 root 用户需 sudo)。

# 查看当前所有 TCP 监听端口,确认哪些对外暴露
ss -tuln

# 查看已建立的 SSH 连接(外部 IP 来源)
ss -tnp | grep ':22 ' || true

再看认证日志里有没有爆破痕迹:

# Debian / Ubuntu(传统路径)
sudo grep 'Failed password' /var/log/auth.log | tail -20

# RHEL / CentOS / Rocky(有些版本也用 journalctl,见下)
sudo grep 'Failed password' /var/log/secure | tail -20

# 使用 systemd 的发行版通用写法(Ubuntu 新版本、RHEL 8+ 都支持)
sudo journalctl -u ssh -u sshd --since today | grep 'Failed password' | tail -20

提示框:发行版差异——Debian/Ubuntu 的服务名与日志常写 ssh,RHEL/CentOS/Rocky 常写 sshd,对应 /var/log/auth.log vs /var/log/secure。后面每篇我会同步标注这类差异,命令都给出双版本。

如果输出里出现大量不同 IP 的 Failed password,说明你的服务器早就被盯上了。别慌——这正是我们要解决的事。

一个值得先做的心理准备

SSH 加固要牢记一个原则:任何操作都必须给自己留一条能回来的路。锁死配置之前,务必保留一个已登录的终端会话作为"逃生门",并且先测试再断开。这个"正确改配置而不锁死自己"的方法,正是第 2 篇要手把手教你的。

本篇小结

  • SSH 是服务器唯一的远程门,默认配置对爆破几乎不设防。
  • 公网 IP 被自动扫描爆破是常态,弱密码 + root 直登是最大隐患。
  • ss 看端口、用认证日志看爆破记录,可以快速评估自己暴露程度。
  • 后续一切加固的前提是:先留逃生门,再动手

下一篇预告

你已经知道"门是裸的"。下一篇进入实操第一步:读懂 /etc/ssh/sshd_config——弄清每个关键指令含义、学会安全地修改并热重载而不锁死服务器,最后给出一份可直接套用的安全基线配置。

在动手前,先在自己服务器上跑一遍上面查看端口和日志的命令,把结果记录下来。我们下一篇见。