云服务器密钥对登录配置与安全加固实践

密钥对登录是云服务器安全加固的重要措施。本文提供从生成密钥到配置 SSH 的完整路径,并给出权限设置、禁用密码登录等关键步骤,助您快速提升安全性。

云服务器密钥对登录配置与安全加固实践
封面图:ZuCDN · ZuCDN 原创

云服务器密钥对登录是替代密码登录的一种更安全的认证方式,也是安全加固的基础操作之一。很多用户在配置时容易忽略权限设置或误改 SSH 配置导致无法登录。本文先给出一个清晰的判断路径,再逐步展开配置细节与加固要点,帮助你避开常见陷阱。

判断路径:先看场景,再定方案

在动手之前,先回答三个问题:你的云服务器是单机还是集群?是否已有现有用户?是否需要自动化?根据答案选择不同的密钥管理和配置方式:

  • 单机且手动管理:直接在服务器上生成密钥对,并将公钥添加到 ~/.ssh/authorized_keys。
  • 多实例或团队协作:使用集中式密钥管理或配置管理工具(如 Ansible)分发公钥,避免手工复制。
  • 自动化部署:将公钥嵌入镜像或使用 cloud-init 注入,实现首次启动即可用密钥登录。

明确场景后,再进入具体配置步骤。

密钥对的生成与导入

云服务器密钥对通常由云厂商生成,例如 AWS EC2 在启动实例时允许创建或导入密钥对。你也可以在本地生成 RSA 或 Ed25519 密钥,然后将公钥上传到服务器。生成命令如下:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

生成后,私钥保存在本地(如 ~/.ssh/id_rsa),公钥为 ~/.ssh/id_rsa.pub。将公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

注意:如果使用云厂商的控制台创建密钥对,私钥只会下载一次,务必妥善保管。

权限设置:最常见的失败原因

密钥登录失败往往是因为文件权限过于宽松。SSH 会严格检查以下权限:

  • ~/.ssh 目录权限应为 700(仅所有者可读写执行)
  • ~/.ssh/authorized_keys 文件权限应为 600
  • 私钥文件权限应为 600(本地)

如果权限不正确,SSH 会拒绝使用密钥。修正命令:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

配置 SSH 服务:启用密钥认证,禁用密码登录

编辑 /etc/ssh/sshd_config,确保以下配置:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

修改后重启 SSH 服务:

sudo systemctl restart sshd

在禁用密码登录前,务必先测试密钥登录是否可用,否则可能被锁在外面。建议在另一个终端保持会话,确认无问题后再重启服务。

安全加固:不止于密钥

密钥对只是第一步。根据 AWS 安全性支柱的建议,还需要考虑以下加固措施:

  • 使用强加密算法:优先选择 Ed25519 或 4096 位 RSA 密钥。
  • 定期轮换密钥:定期更换密钥对,并撤销旧密钥。
  • 限制 root 登录:禁止 root 直接 SSH,使用普通用户登录后 su 切换。
  • 配置防火墙和安全组:仅允许来自可信 IP 的 SSH 连接。
  • 使用 SSH 代理或跳板机:避免私钥在多个设备间复制。

此外,成本优化支柱提醒,合理配置实例规格和资源,避免过度配置,这也是安全与成本的平衡。

常见误区与失败条件

以下误区容易导致配置失败或安全漏洞:

  • 忽略权限设置:这是最常见的失败原因,务必检查。
  • 在禁用密码登录前未测试密钥:极易导致无法登录。
  • 将私钥泄露或上传到公开仓库:私钥应严格保密,可考虑使用 SSH agent。
  • 在 authorized_keys 中添加多余公钥:应定期审计。
  • 未设置 SELinux/AppArmor 策略:某些系统可能阻止 SSH 读取 authorized_keys,需调整策略。

总结

云服务器密钥对登录是安全加固的基石,但配置过程需要细心。先明确场景,再按步骤生成密钥、设置权限、修改 SSH 配置,最后测试并加固。记住:密钥登录不是终点,还需结合安全组、权限审计等综合措施,才能构建稳固的防线。

参考资料

延伸阅读