En este post veremos cómo usar la yubikey que tenemos configurada con una llave GPG para iniciar sesión vía SSH.
Preparando el sistema
-
Preparar gpg-agent para que soporte ssh. Debemos crear el archivo
$HOME/.gnupg/gpg-agent.conf
con el siguiente contenido:enable-ssh-support pinentry-program /usr/bin/pinentry default-cache-ttl 600 default-cache-ttl-ssh 1800
-
Matamos el proceso
gpg-agent
actual:pkill gpg-agent
-
Levantamos un proceso
gpg-agent
en forma manual:gpg-agent --daemon SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh; export SSH_AUTH_SOCK;
-
Agregamos la línea de arriba
SSH_...
en el archivo$HOME/.bashrc
deberá quedar así:... # User specific aliases and functions SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh; export SSH_AUTH_SOCK; ...
-
Deberemos cerrar todas las terminales para que el cambio se refleje.
Obteniendo la llave pública para SSH
Ahora que gpg-agent tiene soporte para SSH debemos extraer la llave pública para SSH.
- Insertamos la yubikey
-
Ejecutamos el siguiente comando:
ssh-add -L ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFeOlAC7lKQrpuWcN20u0vd2UE3 r3eKF1Odj6cPY3dy2NCZWE4NiwqOe0sgckfeBYrGvCg57FI3SK905J7IeJWb6xYB6 kK+1YZVJIoijGzle785oXXMo5lPUfInaLtV+386tlNYlMEPESEH5TZjOIL7/mXG0B 984Ks/H6KqgYotNmg0Rl+vcvDIC+vkvMucVZY3gqXfRVaP5DJ0M5E9mWXeq4yx+Wy p56NlTFfD8uQVzMKmj187ipFE2LjCWAmWdVyVwc/d8U2THKooijC97ZwQZolPsd+m slJEJOACtNR/guUQQS+RTsJNqLskFpHX8r0pigVIMX+AGQMSc68+5jn cardno:000605213571
Si los pasos anteriores funcionan, al final de la llave verán el
cardno
. -
Exportamos la llave
ssh-add -L > export.pub
-
Copiamos la llave a la máquina destino (en este caso será localhost)
ssh-copy-id -f -i export.pub foo@localhost
Colocamos la contraseña e indicará que se copió una llave:
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'foo@localhost'" and check to make sure that only the key(s) you wanted were added
-
Validamos la conexión
ssh foo@localhost
No nos debería pedir la contraseña e ingresar directamente (este punto depende de la configuración del servidor)
Si al iniciar la conexión no tenemos la yubikey conectada y el servidor permite login con clave, podremos pasar a ese método en forma transparente.