1. 介绍 / Intro
使用 openssh 提供的证书认证功能,生成 CA 证书(及私钥),将 CA 证书配置到每一台服务器内;当用户需要 ssh 登录的时候,CA 将为其签发临时 ssh 证书,用户可使用该凭证(证书+私钥)登录目标机器。
此外,证书平台签发的 ssh 证书可以设定有效期,限制登录到的目标机器用户名、主机名等。
相较于传统 ssh 跳板机/堡垒机的优势有:
- 认证过程离线 ,无需目标机器保持网络连接
- 部署简单 ,无需改造身份认证机制(pam、nsswitch 等),仅需增加几行 sshd 配置
2. 简单使用 / Simple Usage
2.1 生成 CA 证书
1 2 3 |
# Create CA Keys ==> ca.key, ca.pub ssh-keygen -f ca mv ca ca.key |
2.2 配置 sshd_config
1 |
echo "TrustedUserCAKeys /path/to/ca.pub" >> /etc/ssh/sshd_config |
2.3 签发用户证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Create user keys, or use user's old key ==> test.pub ssh-keygen -f test # Sign user keys ==> test-cert.pub # -V: Valid time range # -V +5m # valid in 5 min # -V -5m:+1d # valid from 5 min ago to one day later # -n: Principals # By default, client cert's principals limit the usernames to login with. # 'ssh-keygen -n user1,user2,...' # If the ssh server configed with "AuthorizedPrincipalsFile", the principals of client's cert must match server's. # For example, we require the hostname as principal: # 'echo "AuthorizedPrincipalsFile /etc/hostname" >> /etc/ssh/sshd_config' ssh-keygen -s ca.key -I 'For Test' -n [username] test.pub # user's private key ('test' here) will work as well. # Login test ssh -i test [username]@[hostname] |
2.4 其他说明
1) 查看证书信息:ssh-keygen -L -f test-cert.pub
2) 可以将 test-cert.pub 证书重命名为 test.pub,少了公钥文件,ssh 登录过程正常