![使用带有多个证书的 SSH 公钥](https://linux22.com/image/1547164/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%E5%A4%9A%E4%B8%AA%E8%AF%81%E4%B9%A6%E7%9A%84%20SSH%20%E5%85%AC%E9%92%A5.png)
我使用 SSH 公钥连接到多个服务器。这些服务器使用 SSH CA 来管理授权用户。基本概念如下所述:https://www.digitalocean.com/community/tutorials/how-to-create-an-ssh-ca-to-validate-hosts-and-clients-with-ubuntu
因此,除了我常用的id_rsa
和id_rsa.pub
文件之外,我还有一个id_rsa-cert.pub
包含证书的文件。 所有这些都运行良好,我可以立即登录到配置为信任用于签署我的密钥的 CA 密钥的新机器。
但是,现在我的密钥已由不同的 CA 为另一组机器签名。现在的问题是,我如何告诉 SSH 此密钥现在有两个证书。从文档来看,似乎没有办法指定第二个证书文件:
ssh(1) will try to load certificate information from the filename
obtained by appending -cert.pub to the path of a specified IdentityFile.
简单地将新证书附加到此文件(就像您对 所做的那样authorized_keys
)也不起作用。在这种情况下,SSH 仍然只会识别第一个证书并忽略文件的其余部分。
有人知道如何告诉 SSH 我有此密钥的第二个证书吗?
答案1
由于您使用相同的私钥,并且ssh
将使用密钥名称来猜测证书名称,因此复制您的私钥和公钥:
cp ~.ssh/id_rsa id_rsa_group2
cp ~.ssh/id_rsa.pub id_rsa_group2.pub # probably not necessary
然后使证书名称匹配,应该是id_rsa_group2-cert.pub
测试一下:ssh -i .ssh/id_rsa_group2 ip_of_your_server
然后通过编辑使密钥选择自动进行~/.ssh/config
# For your first certificate:
Host a
User root
IdentityFile ~/.ssh/id_rsa
# For your new certificate
Host b
User root
IdentityFile ~/.ssh/id_rsa_group2
答案2
您可以CertificateFile
在命令行上使用配置选项来实现此目的:ssh -o CertificateFile=~/.ssh/second_certificate.pub host_b
或者将其设置到配置文件中(~/.ssh/config
)。
Host host_b
CertificateFile ~/.ssh/second_certificate.pub
由于两种情况下都使用相同的证书,因此它应该可以很好地与您的 配合使用ssh-agent
。