Cómo configurar la autenticación de dos factores (Google Authenticator) para inicios de sesión SSH


De forma predeterminada, SSH ya utiliza una comunicación de datos segura entre máquinas remotas, pero si desea agregar una capa de seguridad adicional a sus conexiones SSH, puede agregar un módulo Google Authenticator (autenticación de dos factores) que le permite ingresar uno aleatorio -Código de verificación de contraseña de tiempo (TOTP) mientras se conecta a servidores SSH. Deberá ingresar el código de verificación desde su teléfono inteligente o PC cuando se conecte.

Google Authenticator es un módulo de código abierto que incluye implementaciones de token de verificación de códigos de acceso de un solo uso (TOTP) desarrollado por Google. Es compatible con varias plataformas móviles, así como con PAM (Módulo de autenticación conectable). Estos códigos de acceso de un solo uso se generan utilizando estándares abiertos creados por la Iniciativa OATH para la Autenticación Abierta).

En este artículo, le mostraré cómo instalar y configurar SSH para la autenticación de dos factores en Red Hat, CentOS, Fedora y Ubuntu, Linux Mint y Debian.

Instalación del módulo Autenticador de Google

Abra la máquina en la que desea configurar la autenticación de dos factores e instale las siguientes bibliotecas PAM junto con las bibliotecas de desarrollo necesarias para que el módulo PAM funcione correctamente con el módulo de autenticación de Google.

En los sistemas Red Hat, CentOS y Fedora instalan el paquete "pam-devel".

# yum install pam-devel make automake libtool gcc-c++ wget

En los sistemas Ubuntu, Linux Mint y Debian, instale el paquete "libpam0g-dev".

# apt-get install libpam0g-dev make automake libtool gcc-c++ wget

Ahora clone e instale el módulo de autenticación de Google en el directorio de inicio (suponga que ya ha iniciado sesión en el directorio de inicio de la raíz) utilizando el siguiente comando git.

# git clone https://github.com/google/google-authenticator-libpam.git
# cd google-authenticator-libpam/
# ./bootstrap.sh
# ./configure
# make
# make install
# google-authenticator

Una vez que ejecute el comando "google-authenticator", se le presentará una pregunta seria. Simplemente escriba “y” (sí) como respuesta en la mayoría de situaciones. Si algo sale mal, puede volver a escribir el comando "google-authenticator" para restablecer la configuración.

  1. Do you want authentication tokens to be time-based (y/n) y

Después de esta pregunta, obtendrá su "clave secreta" y "códigos de emergencia". Escriba estos detalles en alguna parte, necesitaremos la "clave secreta" más adelante para configurar la aplicación Google Authenticator.

[[email protected] google-authenticator-libpam]# google-authenticator

Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/[email protected]%3Fsecret%3DXEKITDTYCBA2TLPL
Your new secret key is: XEKITDTYCBA2TLPL
Your verification code is 461618
Your emergency scratch codes are:
  65083399
  10733609
  47588351
  71111643
  92017550

A continuación, siga el asistente de configuración y, en la mayoría de los casos, escriba la respuesta como "y" (sí) como se muestra a continuación.

Do you want me to update your "/root/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Configuración de SSH para usar el módulo Autenticador de Google

Abra el archivo de configuración de PAM "/etc/pam.d/sshd" y agregue la siguiente línea en la parte superior del archivo.

auth       required     pam_google_authenticator.so

A continuación, abra el archivo de configuración SSH "/ etc/ssh/sshd_config" y desplácese hacia abajo para encontrar la línea que dice.

ChallengeResponseAuthentication no

Cámbielo a "sí". Entonces, se vuelve así.

ChallengeResponseAuthentication yes

Finalmente, reinicie el servicio SSH para realizar nuevos cambios.

# /etc/init.d/sshd restart

Configuración de la aplicación Google Authenticator

Inicie la aplicación Google Authenticator en su teléfono inteligente. Presione Menú y elija "Configurar una cuenta". Si no tiene esta aplicación, puede descargar e instalar la aplicación Google Authenticator en sus dispositivos Android/iPhone/Blackberry.

Presione la tecla "Enter proporcionada".

Agregue el "Nombre" de su cuenta e ingrese la "clave secreta" generada anteriormente.

Generará una contraseña única (código de verificación) que cambiará constantemente cada 30 segundos en su teléfono.

Ahora intente iniciar sesión a través de SSH, se le solicitará el código de autenticación de Google (código de verificación) y la contraseña cada vez que intente iniciar sesión a través de SSH. Tiene solo 30 segundos para ingresar este código de verificación; si lo pierde, se generará un nuevo código de verificación.

login as: tecmint
Access denied
Using keyboard-interactive authentication.
Verification code:
Using keyboard-interactive authentication.
Password:
Last login: Tue Apr 23 13:58:29 2013 from 172.16.25.125
[[email protected] ~]#

Si no tiene un teléfono inteligente, también puede usar un complemento de Firefox llamado GAuth Authenticator para realizar la autenticación de dos factores.

Importante: La autenticación de dos factores funciona con el inicio de sesión SSH basado en contraseña. Si está utilizando una sesión SSH de clave pública/privada, ignorará la autenticación de dos factores y lo iniciará directamente.