SSH密钥认证概述
SSH密钥认证是一种比密码认证更安全、更便捷的身份验证方式。它使用公钥加密技术,通过密钥对(公钥和私钥)来验证用户身份。
密钥对的工作原理
公钥加密基础
- 私钥:保存在客户端,必须严格保密
- 公钥:可以公开,保存在服务器上
- 加密过程:私钥加密,公钥解密(数字签名)
- 验证过程:服务器使用公钥验证私钥的签名
认证流程
- 客户端向服务器发起连接请求
- 服务器发送随机挑战数据
- 客户端使用私钥对挑战数据进行签名
- 服务器使用公钥验证签名
- 验证成功则建立连接
生成SSH密钥对
使用ssh-keygen生成密钥
# 生成默认RSA密钥对(2048位)
ssh-keygen -t rsa
# 生成4096位RSA密钥对
ssh-keygen -t rsa -b 4096
# 生成Ed25519密钥对(推荐)
ssh-keygen -t ed25519
# 指定密钥文件名和注释
ssh-keygen -t ed25519 -f ~/.ssh/my_key -C "your_email@example.com"
密钥类型选择
密钥类型 | 安全性 | 性能 | 兼容性 | 推荐度 |
---|---|---|---|---|
RSA 2048 | 中等 | 中等 | 最佳 | ⭐⭐⭐ |
RSA 4096 | 高 | 较慢 | 很好 | ⭐⭐⭐⭐ |
Ed25519 | 最高 | 最快 | 较新 | ⭐⭐⭐⭐⭐ |
ECDSA | 高 | 快 | 好 | ⭐⭐⭐⭐ |
密钥管理最佳实践
密钥文件组织
~/.ssh/
├── id_ed25519 # 默认私钥
├── id_ed25519.pub # 默认公钥
├── work_key # 工作用私钥
├── work_key.pub # 工作用公钥
├── personal_key # 个人用私钥
├── personal_key.pub # 个人用公钥
├── config # SSH配置文件
├── known_hosts # 已知主机指纹
└── authorized_keys # 授权的公钥(服务器端)
设置正确的文件权限
# 设置.ssh目录权限
chmod 700 ~/.ssh
# 设置私钥权限
chmod 600 ~/.ssh/id_ed25519
# 设置公钥权限
chmod 644 ~/.ssh/id_ed25519.pub
# 设置配置文件权限
chmod 600 ~/.ssh/config
部署公钥到服务器
使用ssh-copy-id(推荐)
# 复制默认公钥
ssh-copy-id username@hostname
# 复制指定公钥
ssh-copy-id -i ~/.ssh/work_key.pub username@hostname
# 指定端口
ssh-copy-id -p 2222 username@hostname
手动复制公钥
# 方法1:使用cat和重定向
cat ~/.ssh/id_ed25519.pub | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 方法2:使用scp
scp ~/.ssh/id_ed25519.pub username@hostname:~/
ssh username@hostname "mkdir -p ~/.ssh && cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys && rm ~/id_ed25519.pub"
密钥代理(SSH Agent)
启动SSH Agent
# 启动ssh-agent
eval "$(ssh-agent -s)"
# 添加私钥到agent
ssh-add ~/.ssh/id_ed25519
# 添加所有默认密钥
ssh-add
# 查看已加载的密钥
ssh-add -l
Agent转发
# 启用agent转发
ssh -A username@hostname
# 在SSH配置中启用
# ~/.ssh/config
Host *
ForwardAgent yes
密钥安全管理
密钥保护策略
- 使用强密码短语:为私钥设置复杂的密码短语
- 定期轮换密钥:建议每年更换一次密钥
- 备份密钥:安全地备份私钥到离线存储
- 限制密钥使用:为不同用途使用不同的密钥对
撤销和替换密钥
# 从服务器移除公钥
# 编辑 ~/.ssh/authorized_keys 文件,删除对应的公钥行
# 生成新密钥对
ssh-keygen -t ed25519 -f ~/.ssh/new_key
# 部署新公钥
ssh-copy-id -i ~/.ssh/new_key.pub username@hostname
高级密钥功能
密钥指纹验证
# 查看公钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 查看私钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519
# 以不同格式显示指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E md5
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E sha256
证书认证
# 生成用户证书
ssh-keygen -s ca_key -I user_id -n username -V +1w ~/.ssh/id_ed25519.pub
# 查看证书信息
ssh-keygen -Lf ~/.ssh/id_ed25519-cert.pub
故障排除
常见问题
- 权限错误:检查文件和目录权限
- 密钥格式错误:确保使用正确的密钥格式
- Agent问题:重启ssh-agent或重新添加密钥
- 服务器配置:检查服务器的SSH配置
调试命令
# 详细连接信息
ssh -v username@hostname
# 更详细的调试信息
ssh -vvv username@hostname
# 测试密钥认证
ssh -o PreferredAuthentications=publickey username@hostname
小结
SSH密钥管理是SSH安全使用的核心。正确生成、部署和管理SSH密钥,不仅能提高安全性,还能大大提升工作效率。建议使用Ed25519密钥类型,并遵循最佳安全实践。