SSH 密钥认证使用非对称加密技术,通过公钥和私钥对进行身份验证,比密码认证更安全、更便捷。
密钥对生成
使用 ssh-keygen 命令生成密钥对:
bash# 生成 RSA 密钥(默认) ssh-keygen -t rsa -b 4096 # 生成 ED25519 密钥(推荐,更安全高效) ssh-keygen -t ed25519 # 指定文件名和注释 ssh-keygen -t ed25519 -f ~/.ssh/my_key -C "user@example.com"
密钥对组成
- 私钥:必须保密,通常保存在
~/.ssh/id_rsa或~/.ssh/id_ed25519 - 公钥:可以公开,通常保存在
~/.ssh/id_rsa.pub或~/.ssh/id_ed25519.pub
配置步骤
- 生成密钥对:在客户端运行
ssh-keygen - 复制公钥到服务器:
bash
# 方法1:使用 ssh-copy-id ssh-copy-id user@hostname # 方法2:手动复制 cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" - 设置权限:
bash
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
优势
- 安全性更高:私钥不易被破解,无需传输密码
- 便捷性:无需每次输入密码,支持自动化脚本
- 支持多因素认证:可配合密码短语(passphrase)使用
- 细粒度控制:可在
authorized_keys中限制命令、IP 等
配置示例
在 ~/.ssh/authorized_keys 中可以设置限制:
bash# 限制只能执行特定命令 command="echo 'Hello'" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... # 限制来源 IP from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... # 禁用端口转发 no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...
最佳实践
- 使用 ED25519 或 RSA 4096 位密钥
- 为私钥设置强密码短语
- 定期轮换密钥
- 使用 SSH 代理(ssh-agent)管理密钥
- 禁用服务器的密码认证,仅使用密钥认证