我在智能卡上使用 RSA 密钥和 OpenSSH 客户端。智能卡由带有密码键盘的智能卡读卡器读取。密钥受 PIN 码保护。
是否可以以某种方式缓存 PIN 码?我真的不喜欢每次使用 ssh 时都需要使用读卡器键盘写入 PIN... 这不仅很烦人,而且还让恕我直言,在其他人看来有太多可能性。
我的设置是 Debian/Devuan + OpenSC + .ssh/config 中的典型“PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so”。
我尝试在 opensc.conf、framework pkcs15 中添加以下几行,但没有效果:
use_pin_caching = true;
pin_cache_counter = 64;
pin_cache_ignore_user_consent = true;
我在OpenBSD上使用相同的配置,结果是一样的。
我使用 Aventra MyEID 4.5.5 作为智能卡。由于我试图在生产中使用该技术之前尽可能多地学习,因此我可以尝试不同的读卡器:Cherry、Gemalto(现为 Thales)和 SCM/Identiv。
答案1
ssh-agent
将在一段时间内缓存 PIV 凭证(通过-t
ssh-agent 或 ssh-add)。
由于您的 ssh 客户端已经能够成功使用您的智能卡/piv 进行身份验证,因此这些ssh-add
命令可能会为您将其缓存在 ssh-agent 中:
ssh-add -s <path to shared library pkcs11> #add keys provided by pkcs11
# for me, /usr/lib/ssh-keychain.dylib
当缓存的身份过期时,ssh错误为:
sign_and_send_pubkey: signing failed for RSA "
<id>
" from agent: agent refused operation
然后,您可以使用以下命令清除旧的缓存条目:
ssh-add -e <path to shared library pkcs11> #removed keys provided by pkcs11
# again, for me, /usr/lib/ssh-keychain.dylib
ssh-add -D #delete all identities from agent (may not be needed, ymmv)
请参阅man ssh-add
参考资料 获取更多详细信息,但截至 2024 年 2 月,除了 -s 和 -e 之外没有任何其他 PIV 特定选项。
需要注意的是,您正在使用 pkcs15;我不确定与ssh-add
/ 的互操作性ssh-agent
,但是在您传递正确的库时,这可能就是所需要的。