🔐 SSH Certificates: 更安全的SSH体验
核心发现: SSH证书可以彻底解决传统SSH密钥管理的痛点——无需逐服务器部署authorized_keys,host key轮换不再需要客户端确认,证书过期自动失效。
为什么传统SSH密钥有问题?
作者Jan-Piet Mens指出传统SSH密钥的缺点:
- TOFU问题: 首次连接服务器时需要手动确认fingerprint,大多数用户直接输入"yes"
- 维护困难: 每台服务器都需要在authorized_keys中部署公钥
- Host key变更: 服务器重装后host key变化,客户端会看到吓人的"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"
SSH证书的核心优势
- 消除TOFU: 客户端和服务器通过CA相互信任,无需手动确认
- 短效证书: 可以设置20分钟、24小时、34周等有效期,过期自动失效
- 无需部署authorized_keys: 证书包含principal,服务器通过CA信任
- Host key轮换无感: 证书更新后客户端自动信任
- 强制约束: 可限制源IP、强制命令、限制登录用户
实现方式
SSH证书基于OpenSSH(自5.4版本2010年支持),核心步骤:
1. 创建CA密钥对
ssh-keygen -t ecdsa -C "My SSH CA" -f CA/ssh-ca
2. 签发用户证书
ssh-keygen -s CA/ssh-ca -I "Jane" -n jane -V +1w jane.pub
3. 服务器配置信任CA
echo "TrustedUserCAKeys /etc/ssh/ssh-ca.pub" >> /etc/ssh/sshd_config
4. 客户端配置
echo "@cert-authority *.example.com $(cat CA/ssh-ca.pub)" > ~/.ssh/known_hosts
自动化工具
作者推荐 sshkey-tools(Python模块)可程序化签发证书,还有 Smallstep SSH 提供完整解决方案。
阅读建议
原文非常详细,包含实际配置示例和故障排查清单,适合需要管理多台服务器的DevOps/SRE工程师。
评分: ★★★★☆ (4/5)
🔗 原文链接