Configuración de la autenticación de dos factores (2FA) de SSH en el servidor Ubuntu 22.04/20.04

Esta guía muestra cómo configurar la autenticación de dos factores SSH en un servidor Ubuntu utilizando el popular Google Authenticator. Esto mejorará en gran medida la seguridad del servicio SSH en su servidor Ubuntu.

Cómo funciona la autenticación de dos factores

Normalmente, sólo necesita introducir una contraseña o utilizar una clave SSH para iniciar sesión en su servidor Ubuntu de forma remota. Con la autenticación de dos factores (2FA), es necesario introducir dos datos para iniciar la sesión. Así que también tienes que introducir una contraseña de un solo uso basada en el tiempo para iniciar sesión en tu servidor SSH. Esta contraseña de un solo uso se introduce con la tecla Algoritmo TOTP que es un estándar del IETF. Hoy en día, muchos sitios web y servicios (Facebook, Google, Twitter, etc.) ofrecen 2FA para que los usuarios protejan sus cuentas, y es una buena idea habilitar 2FA en su servidor SSH también.

Este tutorial muestra cómo habilitar

  • Autenticación con contraseña con 2FA
  • Autenticación de clave pública con 2FA

NotaEl software de servidor de código abierto que utilizaremos en este artículo se llama libpam-google-authenticatorque se instala desde el repositorio estándar de Ubuntu. La empresa Google no participa de ninguna manera en el proceso de autenticación. El software del servidor y la aplicación móvil no requieren acceso a la red.

Paso 1: Instalar y configurar Google Authenticator en el servidor de Ubuntu

Inicie sesión en su servidor de Ubuntu y ejecute el siguiente comando para instalar Google Authenticator desde el repositorio de paquetes de Ubuntu por defecto.

sudo apt install -y libpam-google-authenticator

A continuación, ejecute el comando google-authenticator para crear una nueva clave secreta en su directorio personal.

google-authenticator

En respuesta a la pregunta «¿Quiere que los tokens de autentificación estén basados en el tiempo?» Respuesta y.

ssh google authenticatorEntonces verás un código QR que puedes escanear con la aplicación TOTP de tu teléfono. Hay dos aplicaciones que recomiendo:

  • Autenticador de Google es la aplicación móvil más popular de TOTP. Puedes instalarla en tu teléfono móvil a través de Google Play o la App Store de Apple.
  • El Autenticador de Google La aplicación móvil no es de código abierto. Si no confías en Google, puedes utilizar el FreeOTPuna aplicación móvil TOTP de código abierto desarrollada por Red Hat.

Escanee el código QR con Google Authenticator o FreeOTP en su teléfono móvil. Tenga en cuenta que debe ampliar la ventana del terminal para escanear el código QR por completo.

ssh autenticación de dos factores ubuntuEl código QR representa la clave secreta que sólo conocen tu servidor SSH y tu aplicación móvil TOTP. Una vez escaneado el código QR, verás una contraseña de seis dígitos de un solo uso en tu teléfono. Por defecto, cambia cada 30 segundos. Tendrá que introducir esta contraseña de un solo uso más tarde para iniciar sesión en el servidor de Ubuntu a través de SSH.

google authenticator totpEn la ventana del terminal verás la clave secreta, el código de verificación y el código de emergencia para rascar. Se recomienda guardar esta información en un lugar seguro para su uso posterior.

A continuación, puede introducir lo siguiente y para responder a las preguntas restantes. Esto actualizará el archivo de configuración de Google Authenticator, inhabilitará los usos múltiples del mismo token de autenticación, aumentará la ventana de tiempo y habilitará la limitación de la tasa para protegerla de los intentos de inicio de sesión por fuerza bruta.

ssh 2fa ubuntu

Paso 2: Configurar el demonio SSH para utilizar Google Authenticator

  • Autenticación con contraseña con 2FA
  • Autenticación de clave pública con 2FA

Autenticación con contraseña con 2FA

Si no utiliza una clave SSH, siga las siguientes instrucciones.

Abra el archivo de configuración del servidor SSH.

sudo nano /etc/ssh/sshd_config

Busque los dos parámetros siguientes en el archivo y asegúrese de que ambos están configurados como .

UsePAM yes

ChallengeResponseAuthentication yes

Nota: On Ubuntu 22.04debe utilizar las dos líneas siguientes en su lugar. ChallengeResponseAuthentication se cambia a KbdInteractiveAuthentication.

UsePAM yes 

KbdInteractiveAuthentication yes

PAM significa módulo de autenticación conectable. Proporciona una manera fácil de integrar diferentes métodos de autenticación en su sistema Linux. Para habilitar el Autenticador de Google con SSH, se debe habilitar la autenticación PAM y la autenticación de respuesta a un reto.

Si quieres permitir que el usuario root utilice 2FA, puedes encontrar el PermitRootLogin y establecer su valor en yes. No puede ser PermitRootLogin no o PermitRootLogin prohibit-password.

PermitRootLogin yes

