Usar Yubikey para SSH

Posted on jue 16 noviembre 2017

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

  1. 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
    
  2. Matamos el proceso gpg-agent actual:

    pkill gpg-agent
    
  3. 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;
    
  4. 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;
    ...
    
  5. 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.

  1. Insertamos la yubikey
  2. 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.

  3. Exportamos la llave

    ssh-add -L > export.pub
    
  4. 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
    
  5. 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.