SSH密钥认证概述

SSH密钥认证是一种比密码认证更安全、更便捷的身份验证方式。它使用公钥加密技术,通过密钥对(公钥和私钥)来验证用户身份。

密钥对的工作原理

公钥加密基础

  • 私钥:保存在客户端,必须严格保密
  • 公钥:可以公开,保存在服务器上
  • 加密过程:私钥加密,公钥解密(数字签名)
  • 验证过程:服务器使用公钥验证私钥的签名

认证流程

  1. 客户端向服务器发起连接请求
  2. 服务器发送随机挑战数据
  3. 客户端使用私钥对挑战数据进行签名
  4. 服务器使用公钥验证签名
  5. 验证成功则建立连接

生成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

密钥安全管理

密钥保护策略

  1. 使用强密码短语:为私钥设置复杂的密码短语
  2. 定期轮换密钥:建议每年更换一次密钥
  3. 备份密钥:安全地备份私钥到离线存储
  4. 限制密钥使用:为不同用途使用不同的密钥对

撤销和替换密钥

# 从服务器移除公钥
# 编辑 ~/.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

故障排除

常见问题

  1. 权限错误:检查文件和目录权限
  2. 密钥格式错误:确保使用正确的密钥格式
  3. Agent问题:重启ssh-agent或重新添加密钥
  4. 服务器配置:检查服务器的SSH配置

调试命令

# 详细连接信息
ssh -v username@hostname

# 更详细的调试信息
ssh -vvv username@hostname

# 测试密钥认证
ssh -o PreferredAuthentications=publickey username@hostname

小结

SSH密钥管理是SSH安全使用的核心。正确生成、部署和管理SSH密钥,不仅能提高安全性,还能大大提升工作效率。建议使用Ed25519密钥类型,并遵循最佳安全实践。


上一章节SSH基础概念
下一章节SSH连接配置