Guarde y cierre el archivo. A continuación, edite el archivo de reglas PAM para el demonio SSH.

sudo nano /etc/pam.d/sshd

Al principio de este archivo verá la siguiente línea, que habilita la autenticación por contraseña cuando ChallengeResponseAuthentication se ajusta a yes.

@include common-auth

Para habilitar 2FA en SSH, añada las siguientes dos líneas.

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so
Habilitar 2FA en SSH en UbuntuGuarde y cierre el archivo. A continuación, reinicie el demonio SSH para que el cambio surta efecto.

sudo systemctl restart ssh

A partir de ahora, el demonio SSH le pedirá que introduzca la contraseña del usuario y un código de verificación (la contraseña de un solo uso generada por Google Authenticator). La siguiente captura de pantalla muestra una sesión de inicio de sesión SSH desde una caja CentOS a un servidor Ubuntu 20.04.

ssh-password-and-verification-code-ubuntu-server

Autenticación con clave pública y 2FA

Si se conecta al servidor SSH con una clave SSH, siga las instrucciones que se indican a continuación.

Abra el archivo de configuración del servidor SSH.

sudo nano /etc/ssh/sshd_config

Busque los dos parámetros siguientes en el archivo y asegúrese de que ambos están configurados como .

UsePAM yes

ChallengeResponseAuthentication yes

Nota: On Ubuntu 22.04debe utilizar las dos líneas siguientes. ChallengeResponseAuthentication se cambia a KbdInteractiveAuthentication.

UsePAM yes 

KbdInteractiveAuthentication yes

PAM significa módulo de autenticación conectable. Proporciona una manera fácil de integrar diferentes métodos de autenticación en su sistema Linux. Para habilitar el Autenticador de Google con SSH, se debe habilitar la autenticación PAM y la autenticación de respuesta a un reto.

Si quieres permitir que el usuario root utilice 2FA, puedes encontrar el PermitRootLogin y establecer su valor en yes. No puede ser PermitRootLogin no o PermitRootLogin prohibit-password.

PermitRootLogin yes

A continuación, añada la siguiente línea al final de este archivo. Esto indica al demonio SSH que el usuario debe pasar tanto la autenticación de clave pública como la autenticación de respuesta a un reto.

AuthenticationMethods publickey,keyboard-interactive

Guarde y cierre el archivo. A continuación, edite el archivo de reglas PAM para el demonio SSH.

sudo nano /etc/pam.d/sshd

Al principio de este archivo verá la siguiente línea, que activa la autentificación por contraseña cuando ChallengeResponseAuthentication se ajusta a yes. Necesitamos comentar esta línea porque usaremos la clave SSH en lugar de la contraseña.

@include common-auth

Para habilitar 2FA en SSH, añada las siguientes dos líneas.

# two-factor authentication via Google Authenticator
auth   required   pam_google_authenticator.so
Autenticación de clave pública con servidor ubuntu 2FAGuarde y cierre el archivo. A continuación, reinicie el demonio SSH para que el cambio surta efecto.

sudo systemctl restart ssh

A partir de ahora, debes utilizar la clave SSH y el código de verificación de Google Authenticator para iniciar sesión.

Notas

  • Todos los usuarios de su servidor Ubuntu deben tener el programa google-authenticator y escanear el código QR para utilizar la autenticación de dos factores. Si el usuario no se ha configurado e intenta conectarse, aparecerá el mensaje de error «Autorización denegada (teclado-interactivo)«.
  • El código de emergencia para rascarse es su código de reserva. Si pierdes tu teléfono, puedes introducir uno de los cinco códigos de emergencia para rascar en lugar de una contraseña única para completar la verificación en dos pasos. Estos códigos son de uso único.
  • Si desea cambiar la clave secreta, simplemente inicie sesión en su servidor y realice google-authenticator para cambiar el ~/.google_authenticator para actualizarlo.
  • Dado que la contraseña de un solo uso se calcula utilizando la clave secreta compartida y la hora actual, es una buena idea activar la sincronización de la hora NTP en su servidor de Ubuntu para obtener la hora exacta, aunque hasta ahora hemos permitido una diferencia de tiempo de 4 minutos entre el servidor de Ubuntu y la aplicación móvil. Tu servidor de Ubuntu y la aplicación móvil TOTP pueden utilizar diferentes zonas horarias.

Desactivar la autenticación de dos factores de SSH

Edite el archivo de reglas PAM para el demonio SSH.

sudo nano /etc/pam.d/sshd

Comenta la siguiente línea.

auth   required   pam_google_authenticator.so

Guarde y cierre el archivo. Si comentas la siguiente línea en /etc/ssh/sshd_config Archivo,

AuthenticationMethods publickey,keyboard-interactive

Retire el keyboard-interactive Método de autentificación.

AuthenticationMethods publickey

Guarde y cierre el archivo. A continuación, reinicie el demonio SSH.

sudo systemctl restart ssh

Twitter o como nuestra página de Facebook.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.