SSH相关
Host Key
https://www.ssh.com/academy/ssh/host-key
public key authentication
https://www.ssh.com/academy/ssh/public-key-authentication
示例
1. 生成rsa key paires
ssh-keygen -f ./user_key -b 4096 -t rsa 2. 将公钥复制到服务器上并将内容加在~/.ssh/authorized_keys文件上
ssh-copy-id -i ./user_key.pub root@172.16.20.57 3. 使用私钥登录服务器
ssh -i ./user_key root@172.16.20.57
- ssh-keygen -R 远程目标服务器ip。(删除host key)删除本地known_hosts上关于远程ip的公钥printfinger
证书登录
CA
生成user_ca和user_ca.pub和host_ca和host_ca.pub
CA根据就是一对密钥,用user_ca来生成客户端证书,用host_ca来生成服务端证书
- 生成用户端CA,会生成user_ca和user_ca.pub密钥对
# 生成 CA 签发用户证书的密钥
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/user_ca -C user_ca
- 生成服务端CA,会生成host_ca和host_ca.pub密钥对
# 生成 CA 签发服务器证书的密钥
$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
服务端
生成ssh_host_rsa_key-cert.pub
- 服务端的/etc/ssh下面会有ssh_host_rsa_key,如果没有,可以通过以下脚本来生成
sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa
- 用host_ca来生成服务端证书
$ ssh-keygen -s host_ca -I mycert -h -n 172.16.20.48 -V +52w ssh_host_rsa_key.pub
指定用host_ca和ssh_host_rsa_key.pub来生成证书,会生成ssh_host_rsa_key-cert.pub
其中-I 是指定key id
服务端的-n指定Principals,服务端是指域名,或者不填
客户端
生成user_key-cert.pub
- .ssh目录下会有密钥对,比如user_key和user_key.pub,如果没有,自己生成一个
sudo ssh-keygen -f ~/.ssh/user_key -b 4096 -t rsa
用user_ca来生成客户端证书
ssh-keygen -s user_ca -I mycert -n chenhs -V +1d user_key.pub
指定用user_ca和user_key.pub来生成客户端证书user_key-cert.pub
其中-I是指定key id,-n 指定Principals,客户端是指要登录的用户名
服务端部署证书和CA公钥
- 将服务端证书ssh_host_rsa_key-cert.pub和用户端的CA公钥user_ca.pub(注意:是user_ca.pub)复制到服务端的/etc/ssh目录下
- 配置/etc/ssh/sshd_config,增下面配置,注意路径/etc/ssh要正确
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub TrustedUserCAKeys /etc/ssh/user_ca.pub
- 重启sshd. systemctl restart sshd
客户端部署证书和CA公钥
- 证书部署:将user_key-cert.pub文件复制到客户端的.ssh目录下,要和user_key同一个目录
- CA公钥配置:将服务端的CA公钥host_ca.pub(注意是host_ca.pub)粘贴到known_hosts里。如下
@cert-authority * ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
客户端证书登录
ssh -i 指定私钥 和目标资源ip