通过证书颁发机构的 SSH

通过证书颁发机构的 SSH

我正在尝试使用签名证书来使用 SSH。我用来ssh -i keys/client.key连接到目标设备。如果我从该私钥(带有 )生成公钥ssh-keygen -y -f keys/client.key并将其放入 .ssh/authorized_keys 文件中,我就可以毫无问题地进行连接。

我想做的是使用 CA 来允许全部由该 CA 签名的密钥以作为该用户登录。我曾经 ssh-keygen -y -f keys/ca.key生成一个公钥并将其作为“cert-authority sh-rsa AAAB3N.....Z”放入authorized_keys中。我对不同网站的理解是它现在应该“有效”,但事实并非如此。在客户端,我只是收到“权限被拒绝(公钥)”。我的文件中没有其他列表authorized_keys。在服务器端,我没有收到任何错误消息,只收到客户端已断开连接的消息。

我错过了一些简单的事情吗?我怎样才能调试为什么它不起作用。

编辑#1

我使用 EasyRSA 生成私钥,这是通过 openssl 调用的一些 shell 脚本。我认为问题可能是生成了私钥,然后生成了 CSR,然后生成了签名证书。因此,我认为私钥没有以任何方式“签名”。

编辑#2

我尝试了ssh-keygen -s ca.key -I key client.key一下,得到“do_ca_sign:无法打开“client.key””。我用新生成的 RSA 密钥进行了尝试ssh-keygen,效果很好,所以 ca.key 似乎没问题。我认为 openssl 生成的私钥有一些它不喜欢的东西。

答案1

  1. 您的客户没有提供证书,因为它没有证书。您需要生成一个 ( ssh-keygen -s keys/ca.key -I jruser -n jruser keys/client.key.pub)。新证书 ( keys/client.key_cert.pub) 将自动被服务器拾取ssh并提交给服务器。
  2. 您的cert-authority线路authorized_keys缺少所需的principals分配(例如principals="jruser")。
  3. 要调试它,您可以ssh -v照常使用。当使用证书身份验证时,身份验证算法的名称中包含“cert”。
  4. 我建议使用TrustedUserCAKeys选项 (in sshd_config) 而不是编写cert-authority行,因为它是 ssh 用户证书的较旧且经过更充分测试的形式。

设置此功能(以及主机密钥证书)的一个很好的简明指南是如何使用 Ubuntu 创建 SSH CA 来验证主机和客户端

答案2

这里似乎发生了多个问题......

主要的困惑是你签名民众密钥而不是私钥。如果您尝试签署名为“id_rsa”的私钥,ssh-keygen 将忽略该私钥并在同一目录中使用“id_rsa.pub”。如果该公钥不存在,那么当您尝试签署不存在的文件时,它只会给您相同的错误消息。

另外,登录时,如果您使用名为“some.key”的私钥,则您签名的公钥需要名为“some.key-cert.pub”并且位于同一目录中,否则它将不会使用该公钥整个事情都行不通。

至于“主体”...如果您有它们(它们是可选的),它们会指定您实际可以以哪些用户身份登录。因此,如果您使用主体签署公钥,那么您只能使用它以这些用户身份登录。

相关内容