1.5. 通过保存在智能卡上的 SSH 密钥进行身份验证
您可以在智能卡上创建并存储 ECDSA 和 RSA 密钥,并通过 OpenSSH 客户端上的智能卡进行身份验证。智能卡验证替换了默认密码验证。
先决条件
-
在客户端中安装了
opensc软件包,pcscd服务正在运行。
流程
列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到
key.pub文件:$ ssh-keygen -D pkcs11: > keys.pub将公钥传送到远程服务器。使用
ssh-copy-id命令和上一步中创建的keys.pub文件:$ 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 #11 模块已注册到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 和智能卡中的密钥。