Doble factor de autentificación en SSH en Linux

Por defecto SSH es un servicio y protocolo muy seguro, aún así le podemos añadir una capa adicional, como el segunda factor de autentificación. Para esto, en esta entrada, vamos a utilizar el popular módulo Google Authenticator. Esto hará que cada vez que queramos acceder, debamos utilizar el código de verificación facilitado por dicho módulo. Para ello se utiliza un código de verificación de contraseña en tiempo real (TOTP), mediante el correspondiente programa instalado en nuestro celular o móvil.

El programa Google Authenticator, admite varios plataformas móviles, además este incluye el módulo PAM (Módulo de autentificación conectable) Los códigos de acceso de un solo uso se generan utilizando estándares abiertos creados por la llamada iniciativa para la autentificación abierta (OATH)

Para esta entrada, a modo de ejemplo, vamos a realizar la instalación sobre una distribución Rocky Linux, por lo que también serviría para otros sistemas similares como RHEL, Centos, Oracle Linux o Alma Linux. En cualquier caso, también es compatible en sistemas basadas en Debian u otros GNU/Linux

Como es habitual he utilizado, para elaborar esta entrada, un servidor VPS ubicado en mi proveedor de confianza Clouding.io

Doble factor de autentificación en SSH en Linux

Instalar Google Authenticator

Para instalar el programa junto con sus posibles dependencias, solo hemos de escribir:

dnf install pam-devel google-authenticator -y

Para muestra un botón:

Instalamos el programa

Una vez hecho esto, ya podemos continuar.

Generar los tokens

Simplemente ejecutamos el programa para generar los tokens:

google-authenticator

Simplemente escribimos «y«, esto es, sí, como respuesta a la mayoría de preguntas. Si algo sale mal, siempre podemos volver a empezar.

Nos aparecerá un código QR, que debemos escanear desde la aplicación en el móvil.

Agregamos un nombre e ingresamos la clave que nos aparecerá en el móvil.

Las entradas en la APP para los usuarios del host

La APP generará una contraseña de un solo uso, esto es, un código de verificación. Esta clave cambiará cada treinta segundos.

Después de esta parte obtendremos la «clave secreta» y los «códigos de emergencia». Es importante que estos códigos los apuntemos en un lugar seguro. Más adelante necesitaremos estos códigos para configurar el cliente en el celular o móvil.

Muetra de uso del programa. He ocultado las claves por motivos obvios.

Configurar SSH para utilizar Google Authenticator

Debemos editar el fichero de configuración de PAM, ubicado en «/etc/pam.d/sshd» y añadir estas líneas:

auth required pam_google_authenticator.so nullok
auth required pam_permit.so

Guardamos y salimos. En el siguiente paso editamos el fichero de configuración de SSH, ubicado en «/etc/ssh/sshd_config«. Buscamos la siguiente línea:

ChallengeResponseAuthentication no

La cambiamos por:

ChallengeResponseAuthentication yes

Guardamos y salimos.

Reiniciamos el servicio ssh:

systemctl restart sshd

Configuramos la aplicación Google Authenticator en el móvil

Para comprobar que todo ha ido bien, intentamos iniciar la sesión a través de SSH. Al utilizar la aplicación nos solicitará el código de verificación y una contraseña cada vez que intentamos iniciar sesión. Es importante recordar que solo tenemos treinta segundos para utilizar la contraseña.

Realizamos la prueba de acceso

Cabe decir que debemos ejecutar este procedimiento por cada usuario que queramos utilizar en el servidor.

Además, este sistema no funcionará si tenemos intercambio de llaves, ya que el paso del doble factor se lo saltará.

Y esto sería todo. Os recuerdo algunas entradas sobre SSH, que os pueden ser de interes:

Cómo usar Pam_Tally2 para gestionar los intentos fallidos de acceso en SSH

Qué es y cómo funciona ssh-agent

SSHFS: Montar sistemas de ficheros a través de SSH

SSH sin contraseña en Linux