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_config
y /etc/pam.d/ssh
archivos
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_config
tambié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 auto
yControlPath
directivas 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 yes
ensshd_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:pam
como lo sugiere la página del manual, pero eso no cambió nada. ¿Algunas ideas?@include common-auth
línea que muestran las respuestas. Solo pensé que era un comentario para lapam_google_authenticator
lí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 nullok
en la parte superior de/etc/pam.d/sshd
.De acuerdo con la página de manual de pam.d :
success=done
significa 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=die
significa 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 controlsufficient
yrequisite
, 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
nullok
argumento de pam_google_authenticator.so significa que si~/.google_authenticator
no 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/sshd
a: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/dir
todos 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/data
Si 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