我有两张智能卡:SCard1 和 SCard2。相同的密钥存储在它们两者上。
我使用最多的功能之一是 SSH 身份验证来访问多个服务器。但是在同一台计算机上使用了第一张智能卡(不是同时)之后,我无法使用第二张。
显示以下消息:
请取出当前卡并插入带有序列号的卡
[包含 SCard1 识别号的长 ID]
重现问题的步骤
让我们准备一个干净的环境。
$ export GNUPGHOME=/tmp/gnupg
$ mkdir /tmp/gnupg && chmod go-rwx /tmp/gnupg
$ curl [public key URL] | gpg --import
gpg: keybox '/tmp/gnupg/pubring.kbx' created
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6194 100 6194 0 0 2408 0 0:00:02 0:00:02 --:--:-- 2408
gpg: /tmp/gnupg/trustdb.gpg: trustdb created
gpg: key 3D5DDE26A0B55831: public key imported
gpg: Total number processed: 1
gpg: imported: 1
插入 SCard1
然后我插入我的 SCard 1。
$ ls /tmp/gnupg/private-keys-v1.d/
$ gpg --card-status
Reader ...........: Yubico Yubikey 4 OTP U2F CCID 00 00
Application ID ...: [SCard1 identification number]
blahblah
ssb> rsa2048/467299D324A21B24 created: 2017-01-10 expires: 2018-01-10
card-no: [SCard1 identification number]
ssb> rsa2048/11771A79F4B85B41 created: 2017-01-10 expires: 2018-01-10
card-no: [SCard1 identification number]
ssb> rsa2048/F31D41149A84B062 created: 2017-01-10 expires: 2018-01-10
card-no: [SCard1 identification number]
最后一个密钥用于身份验证。
$ ls /tmp/gnupg/private-keys-v1.d/
somehash1.key somehash2.key somehash.3.key
我猜这些哈希来自我存储在智能卡上的密钥。
$ gpg -K
/tmp/gnupg/pubring.kbx
sec# rsa4096 2017-01-10 [SC] [expires: 2019-01-10]
[primary key ]
ssb> rsa2048 2017-01-10 [S] [expires: 2018-01-10]
ssb> rsa2048 2017-01-10 [E] [expires: 2018-01-10]
ssb> rsa2048 2017-01-10 [A] [expires: 2018-01-10]
$ ssh example.com hostname
*** asked to enter pin
example.com
一切都按预期工作。
插入 SCard2
让我们拔下 SCard1 并插入 SCard2。
$ ssh example.com hostname
并显示以下消息:
请取出当前卡并插入带有序列号的卡
[包含 SCard1 识别号的长 ID]
请注意,当我先插入 SCard2,然后插入 SCard1 时,我得到了相同的结果。
解决方案的一部分
在 Internet 上进行的一些搜索使我了解到“密钥存根”存储在~/.gnupg/private-keys-v1.d/
. 删除整个目录解决了这个问题。也许只是删除其中一个.key
就可以了。
问题
是否可以在不删除任何文件的情况下同时使用这两个密钥?