SSH 加固实操:从密码登录切到密钥登录后要检查的五件事
为什么改完密钥登录还不够
很多人把 `PasswordAuthentication no` 一改就以为加固完成。实际上还有几处需要一起检查,否则要么留后门,要么把自己锁在门外。
一、确认密钥登录真的生效,而不是被跳过
改完配置先别断开当前连接。新开一个窗口测试:
ssh -o PreferredAuthentications=publickey -i ~/.ssh/id_ed25519 user@host
`PreferredAuthentications` 强制只走密钥。如果这样能进,说明密钥通道是通的。
二、密钥文件权限必须收紧
OpenSSH 对私钥权限很敏感,权限过宽会直接拒绝使用:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions for 'id_ed25519' are too open.
正确权限是 `600`:
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
Windows 上更麻烦——NTFS 权限继承会让 OpenSSH 认为文件「对其他人可读」。需要在「属性 → 安全 → 高级」里禁用继承,只保留当前用户。这是跨平台操作时最常见的一个坑。
三、authorized_keys 的权限也要管
容易被忽略:`~/.ssh/authorized_keys` 如果权限过宽,sshd 会静默忽略它。
chmod 600 ~/.ssh/authorized_keys
chown user:user ~/.ssh/authorized_keys
四、PAM 审计和登录告警要一起看
如果服务器装了登录告警(通过 `/etc/pam.d/sshd` 的 `pam_exec`),要注意两点:
1. **告警脚本必须后台化**。pam_exec 是同步调用的,如果脚本里做网络请求(查 IP 归属地),会让每次登录卡 5-10 秒。用 `setsid` 丢到后台。
2. **必须有频率限制**。自动化脚本如果频繁 SSH,每次登录都发一封告警,几小时就能刷出上百封邮件。按来源 IP 加个时间窗抑制是必要的。
五、fail2ban 的联动
只禁密码登录后,fail2ban 仍有价值——它会拦掉大量扫描和暴力尝试,减少日志噪音。
配置要点:
[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600
注意 `maxretry` 别设太小,否则自己输错几次密码就被封。建议把自己的常用出口 IP 加进 `ignoreip`。
六、改完一定要验证
sshd -t # 语法检查
sshd -T | grep -i password # 确认密码登录已关
systemctl reload sshd # 重载(不要 restart,会断当前连接)
用 `reload` 而不是 `restart`,因为 restart 会断开你正在用的这个连接。
小结
密钥登录只是第一步。权限、PAM 审计、告警限流、fail2ban 这几块配合起来,才算真正加固完成。检查清单固化下来,以后每台新机器照做一遍即可。
- 点赞
- 收藏
- 关注作者
评论(0)