Si quieres ponerle un cerrojo más a tu acceso SSH, las contraseñas de un solo uso (OTP) son baratas de montar y difíciles de saltar. Una clave o una contraseña robada ya no basta por sí sola: el atacante necesita además el código que genera tu móvil cada 30 segundos.

Así es como lo monto yo, paso a paso.

Paso 1: instalar libpam-google-authenticator

Abre un terminal e instala el módulo de PAM:

$ sudo apt update && sudo apt install --assume-yes libpam-google-authenticator # variantes de Ubuntu y Debian

Paso 2: cambiar la configuración de SSHd

Abre el fichero de configuración de SSHd con el editor que uses:

$ sudo vi /etc/ssh/sshd_config

Busca la línea ChallengeResponseAuthentication, quítale la # del principio y ponla a yes:

ChallengeResponseAuthentication yes

Si solo quieres el método keyboard-interactive para un usuario concreto, añade estas líneas:

Match User username
    AuthenticationMethods keyboard-interactive

Nota: el método keyboard-interactive viene activado por defecto para todos los usuarios.

Paso 3: fijar los métodos de autenticación

Si necesitas dejar a algunos usuarios fuera del segundo factor OTP y que entren con otros métodos, ajusta la configuración de SSHd a lo que necesites. Por ejemplo:

auth    required      pam_unix.so     no_warn try_first_pass
auth    required      pam_google_authenticator.so

Paso 4: reiniciar el servicio SSH

Reinicia SSH para que los cambios se apliquen:

$ sudo systemctl restart ssh

Paso 5: configurar OTP para los usuarios

Abre el fichero de configuración de PAM para SSHd:

$ sudo vi /etc/pam.d/sshd

Añade estas dos líneas al final. La primera pide la contraseña; la segunda ejecuta el módulo de Google Authenticator justo después:

auth    required      pam_unix.so     no_warn try_first_pass
auth    required      pam_google_authenticator.so

Paso 6: generar las credenciales OTP

Ejecuta google-authenticator para configurar el usuario y obtener el código QR:

$ google-authenticator

Repite este paso con el resto de usuarios.

Contesta y cuando pregunte por los tokens basados en tiempo, escanea el QR con una app de autenticación y escribe el código que te dé la app.

Paso 7: actualizar la configuración y las políticas

Contesta y para actualizar el fichero /home/user/.google_authenticator, confirma que cada token basado en tiempo solo se pueda usar una vez y acepta las políticas de generación y uso de códigos.

Paso 8: activar la limitación de intentos (opcional)

Contesta y para activar la limitación de intentos. Pone un tope al número de intentos de login, y eso le quita casi toda la gracia a un ataque de fuerza bruta.

Ya está. Tu servidor SSH pide ahora un segundo factor en cada login.

Acuérdate de repetir el paso 6 con cada usuario que necesite acceso. Son unos minutos y cierran la puerta a la mayoría de los intentos de entrar con una contraseña robada.