1、生成 SSH 密钥对(如果尚未生成)
bash
# 生成 RSA 4096 位密钥(推荐)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 生成 ED25519 密钥(更安全)
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示输入密钥保存路径(默认:~/.ssh/id_rsa 或 ~/.ssh/id_ed25519)
建议设置密钥密码(passphrase)增强安全性
2. 配置私钥权限
bash
chmod 600 ~/.ssh/id_rsa # 密钥文件权限
chmod 644 ~/.ssh/id_rsa.pub # 公钥文件权限
chmod 700 ~/.ssh # .ssh 目录权限
3. 将公钥上传到服务器
bash
# 方法一:使用 ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
# 方法二:手动追加公钥
cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
4. 配置 SSH 客户端(可选但推荐)
创建/编辑 ~/.ssh/config 文件:
bash
Host myserver # 自定义服务器别名
HostName server_ip # 服务器 IP 或域名
Port 22 # SSH 端口(默认 22)
User username # 登录用户名
IdentityFile ~/.ssh/id_rsa # 指定私钥路径
IdentitiesOnly yes # 强制使用指定密钥
- 连接服务器
bash
# 使用配置文件中的别名
ssh myserver
# 或直接指定密钥
ssh -i ~/.ssh/id_rsa user@server_ip
6. 高级配置技巧
使用 SSH 代理管理密钥密码
bash
# 启动 ssh-agent
eval "$(ssh-agent -s)"
# 添加私钥到代理(需输入密钥密码)
ssh-add ~/.ssh/id_rsa
# 查看已加载密钥
ssh-add -L
多密钥管理
bash
# ~/.ssh/config 示例
Host github.com
IdentityFile ~/.ssh/github_key
Host work-server
HostName 192.168.1.100
IdentityFile ~/.ssh/work_key
调试连接问题
bash
ssh -vT user@server_ip # 显示详细日志
ssh -vvvT user@server_ip # 最高级别调试信息
常见问题解决
| 问题现象 | 解决方案 |
|---|---|
| Permissions 0644 for 'id_rsa' are too open | 执行 chmod 600 ~/.ssh/id_rsa |
| No such file or directory | 确认密钥路径和文件名正确 |
| Permission denied (publickey) | 检查服务器 /var/log/auth.log 日志 |
| 密钥密码遗忘 | 需要重新生成密钥对并部署公钥 |
安全最佳实践
1、禁止 Root 直接登录(修改 /etc/ssh/sshd_config):
ini
PermitRootLogin no
PasswordAuthentication no
2、定期轮换密钥(建议每 6-12 个月)
3、使用硬件安全密钥(如 YubiKey)进行二次验证
4、监控服务器授权密钥文件:
bash
# 查看最近登录记录
last
# 查看认证日志
sudo tail -f /var/log/auth.log