SSH OTP

Agregue códigos únicos basados ​​en tiempo al inicio de sesión SSH utilizando Linux PAM y el módulo PAM de Google Authenticator.

Antes de ejecutar

Este ejemplo de Ubuntu instala un módulo PAM adicional y cambia la autenticación del servidor. Mantenga abierta una sesión administrativa existente y un acceso de recuperación o consola independiente. Configurar y probar cada cuenta antes de la aplicación de la ley; almacene los códigos secretos y de emergencia de OTP de forma segura y nunca los publique. Sincronice el reloj del servidor. Confirme que su cliente SSH admita mensajes interactivos con el teclado y que las cuentas de automatización y recuperación sigan siendo utilizables. La pila PAM de muestra conserva la autenticación común, que puede requerir la contraseña del sistema además de la OTP: la clave pública más el teclado interactivo no garantizan por sí solos exactamente dos mensajes o exactamente dos factores. Los archivos PAM, las políticas y los nombres de servicios varían según la distribución; No aplique este ejemplo sin cambios a servidores macOS o Windows.

Después de aplicar los cambios, compruebe en una nueva sesión SSH que puede iniciar sesión y que el funcionamiento es el esperado. Mantenga abierta la sesión actual hasta que la comprobación sea satisfactoria para poder restaurar la configuración si fuera necesario.

Aplicaciones de autenticación

Use una aplicación TOTP en el teléfono para escanear el código QR de registro o introducir el secreto manualmente. Proteja el código QR y el secreto y guarde los códigos de recuperación de forma segura. La aplicación es independiente del módulo PAM del servidor.

2FAS ofrece copias de seguridad opcionales; la sincronización entre dispositivos es una función Premium. La disponibilidad depende de la plataforma y del plan.

Ejemplos

Instale el módulo PAM en Ubuntu. El módulo está separado de OpenSSH y requiere privilegios de administrador.

sudo apt update
sudo apt install libpam-google-authenticator

Ejecute la herramienta de inscripción en cada cuenta que utilizará OTP. Siga las indicaciones interactivas, agregue la cuenta a una aplicación de autenticación y almacene de forma segura los códigos de emergencia. No comparta ni registre el secreto mostrado.

google-authenticator

En el archivo de servicio SSH PAM existente (normalmente /etc/pam.d/sshd), agregue el módulo como regla de autenticación conservando todas las cuentas, sesiones y otras reglas existentes. Este fragmento conserva la autenticación común; su política PAM también puede solicitar una contraseña del sistema. No agregue nullok cuando se requiera OTP.

Abra el archivo con nano:

sudo nano /etc/pam.d/sshd
@include common-auth
auth required pam_google_authenticator.so

Combine estas configuraciones en la configuración efectiva del servidor SSH. Esto requiere una clave pública y autenticación interactiva con teclado PAM; Los bloques Incluir orden o Coincidencia existentes pueden cambiar el resultado. No sobrescriba toda la configuración.

Abra el archivo con nano:

sudo nano /etc/ssh/sshd_config
UsePAM yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam

Valide la sintaxis e inspeccione la política efectiva antes de aplicar el procedimiento de recarga del servicio SSH del sistema. Utilice sshd -T -C con el usuario y la dirección relevantes cuando se apliquen las reglas de coincidencia. Desde una sesión separada, verifique la clave y todos los factores solicitados antes de cerrar la sesión original.

sudo sshd -t && sudo sshd -T && sudo systemctl reload ssh

Opcional: clave pública y OTP

Para exigir una clave y después un OTP sin contraseña de cuenta, ajuste las reglas auth de PAM para SSH. Quitar common-auth del servicio PAM de SSH afecta a todas sus cuentas y puede omitir otras políticas. Revise las demás reglas auth con el administrador; conserve las reglas account y session, una sesión abierta y una vía independiente de recuperación.

Este fragmento de Ubuntu ilustra las reglas auth y no es un archivo PAM completo. Comente common-auth solo tras evaluar su efecto. No añada nullok. Otras reglas auth pueden exigir factores adicionales.

Abra el archivo con nano:

sudo nano /etc/pam.d/sshd
# /etc/pam.d/sshd: auth fragment only
# @include common-auth
auth required pam_google_authenticator.so

Tras incorporar la configuración SSH anterior, compruebe los valores efectivos. Las claves de salida están en minúsculas. El orden de Include y los bloques Match pueden cambiar el resultado; use sshd -T -C con los datos de conexión para Match.

sudo sshd -T | grep -E '^(usepam|pubkeyauthentication|kbdinteractiveauthentication|passwordauthentication|authenticationmethods) '

Valide y recargue como se indica arriba. Desde otra sesión de cliente, conéctese con la cuenta registrada y la clave privada e introduzca el código. Compruebe que no se puede acceder sin la clave o el código requeridos antes de cerrar la sesión original.

ssh -i ~/.ssh/id_ed25519 alice@server.example.com

Secure Pipes admite las solicitudes SSH keyboard-interactive para introducir el código del servidor. Este OTP es distinto del utilizado para desbloquear la aplicación. El secreto OTP compartido reside en el servidor y en la aplicación autenticadora; Secure Pipes no necesita guardarlo para este acceso.

Referencias oficiales

Revisado el 27 de octubre de 2026