Estoy usando Ubuntu 14.04.1 (con OpenSSH 6.6 y libpam-google-authenticator 20130529-2).
Estoy tratando de configurar los inicios de sesión SSH donde la clave pública se autentica (sin contraseña) y se le solicita al usuario un código del Autenticador de Google.
Seguir / adaptar estas instrucciones me ha proporcionado una solicitud de contraseña y una solicitud de autenticación de Google:
- https://scottlinux.com/2013/06/02/use-google-authenticator-for-two-factor-ssh-authentication-in-linux/
- http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
- https://wiki.archlinux.org/index.php/Google_Authenticator y https://wiki.archlinux.org/index.php/SSH_keys#Two-factor_authentication_and_public_keys
- https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-two-factor-authentication
He instalado el paquete, editado mi /etc/ssh/sshd_configy /etc/pam.d/ssharchivos
En /etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
y en la parte inferior de /etc/pam.d/ssh:
auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")
Sé que PAM depende del orden, pero sshd_configtambién lo es .
¿Qué estoy haciendo mal? Cualquier ayuda sería apreciada.

PasswordAuthentication no, pero no fue así. El problema es / era que tenía / haveControlMaster autoyControlPathdirectivas en mi archivo ~ / .ssh / config. Quería asegurarme de no bloquearme, por lo que siempre dejaría abierta una sesión SSH. Como mi computadora los reutilizaba, siempre entraba sin que el sistema pidiera un token. Marqué su respuesta como correcta, ya que alguien que la siguiera obtendría una configuración funcional. ¡Gracias!PasswordAuthentication no,ChallengeResponseAuthentication yes,AuthenticationMethods publickey,keyboard-interactive, yUsePAM yesensshd_config. Valida mi clave y luego me pide mi token de Google Authenticator y luego también me pide mi contraseña. Me hace hacer los tres, no puedo omitir ninguno de ellos. También lo intentéAuthenticationMethods publickey,keyboard-interactive:pamcomo lo sugiere la página del manual, pero eso no cambió nada. ¿Algunas ideas?@include common-authlínea que muestran las respuestas. Solo pensé que era un comentario para lapam_google_authenticatorlínea en /etc/pam.d/sshd al principio.auth substack password-auth), ¡pero su comentario resolvió mi problema!Finalmente pude hacer que esto funcione al colocarlo
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nulloken la parte superior de/etc/pam.d/sshd.De acuerdo con la página de manual de pam.d :
success=donesignifica que si Google Authenticator cierra la sesión, no se realizará más autenticación, lo que significa que no se solicitará una contraseña adicional.default=diesignifica que si Google Authenticator rechaza el intento de inicio de sesión, la autenticación fallará inmediatamente, omitiendo la solicitud de contraseña.Por
[success=done new_authtok_reqd=done default=die]lo tanto, es una especie de mezcla entre los valores de controlsufficientyrequisite, ya que queremos un comportamiento de ambos: si tiene éxito, finalice inmediatamente (suficiente), y si falla, también finalice inmediatamente (requisito).Tenga en cuenta que el
nullokargumento de pam_google_authenticator.so significa que si~/.google_authenticatorno se encuentra un archivo para un usuario, la autenticación de clave pública se realiza normalmente. Esto es útil si quiero bloquear solo un subconjunto de mis cuentas con 2FA.fuente
La respuesta de Linus Kendall debería funcionar en sistemas más antiguos, pero en máquinas Linux más nuevas es problemática; en mi servidor web basado en arch linux, esa configuración hace que pam solicite mi código de autenticador y mi contraseña después de recibir mi clave ssh (es decir, necesito los 3).
Una solución más simple que previene este problema y que debería funcionar en cada sistema es cambiar la entrada
/etc/pam.d/sshda:Y luego hacer las mismas ediciones a `` / etc / ssh / sshd` que Linus mencionó:
Eso debería pedirle su token de autenticación después de que el servidor acepte su clave pública. No debe pedir su contraseña.
Como nota al margen, si desea tener una cuenta de usuario sftp, es probable que deba omitir el autenticador de Google para que funcione. Aquí hay una sugerencia de cómo hacerlo de forma segura utilizando una cárcel sftp. En
etc/ssh/sshd_config:Tendrá que hacer que los permisos en / path / to / ftp / dir solo escriban raíz (por ejemplo
chown root:root /path/to/ftp/dir,chmod 755 /path/to/ftp/dirtodos los padres encima de ese directorio también necesitan permisos seguros. La forma en que lo hago generalmente es creando el directorio chroot/home/shared/user, creando un directorio allí (por ejemplo, 'datos') y luego montar el directorio que quiera compartir así:sudo mount -o bind /path/to/ftp/dir /home/shared/user/dataSi sigue todos estos pasos, tendrá una clave pública + inicio de sesión de autenticador de Google para sus usuarios ssh, y una cuenta sftp protegida con contraseña funcional para la transferencia de datos.
fuente