文章

Go学习

SSH CA证书验证登录

CA: Certificate authority, 其实就是一对密钥

准备工作

安装 ssh :

1
apt update && apt install -y ssh

进入工作目录: /etc/ssh/ ,并依次执行以下内容(登录用户为 root):

CA证书准备

服务端CA

1
ssh-keygen -t ed25519 -C host_ca

执行后,会在/etc/ssh/下生成两个文件:host_cahost_ca.pub

客户端CA

1
ssh-keygen -t ed25519 -C user_ca

执行后,会在/etc/ssh下次两个文件:user_causer_ca.pub

在服务器配置客户端证书

/etc/ssh/sshd_config中添加以下内容:

TrustedUserCAKeys /etc/ssh/user_ca.pub

证书签发

为服务器签发

1
ssh-keygen -s host_ca -I *.example.com -h ssh_host_ed25519_key.pub
  • -I:身份字符串,随意填写
  • -h: 指定为服务器证书

ssh_host_ed25519_key.pub是在安装 ssh 服务后自动生成的证书,若没有,则请自行手动创建

执行后,会在/etc/ssh/下生成证书ssh_host_ed25519_key-cert.pub

配置证书

/etc/ssh/sshd_config中添加以下内容:

HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub

配置完成后,重启 ssh 服务:

1
service ssh restart

1
systemctl restart ssh

为客户端签发

客户端密钥生成

1
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

执行后,提示输入密钥密码,按需输入,不输入默认没有密码,最后会在~/.ssh/下生成两个文件id_ed25519id_ed25519.pub

  • id_ed25519为ssh默认的ed25519加密类型密钥的文件名,在进行ssh连接时默认会优先使用进行验证

签发密钥

1
ssh-keygen -s user_ca -I user -n root -V +52w ~/.ssh/id_ed25519.pub

执行后,将在~/.ssh/下生成id_ed25519-cert.pub证书

配置证书

~/.ssh/id_ed25519,~/.ssh/id_ed25519-cert.pub/etc/ssh/host_ca.pub一并拷贝到客户端主机目录~/.ssh

(可选, 如果证书文件命名使用的是默认可被识别的话,则不需要)然后在客户端主机~/.ssh/known_hosts(如果没有,则自行创建)中添加以下内容:

@cert-authority *.exampl.com {host_ca.pub文件内容}

参考链接

SSH 证书登录教程 - 阮一峰的网络日志

本文由作者按照 CC BY 4.0 进行授权