Clave Pública -o bien- Contraseña y Autenticador de Google para SSH

Encontré un artículo ( http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ ) que explica cómo configurar OpenSSH para solicitar un autenticador de Google código al iniciar session con éxito.

¿Es posible configurar OpenSSH para que suceda lo siguiente:

  • Si el usuario tiene la key privada correcta para iniciar session en el server, registre el usuario.
  • Si el usuario no tiene una key privada permitida para iniciar session en el server, pida al usuario la contraseña de la count Y un código de Google Authenticator.

Esto sería conveniente (puesto que en mis computadoras necesitaría solamente la llave privada) y seguro (puesto que podría dejar la autentificación de la contraseña permitida y segura).

¿Hay alguna manera de lograr lo que quiero?

Gracias por adelantado. 🙂

Definitivamente es posible configurar un sshd para requerir un par de keys válido o usar HOTP (nueva contraseña de una sola vez (OTP) en cada request) authentication basada en OATH – lo estoy haciendo. Estoy bastante seguro de que Google Authenticator es sólo otra implementación de OATH.

Mi writeup completo se puede leer en http://www.teaparty.net/technotes/yubikey-oath.html , pero el resultado es:

Asumiendo que su sshd ya está configurado para permitir la authentication basada en keys públicas (la mayoría son), agregue estas dos líneas a sshd_config :

 PasswordAuthentication no ChallengeResponseAuthentication yes 

Instale pam_auth (este es el modo orientado a CentOS, para x86_64):

 yum install pam_oath ln -s /usr/lib64/security/pam_oath.so /lib64/security/ 

Realice el file de authentication /etc/users.oath , modo 600 , propietario root:root y /etc/users.oath con líneas como:

 #type username pin start seed HOTP fnetworking - 123a567890123b567890123c567890123d567890 

Edite /etc/pam.d/sshd y agregue la línea

 auth requinetworking pam_oath.so usersfile=/etc/users.oath window=5 digits=8 

Salte los digits=8 si está contento con 6 dígitos de HOTP OATH. Creo que un método similar puede ser usado para TOTP OATH (nuevo OTP cada n segundos), pero estoy usando fichas de hardware OATH en lugar de las de software, y son yubikeys, que solo hacen HOTP OATH.

La única arruga es que cuando ssh en sin presentar una key válida, pide el código de OATH antes de la contraseña. No podía hacer que funcionara al revés, pero decidí que no me importaba tanto; las indicaciones lo hacen bastante claro qué token se solicita.

Necesita agregar:

 AuthenticationMethods publickey keyboard-interactive 

sin una coma entre publickey y keyboard-interactive a /etc/ssh/sshd_config . Todos los demás ajustes no tienen que ser alterados (siempre y cuando la configuration sea igual al tutorial dado de howtogeek).