阿克森云登录 / 注册English/中文/cn繁体/tw

第 2 课 · SSH 加固:密钥、端口、fail2ban

上架第一小时 · L2 · 第 2 / 6 节 · 约 3 分钟

SSH 是服务器的正门,也是爆破攻击的靶心。这一课把正门换锁:密钥登录替代密码、fail2ban 自动挡扫描、配置收紧减少暴露面——全部操作可复制,每步带验证。完整版十二动作清单在安全栏目的《SSH 加固清单》,本课是教学版:讲清每个动作为什么。

SSH 加固三层示意

为什么密码登录必须关

密码认证的攻击成本是「字典 × 时间」:一台机器每小时能试数千次,弱密码以小时计沦陷,强密码也架不住全网盘库碰撞。密钥认证把问题换成了数学:ed25519 私钥 256 位,暴力破解在物理上不可行——不是「更难猜」,是「猜这条路不存在」。这是全部 SSH 加固里收益最大的一步。

实操五步(每步带验证)

# ① 本地生成密钥对(passphrase 别留空——私钥文件泄露时的第二道锁)
ssh-keygen -t ed25519 -C "admin@server1"
# ② 公钥上服务器(此时还能用密码登,正是最后窗口)
ssh-copy-id root@服务器IP
# ③ 验证密钥登录成功后,才关密码认证(顺序错了会把自己锁外面)
printf 'PasswordAuthentication no\nPubkeyAuthentication yes\nPermitRootLogin prohibit-password\nMaxAuthTries 3\nLoginGraceTime 20\n' | sudo tee /etc/ssh/sshd_config.d/99-hardening.conf
sudo sshd -t && sudo systemctl reload sshd    # -t 先验语法再 reload,防手滑断门
# ④ 新开终端验证:密钥能登、密码被拒
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@服务器IP   # 应失败
# ⑤ fail2ban 上岗(挡掉噪音扫描,日志清爽)
sudo apt install -y fail2ban
printf '[sshd]\nenabled = true\nmaxretry = 5\nfindtime = 600\nbantime = 3600\n' | sudo tee /etc/fail2ban/jail.d/sshd.local
sudo systemctl enable --now fail2ban && sudo fail2ban-client status sshd

改端口:说清它的真实价值

把 SSH 从 22 改成高位端口不是安全机制(扫描器全端口扫,几分钟就找到),它的真实价值是降噪:日志里的爆破尝试从每小时几百条降到个位数,真异常更容易被看见。改与不改都行,但要改就按纪律来:先 AllowTcpForwarding 确认新端口在防火墙放行 → 保持当前会话不断开 → 新端口验证登录成功 → 才关旧端口。顺序错了,你就体验「锁门外」了(恢复走机房 IPMI/VNC 通道——独服交付时确认它可用,就是这个用途)。

authorized_keys:你的门禁名单

~/.ssh/authorized_keys 一行一把公钥,就是「谁能进」的名单。三条纪律:①一人一行一注释(-C 参数写的注释就是干这个的——名单上每把钥匙都要能回答「这是谁的」);②人员变动当天删行(离职、外包结束、临时调试的钥匙——名单只增不减是通病);③私钥永不离开你的设备(要给别人访问权,让他自己生成密钥对交公钥给你——「把我的私钥发你」永远错误)。文件权限 600、目录 700(上一课的权限课在这里落地);名单文件本身进你的配置备份范围——机器重装时,门禁名单和系统一起从零恢复,而不是凭记忆重收公钥。

配置管理:drop-in 文件与语法预检

sshd 配置有两个纪律值得从第一天养成:①用 drop-in 不改主文件——/etc/ssh/sshd_config.d/ 目录下的 .conf 文件会覆盖主配置同名项(主文件 include 了这一目录),你的加固写进 99-hardening.conf,系统升级动主文件也不会冲掉你的设置,回滚就是删一个文件;②改完必预检——sudo sshd -t 只验语法不生效,零风险;语法过了再 reload,reload 不断现有会话。多人协作的机器再加一条:sshd 配置进版本库(或至少改前 cp 一份带日期的备份),「谁在什么时候改了正门的锁」必须可回答。

本节小结

  • 密钥登录是数学级防御,密码登录是字典级防御——关密码是收益最大的一步,顺序是「先验证密钥、后关密码」;
  • fail2ban 挡扫描噪音,改端口只为降噪不为安全;两者都不替代密钥;
  • authorized_keys 是门禁名单:一人一钥一注释,变动当天更新。