13.2. Uso de claves SSH almacenadas en una tarjeta inteligente
Red Hat Enterprise Linux 8 le permite utilizar claves RSA y ECDSA almacenadas en una tarjeta inteligente en clientes OpenSSH. Use este procedimiento para habilitar la autenticación usando una tarjeta inteligente en lugar de usar una contraseña.
Requisitos previos
-
En el lado del cliente, el paquete
opensc
está instalado y el serviciopcscd
está funcionando.
Procedimiento
Enumerar todas las claves proporcionadas por el módulo PKCS #11 de OpenSC incluyendo sus URIs PKCS #11 y guardar el resultado en el archivo keys.pub:
ssh-keygen -D pkcs11: > keys.pub ssh-keygen -D pkcs11:
$ ssh-keygen -D pkcs11: > keys.pub $ ssh-keygen -D pkcs11: ssh-rsa AAAAB3NzaC1yc2E...KKZMzcQZzx pkcs11:id=%02;object=SIGN%20pubkey;token=SSH%20key;manufacturer=piv_II?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so ecdsa-sha2-nistp256 AAA...J0hkYnnsM= pkcs11:id=%01;object=PIV%20AUTH%20pubkey;token=SSH%20key;manufacturer=piv_II?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para habilitar la autenticación mediante una tarjeta inteligente en un servidor remoto (example.com), transfiera la clave pública al servidor remoto. Utilice el comando
ssh-copy-id
con keys.pub creado en el paso anterior:ssh-copy-id -f -i keys.pub username@example.com
$ ssh-copy-id -f -i keys.pub username@example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para conectarse a example.com utilizando la clave ECDSA de la salida del comando
ssh-keygen -D
en el paso 1, puede utilizar sólo un subconjunto de la URI, que hace referencia a su clave de forma exclusiva, por ejemplo:ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" example.com
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" example.com Enter PIN for 'SSH key': [example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Puede utilizar la misma cadena URI en el archivo
~/.ssh/config
para que la configuración sea permanente:cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" ssh example.com Enter PIN for 'SSH key': [example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh example.com Enter PIN for 'SSH key': [example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dado que OpenSSH utiliza el wrapper
p11-kit-proxy
y el módulo PKCS #11 de OpenSC está registrado en PKCS#11 Kit, puede simplificar los comandos anteriores:ssh -i "pkcs11:id=%01" example.com
$ ssh -i "pkcs11:id=%01" example.com Enter PIN for 'SSH key': [example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Si se omite la parte id=
de un URI PKCS #11, OpenSSH carga todas las claves que están disponibles en el módulo proxy. Esto puede reducir la cantidad de escritura requerida:
ssh -i pkcs11: example.com
$ ssh -i pkcs11: example.com
Enter PIN for 'SSH key':
[example.com] $
Recursos adicionales
- Fedora 28: Mejor soporte para tarjetas inteligentes en OpenSSH
-
p11-kit(8)
página de manual -
ssh(1)
página de manual -
ssh-keygen(1)
página de manual -
opensc.conf(5)
página de manual -
pcscd(8)
página de manual