Contenido
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-authenticator
que 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.
- 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.
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.
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 sí.
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
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.
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 sí.
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
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