基于证书的 SSH 身份验证仍然需要私钥文件

基于证书的 SSH 身份验证仍然需要私钥文件

我读过的大多数地方都应该能够仅使用用户证书登录。测试环回登录我遵循了以下教程:https://goteleport.com/blog/how-to-configure-ssh-certificate-based-authentication/并发现我误解了一个关键概念:

You'll need both [the signed user certificate] and the private key for logging in.

如果文件旁边ssh没有密钥,我就无法成功。在我包含的证书和个人用户中,因此我可以没有密码,明确使用该证书,因为我没有用于根设置的密钥注册。它使用在 中注册的证书。此外,没有或像我一样成功id_rsaid_rsa-cert.pubrootssh root@host/etc/ssh user@hostknown_hostsauthorized_keys/etc/ssh/sshd_config

TrustedUserCAKeys /etc/ssh/user-ca.pub
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Everywhere I have read that should be able to login just with the user certificate在 /etc/ssh/ssh_known_hosts` 中的证书颁发机构的公钥中:

@cert-authority * $(</etc/ssh/host-ca.pub)

我确信我id_rsa过去曾在没有在场的情况下登录过。仅凭文件就可以认证成功吗~/.ssh/id_rsa-cert.pub?如果是这样,本教程缺少什么?

答案1

答:你需要两个都基于证书的身份验证的密钥id_rsa和证书。id_rsa-cert.pub加密数据包始终需要密钥,证书向服务器提供第三方可信标识符。

登录时需要用户证书及其对应的私钥。OpenSSH 食谱

在这种情况下,证书允许您登录到您以前从未了解过的服务器(您不需要在远程主机的主目录文件上注册您的公钥authorized_keys),并且签名机构可以提供访问或访问的时间限制。你可以伪装成谁(Principal指令)。

答案2

使用 Unix/Linux 和 MacOS 上的 OpenSSH 客户端,您可以在将私钥文件加载到ssh-agent.如果您不使用,ssh-agent则必须保留私钥文件,因为证书文件仅包含签名的公钥。

Windows 上的 OpenSSH 客户端的行为有所不同,因为它ssh-agent是基于 Windows LSASS 缓存的特定重新实现。

这就是为什么我的EKCA客户端ssh-agent如果在 Windows 上运行,加载私钥文件后不会删除该文件。 (EKCA是我自己的用于颁发短期 OpenSSH 用户证书的最小解决方案。)

相关内容