5.4. 通过保存在智能卡中的 SSH 密钥进行身份验证
您可以在智能卡中创建和存储 ECDSA 和 RSA 密钥,并由 OpenSSH 客户端中的智能卡进行身份验证。智能卡验证替换了默认密码验证。
先决条件
-
在客户端中安装了
opensc
软件包,pcscd
服务正在运行。
流程
列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到
key.pub
文件:$ ssh-keygen -D pkcs11: > keys.pub
将公钥传送到远程服务器。使用带有上一步中创建的 key
.pub
文件的ssh-copy-id
命令:$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
使用 ECDSA 密钥连接到 < ssh-server-example.com >。您只能使用 URI 的子集,它唯一引用您的密钥,例如:
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
因为 OpenSSH 使用
p11-kit-proxy
打包程序和 OpenSC PKCS modprobe 模块注册到p11-kit
工具,所以您可以简化上一个命令:$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
如果您跳过 PKCS #11 URI 的
id=
部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
可选:您可以使用
~/.ssh/config
文件中的同一 URI 字符串使配置持久:$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
ssh
客户端工具现在自动使用来自智能卡中的这个 URI 和密钥。
其他资源
-
系统上的
p11-kit(8)
,opensc.conf(5)
,pcscd(8)
,ssh(1)
, 和ssh-keygen(1)
手册页