带有证书和硬件令牌的 ssh

带有证书和硬件令牌的 ssh

我将 ssh 密钥存储在 yubikey 上,因此磁盘上没有任何私钥文件。当我也使用 OpenSSH 证书进行身份验证时,这给我带来了问题。如果我想使用 ssh-agent 携带证书,我需要以某种方式将其添加到代理中。

如果我有一个名为 priv 的私钥和一个名为 priv-cert.pub 的证书,则会自动完成此操作。但由于我没有文件,我无法找到将证书文件添加到代理的方法。

有谁知道如何做到这一点?

似乎没有对此支持,我发现了这个功能请求:https://bugzilla.mindrot.org/show_bug.cgi?id=2472

答案1

Yubikey 文档提到您可以将证书添加到ssh-agent此处https://developers.yubico.com/PIV/Guides/SSH_user_certificates.html

答案2

带有证书和硬件令牌的 ssh

这个问题可能已经很老了,但硬件身份验证现在变得越来越普遍。只要私钥由ssh-agent或类似的替代品提供gpg-agent,以下内容就应该使用不同的硬件密钥。

长话短说

只需提供您的公钥-i文件中的命令参数ssh

ssh -o CertificateFile=yubikey-cert.pub -i yubikey.pub [email protected]

一步步

本指南已经过 ssh 版本测试:

OpenSSH_7.9p1 Raspbian-10+deb10u2+rpt1, OpenSSL 1.1.1n  15 Mar 2022

假设私钥已在硬件令牌上创建。绝对没有办法从令牌中检索私钥并将其存储在文件中。该密钥只能由模拟ssh-agent并提供常用SSH_AUTH_SOCK环境变量的软件驱动程序访问。为了使用密钥,该驱动程序与硬件令牌进行通信,并且密钥的任何使用都发生在令牌的微控制器上。

获取公钥

需要令牌私钥的公钥。这密钥的哈希值可以通过以下方式看到:

ssh-add -l

输出:

4096 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cardno:000000000000 (RSA)

公钥可以检索并存储在文件中:

ssh-add -L > yubikey.pub

输出:

cat yubikey.pub
ssh-rsa AAA.........XXX== cardno:000000000000 

签署公钥

现在可以使用公钥进行签名证书颁发机构私钥,创建证书:

ssh-keygen -s ca.key -I "keyID" -n user -z 4711 yubikey.pub

这将生成证书文件yubikey-cert.pub。当然正确的密钥ID连续剧-z应提供(参数)。

使用证书

现在可以直接在命令中使用证书ssh。不依赖隐式机制,可以ssh在命令行上传递密钥和证书。这私钥当然必须在ssh-agent.

ssh -o CertificateFile=yubikey-cert.pub -i yubikey.pub [email protected]

为了排除故障,-v可以使用 ssh 开关来获取有关使用哪个密钥和证书的更多详细信息:

ssh -v -o CertificateFile=yubikey-cert.pub -i yubikey.pub [email protected]

输出(为简洁起见被截断):

...
debug1: Will attempt key: yubikey-cert.pub RSA-CERT SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx explicit
debug1: Will attempt key: yubikey.pub RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx explicit agent
debug1: Will attempt key: ...
...
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: yubikey-cert.pub RSA-CERT SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx explicit
debug1: Server accepts key: yubikey-cert.pub RSA-CERT SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx explicit
debug1: Authentication succeeded (publickey).
...

ssh 证书的完整教程超出了本答案的范围。更多信息可以在例如OpenhSSH 食谱

相关内容