Cómo usar la autenticación en 2 pasos en un servidor SSH

La autenticación en 2 pasos es un método de identificación que debería utilizar todo el mundo. Es bastante seguro y fácil de usar. En este caso vamos a implementarlo en un servidor para cuando accedamos por SSH. El objetivo es mejorar la seguridad de nuestro sistema y hacer al atacante más complicada la tarea de romper el acceso. Para ello, utilizaré Google Authenticator, una herramienta open source que nos ayudará a cumplir nuestro objetivo. El funcionamiento es el siguiente: al entrar por SSH nos pedirá una clave que podremos comprobar desde nuestro teléfono y que cambia cada 30 segundos.
Vamos a entrar a nuestro servidor por SSH de la misma forma de siempre. A ser posible, con el usuario en el que implementaremos la autenticación en dos pasos. Yo he hecho el tutorial en máquina virtual, pero al fin y al cabo es un sistema Linux cualquiera. Una vez dentro, introducimos el siguiente comando:
$ sudo apt-get install libpam-google-authenticatorA continuación, con el usuario en el que queremos la autenticación en dos pasos, ejecutamos: $ google-authenticatorEsto nos dará las claves necesarias para nuestra cuenta. Las introduciremos en nuestro móvil con Android, iOS o ¿BlackBerry? ¿Sigue existiendo? Your new secret key is: 5CZRDTXJETGVAFHJ Your verification code is 834011 Your emergency scratch codes are: 26130193 11999201 23810415 96187470 11909397Ojo, guardad estas claves porque las de emergencia sirven en caso de pérdida o robo del teléfono. Cada clave de emergencia es de uso único, es decir, cada vez que utilicemos una se borrará de la lista de claves.

Tras esto, encontraremos en nuestro teléfono una clave que cambiará cada 30 segundos. Esta es la clave que tendremos que introducir cada vez que queramos entrar por SSH a nuestro servidor. Como cambia cada tan poco tiempo, si alguien nos la roba (por ejemplo viéndola en nuestro teléfono) tendrá 30 segundos para entrar y luego cambiará.

A pesar de tener el teléfono configurado para comenzar a usar este método de acceso, el servidor todavía no lo está. Para ello, tendremos que editar manualmente un par de archivos:
- Archivo /etc/pam.d/sshd:
Añadimos auth required pam_google_authenticator.so al comienzo del archivo.
- Archivo /etc/ssh/sshd_config:
Cambiamos ChallengeResponseAuthentication no por ChallengeResponseAuthentication yes . En caso de que no exista este parámetro en el archivo, lo creamos nosotros.
Finalmente, reiniciamos el servicio SSH para aplicar los cambios con el siguiente comando:
$ sudo service ssh restart
Para probar si funciona, vamos a cerrar la sesión y volver a entrar con el usuario al que hemos aplicado la autenticación en dos pasos. Si todo va bien, nos pedirá el código de verificación que aparece en nuestro teléfono:

Esto ha sido todo por hoy. Espero que os sirva para fortificar aún más vuestros servidores y máquinas.
¡Saludos!