SSH 密钥登录配置与安全加固实战
为什么要从密码登录切到密钥登录
公网上的 SSH 22 端口每天会被扫描上千次,密码登录面临持续的爆破风险。密钥登录把认证凭据换成一对非对称密钥,私钥不出本机,能直接消除密码猜测攻击面。下面是从生成密钥到加固 sshd 的完整流程,配置基于 OpenSSH 8.x。
生成密钥并上传公钥
优先使用 ed25519,比 RSA 2048 更短更安全。若因兼容旧系统必须用 RSA,长度不要低于 3072:
ssh-keygen -t ed25519 -a 100 -C "ops@example.com" -f ~/.ssh/id_ed25519
-a 100 指定 KDF 轮数,能提高私钥口令被离线破解的成本。上传公钥用 ssh-copy-id,它会自动处理远程权限:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@203.0.113.10
手工上传时要保证权限正确,否则 sshd 会拒绝读取:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chown -R user:user ~/.ssh
sshd_config 关键配置
先保留密码登录,确认密钥能登录后再关闭,避免把自己锁在门外。确认后修改 /etc/ssh/sshd_config:
PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin prohibit-password MaxAuthTries 3 LoginGraceTime 20 ClientAliveInterval 300 ClientAliveCountMax 2 AllowUsers deploy ops
PermitRootLogin prohibit-password 比 no 更稳妥,允许 root 用密钥应急登录而禁止密码。MaxAuthTries 3 压缩爆破尝试空间。改完必须校验语法再重载:
sshd -t && systemctl reload sshd
踩坑一:重载后仍然要求密码
现象是配置改完、服务重载成功,客户端依然弹密码框。sshd -T | grep passwordauthentication 却显示 no。原因是新版发行版把配置拆到了 /etc/ssh/sshd_config.d/*.conf,而主配置文件里的 Include 指令在文件顶部,后续默认值会覆盖前面的设置。排查命令:
grep -rn PasswordAuthentication /etc/ssh/
解决方式有两种:要么在 drop-in 文件里写配置(它优先于主文件),要么把主文件相关行移到 Include 之后。修改后用 sshd -T 看实际生效值,不要只看文件内容。
踩坑二:SELinux 导致 authorized_keys 读取失败
CentOS/RHEL 上出现 Authentication refused: bad ownership or modes for directory /home/user,权限明明已经是 700/600。根因是 ssh-copy-id 或 scp 上传后文件带上了错误的 SELinux 上下文(user_home_t 而非 ssh_home_t)。用 ls -Z ~/.ssh 确认,然后修复:
restorecon -Rv ~/.ssh
如果家目录被挪到 /data 这类非标准路径,还要打标签:semanage fcontext -a -t ssh_home_t "/data/user/.ssh(/.*)?",再执行 restorecon -Rv /data/user/.ssh。
进一步加固
- 禁用不用的认证方式:
ChallengeResponseAuthentication no、KbdInteractiveAuthentication no。 - 给 sshd 加访问控制,只放行可信网段:
ufw allow from 198.51.100.0/24 to any port 22。 - 私钥设口令,本地用
ssh-agent托管,避免每台机器明文私钥。 - 定期轮换:
grep -c ssh-ed25519 ~/.ssh/authorized_keys统计授权数,移除离职人员的公钥。 - 登录审计:
journalctl -u sshd --since today或lastb | head看失败尝试。
小结
核心路径是 ed25519 密钥、正确权限、sshd -t 校验后再 reload、确认密钥可用后再关闭密码。两个高频故障点分别是 drop-in 配置覆盖和 SELinux 上下文,前者用 sshd -T 核对生效值,后者用 restorecon 修复。
- 点赞
- 收藏
- 关注作者
评论(0)