2FA en servidores Linux: configura autenticación en dos pasos con SSH

La autenticación por clave SSH es segura, pero añadir un segundo factor (código TOTP de Google Authenticator) convierte el acceso a tus servidores en algo prácticamente irrompible: incluso si alguien roba tu clave privada, sin el código del móvil no puede entrar.

Instalar Google Authenticator PAM

sudo apt update && sudo apt install -y libpam-google-authenticator

Configurar el módulo TOTP para cada usuario

google-authenticator

El asistente hará varias preguntas:

  • Do you want authentication tokens to be time-based?y (TOTP)
  • Muestra un QR code: escanéalo con Google Authenticator, Authy o cualquier app TOTP
  • Muestra códigos de emergencia (guárdalos en un lugar seguro)
  • Do you want me to update your "~/.google_authenticator" file?y
  • Do you want to disallow multiple uses of the same authentication token?y
  • By default, tokens are good for 30 seconds...n (ventana estándar)
  • Do you want to enable rate-limiting?y

Configurar PAM para SSH

sudo nano /etc/pam.d/sshd

Añadir al principio del archivo:

auth required pam_google_authenticator.so

Para que el código sea además de la clave SSH (no en lugar de):

auth required pam_google_authenticator.so nullok

Configurar SSH para aceptar el segundo factor

sudo nano /etc/ssh/sshd_config

Cambiar o añadir:

PubkeyAuthentication yes

PasswordAuthentication no


AuthenticationMethods publickey,keyboard-interactive


ChallengeResponseAuthentication yes
KbdInteractiveAuthentication yes


UsePAM yes

sudo sshd -t

sudo systemctl restart sshd

Probar la configuración

Abre una nueva sesión de terminal sin cerrar la actual:

ssh usuario@servidor

Eximir ciertas cuentas del 2FA

Si quieres que algunas cuentas de servicio no usen 2FA:

sudo nano /etc/ssh/sshd_config
Match Group sshusers
    AuthenticationMethods publickey,keyboard-interactive


Match User deploy,ansible,backup
    AuthenticationMethods publickey

Alternativa: 2FA solo para acceso desde internet

Match Address 10.0.0.0/8,192.168.0.0/16
    AuthenticationMethods publickey


Match Address *
    AuthenticationMethods publickey,keyboard-interactive

Gestionar los códigos de emergencia

Los códigos de emergencia se guardan en ~/.google_authenticator. Copia de seguridad:

cat ~/.google_authenticator

gpg --symmetric --cipher-algo AES256 ~/.google_authenticator

Regenerar los códigos TOTP

google-authenticator --force

La combinación clave SSH + TOTP es actualmente el estándar de facto para acceso seguro a servidores. Incluso si alguien compromete tu red o intercepta tu clave privada, sin el segundo factor en tu dispositivo físico no puede autenticarse. El tiempo de configuración es de 10 minutos por servidor y el impacto en el flujo de trabajo es mínimo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *