OpenSSH私钥必须通过HSM硬件生成并全程不出设备,标记为不可导出(CKA_EXTRACTABLE=false),客户端用PKCS#11直连签名,服务端禁用密码、强制公钥认证并审计日志,轮换与吊销均在HSM内完成。

核心业务中,OpenSSH私钥一旦泄露,攻击者即可无凭证登录关键服务器,造成横向渗透、数据窃取甚至勒索风险。用HSM加固不是“锦上添花”,而是把私钥从可复制的文件变成不可导出的硬件能力。
私钥必须在HSM内部生成,不落地
传统方式(ssh-keygen -t rsa -b 4096)生成的私钥会以明文或PEM加密形式落盘,存在被备份、误传、内存dump提取的风险。HSM方案要求密钥对全程不出设备:
- 使用支持PKCS#11的工具(如OpenSC、Yubico PIV Tool或厂商SDK)调用HSM的真随机数发生器(TRNG)生成RSA 4096或EC P-384密钥对;
- 私钥对象标记为
CKA_PRIVATE = true且CKA_EXTRACTABLE = false,确保无法通过任何接口导出; - 公钥可安全导出并写入
~/.ssh/authorized_keys,但私钥永远只存在于HSM芯片内。
OpenSSH客户端配置为直连HSM引擎
OpenSSH 8.9+原生支持PKCS#11,无需第三方代理。配置步骤简洁明确:
- 确认系统已安装对应HSM的PKCS#11库(如
libykcs11.so或libCryptoki2.so); - 编辑
~/.ssh/config,为关键主机指定密钥路径:Host prod-db.example.com<br> IdentityAgent /dev/null<br> IdentityFile "pkcs11:token=ProdHSM;id=%01;object=ssh_admin_key"
; - 首次连接时,OpenSSH自动加载PKCS#11模块,签名操作由HSM完成,私钥不进入进程内存。
服务端禁用密码登录,强制HSM签名认证
仅保护客户端私钥不够,服务端需配合验证逻辑,杜绝降级攻击:
- 在
/etc/ssh/sshd_config中设置:PubkeyAuthentication yes、PasswordAuthentication no、AuthenticationMethods publickey; - 若需更高保障,可配合SSH证书机制:由HSM签发短期有效的SSH用户证书(
ssh-keygen -s ca_key -I user@prod -n user -V +1h),CA私钥也存于HSM; - 所有登录行为强制记录审计日志,并关联HSM操作日志(如签名请求时间、token ID、操作结果),形成不可抵赖证据链。
运维与轮换必须遵循HSM生命周期管理
私钥不是“一配了之”,HSM让轮换更安全、更可控:
- 密钥轮换无需重传私钥——新密钥在HSM内生成后,只需更新公钥或证书,旧密钥可在HSM中立即标记为
CKA_DESTROY并擦除; - 员工离职或权限变更时,直接在HSM管理界面吊销其token访问策略,无需逐台服务器清理私钥文件;
- 建议启用HSM的物理防护日志(如电压异常、开盖检测),一旦触发即自动锁定并告警,防止物理提权窃取。
把OpenSSH私钥放进HSM,本质是把“保管钥匙”升级为“只租用锁匠服务”。每次登录都是HSM现场签名,而不是把钥匙借给你用——这才是核心业务该有的密钥控制粒度。

















