SSH 密钥认证在安全性上显著优于密码登录,核心在于它消除了密码暴力破解的风险并避免了凭证在网络中的直接传输。生产环境建议优先采用密钥认证,但在关闭密码登录前需严格验证。
核心结论:密钥认证通过非对称加密机制,从根本上避免了密码被暴力破解和窃听的风险,是服务器远程管理的安全基线。
- 实施前:确认服务器支持公钥认证,检查现有业务脚本是否依赖密码登录。
- 关键点:生成强加密算法密钥对(如 ed25519),并在关闭密码认证前保留一个活跃会话。
- 验证:新开窗口测试密钥登录,确认无误后再修改服务端配置关闭密码认证。
安全性核心差异
密码登录与密钥认证在安全机制上存在本质区别,主要体现在认证方式和抗攻击能力上:
| 对比项 | 密码登录 | 密钥认证 |
|---|---|---|
| 凭证传输 | 加密传输,但存在被中间人攻击理论风险 | 私钥不传输,仅传输签名挑战 |
| 暴力破解 | 易受字典攻击和暴力破解 | 密钥空间极大,几乎不可暴力破解 |
| 凭证管理 | 依赖用户记忆,易重复使用 | 文件存储,可设置 passphrase 保护 |
| 自动化支持 | 需处理密码交互,安全性低 | 支持免密脚本,配合 agent 转发更安全 |
配置实施步骤
1. 生成密钥对:在本地终端执行生成命令,建议设置密码短语(passphrase)保护私钥文件。
# 生成密钥对(推荐 ed25519 算法)
ssh-keygen -t ed25519 -C "your_email@example.com"2. 部署公钥:使用 ssh-copy-id 工具或手动将公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中。
# 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip3. 修改配置:编辑服务器/etc/ssh/sshd_config,设置 PubkeyAuthentication yes 和 PasswordAuthentication no。
4. 重启服务:执行 systemctl restart sshd 使配置生效。
验证与故障排查
尝试使用 ssh user@ip 登录,若无需输入密码即进入系统,说明密钥认证生效。可通过 ssh -v user@ip 查看调试信息,确认认证方法为 publickey。同时检查/var/log/secure 或/var/log/auth.log 日志,确认无密码认证尝试记录。
常见权限问题:服务器端~/.ssh 目录权限应为 700,authorized_keys 文件权限应为 600,否则 SSH 服务可能拒绝使用密钥。
高风险操作警告
在关闭密码登录前,务必保留一个已连接的会话窗口。新建一个终端窗口测试密钥登录成功后,再关闭旧会话并修改配置。若配置错误导致无法远程登录,需通过控制台(VNC/物理机)恢复访问。
私钥一旦丢失无法恢复,务必备份并妥善保管。建议设置密码短语加密私钥文件,防止本地机器失陷导致私钥被盗用。
参考资料
- OpenSSH 官方文档:https://www.openssh.com/
- sshd_config 配置手册:https://man.openbsd.org/sshd_config
- SSH 密钥对生成指南:https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent