SSH公钥认证与私钥保护机制详解
字数 1235 2025-11-06 12:41:12
SSH公钥认证与私钥保护机制详解
1. 知识点描述
SSH公钥认证是一种基于非对称加密的身份验证方式,用于替代密码登录,提高安全性和便利性。其核心原理是客户端生成一对密钥(公钥和私钥),将公钥上传到服务器,登录时通过数字签名验证客户端身份。私钥的安全保护是该机制的关键,涉及文件加密、密码学硬件(如HSM)等措施。
2. 公钥认证的完整流程
步骤1:密钥对生成
- 客户端使用工具(如
ssh-keygen)生成非对称密钥对:- 私钥(如
id_rsa)保留在客户端,必须严格保密。 - 公钥(如
id_rsa.pub)可公开分发,需上传至服务器的~/.ssh/authorized_keys文件。
- 私钥(如
- 生成命令示例:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:指定算法为RSA;-b 4096:密钥长度4096位。
步骤2:公钥部署到服务器
- 将公钥内容追加到服务器用户的
authorized_keys文件中:ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip - 手动部署时需注意文件权限:
~/.ssh目录权限为700(drwx------)。authorized_keys文件权限为600(-rw-------)。
步骤3:认证流程
- 客户端发起SSH连接请求。
- 服务器生成随机挑战(Challenge),用客户端的公钥加密后发送给客户端。
- 客户端使用私钥解密挑战并生成签名,返回给服务器。
- 服务器用公钥验证签名,匹配则认证成功。
3. 私钥保护机制
(1)私钥文件加密(Passphrase保护)
- 生成密钥时可设置Passphrase,对私钥进行对称加密(如AES-128-CBC)。
- 使用时需输入Passphrase解密私钥,避免私钥泄露后直接被利用。
- 示例:
ssh-keygen -p -f ~/.ssh/id_rsa # 为现有私钥添加/修改Passphrase
(2)ssh-agent密钥代理
- 将解密后的私钥暂存于内存中,避免重复输入Passphrase:
eval "$(ssh-agent -s)" # 启动agent ssh-add ~/.ssh/id_rsa # 添加私钥(需输入一次Passphrase) - 安全风险:若攻击者获取服务器权限,可能通过SSH_AUTH_SOCK环境变量窃取内存中的私钥。
(3)硬件安全模块(HSM)或智能卡
- 私钥存储在硬件设备中,签名操作在设备内完成,私钥永不离开设备。
- 支持标准如PKCS#11或FIDO2(如YubiKey)。
4. 常见攻击与防御
- 私钥泄露:
- 风险:攻击者获取私钥文件后可冒充用户。
- 防御:使用Passphrase加密私钥,限制私钥文件权限(600)。
- 中间人攻击:
- 风险:首次连接时接受恶意服务器的公钥指纹。
- 防御:验证服务器指纹(通过可信渠道获取),或使用SSH证书认证替代公钥认证。
- ** authorized_keys篡改**:
- 风险:攻击者向文件添加恶意公钥。
- 防御:设置
authorized_keys为只读,并启用日志监控。
5. 进阶实践:证书认证
- 类似HTTPS证书,由CA签发客户端证书,服务器信任CA公钥即可验证所有客户端。
- 优势:无需在每台服务器部署公钥,适合大规模环境。
通过以上步骤,公钥认证在便利性与安全性之间取得平衡,而私钥保护是确保该机制不被攻破的核心。