SSH 加固实操:从密码登录切到密钥登录后要检查的五件事

举报
yd_262967087 发表于 2026/10/25 16:44:46 2026/10/25
【摘要】 把服务器从密码登录改成密钥登录后,还有几个容易被忽略的配置项会留下风险:PAM 审计、登录告警、fail2ban 联动、以及密钥权限。这篇把检查清单列全。

为什么改完密钥登录还不够

很多人把 `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 这几块配合起来,才算真正加固完成。检查清单固化下来,以后每台新机器照做一遍即可。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。