← 中文资源

简体中文版本

审计并加固 sshd 配置

禁用密码与 root 登录、把算法收紧到当前最佳实践、用 ssh -Q 验证并在受控重启时保留逃生会话。

阅读英文原文

目标

每一个启用的认证方式都是攻击面,而面向互联网的 sshd 开着密码认证等于常驻邀请所有僵尸网络。加固是减法:只留密钥认证、禁 root 登录、不留密码后路、限制猜测轮数。纪律在流程:先读生效配置、校验语法、开着逃生会话重启、再用全新连接验证新规则,最后才关旧会话。

步骤要点

  1. 用 sshd -T 读出生效配置中的 PasswordAuthentication/PermitRootLogin/MaxAuthTries 等实际值,确认攻击面。
  2. 以 sshd_config.d/10-hardening.conf 落盘减法指令:禁密码、禁 root、仅公钥、MaxAuthTries 3、关转发。
  3. sshd -t 语法校验通过才允许 systemctl restart sshd。
  4. 重启期间保留一个已登录逃生会话,随后新连接实测:密码方式被拒、密钥方式可用。
  5. 复查 sshd -T 与 journalctl:Failed password 噪声消失,因为守护进程根本不再评估密码。

排错提示

重启后被锁死就靠逃生会话回滚配置再重启,这就是新连接验证前绝不关旧会话的原因;收紧算法后老客户端连不上,先盘点谁在连、升级掉队者再分阶段移除算法;自动化脚本依赖 root 就给它建受限专用账户并用 command= 固定命令,别为单个脚本重开 root。

适用边界

加固守护进程不等于修补主机,密钥卫生、补丁与网络暴露面仍属同一故事;激进算法限制会打断真正古老的客户端,应排期移除而非紧急一刀切。

代码示例

# /etc/ssh/sshd_config.d/10-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3