Estou usando o Ubuntu 14.04.1 (com OpenSSH 6.6 e libpam-google-authenticator 20130529-2).
Estou tentando configurar logins SSH onde a chave pública é autenticada (sem senha) e um usuário é solicitado a fornecer um código do Authenticator do Google.
Seguir / adaptar essas instruções me deu um prompt de senha e um prompt de autenticação do 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 e 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
Instalei o pacote, editei meus arquivos /etc/ssh/sshd_config
e/etc/pam.d/ssh
Em /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
e na 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")
Eu sei que o PAM depende da ordem, mas sshd_config
também é ?
O que estou fazendo errado? Qualquer ajuda seria apreciada.
PasswordAuthentication no
, mas não foi isso. O problema é / era que eu tinha / temControlMaster auto
eControlPath
directivas em meu arquivo ~ / .ssh / config. Eu queria ter certeza de não me trancar, para que eu sempre deixasse uma sessão SSH aberta. Como meu computador apenas os reutilizava, eu sempre entrava sem o sistema pedindo um token. Marquei sua resposta como correta, pois alguém que a seguisse obteria uma configuração de trabalho. Obrigado!PasswordAuthentication no
,ChallengeResponseAuthentication yes
,AuthenticationMethods publickey,keyboard-interactive
, eUsePAM yes
nosshd_config
. Ele valida minha chave e, em seguida, solicita meu token do Google Authenticator e também solicita minha senha. Me faz fazer os três - não posso pular nenhum deles. Eu também tenteiAuthenticationMethods publickey,keyboard-interactive:pam
conforme sugerido pela página de manual, mas isso não mudou nada. Alguma ideia?@include common-auth
linha que as respostas mostram. Eu apenas pensei que era um comentário para apam_google_authenticator
linha em /etc/pam.d/sshd no começo.auth substack password-auth
), mas seu comentário resolveu meu problema!Eu finalmente consegui colocar isso em funcionamento, colocando
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
no topo/etc/pam.d/sshd
.De acordo com a página de manual pam.d :
success=done
significa que, se o Google Authenticator sair, não será mais realizada a autenticação, o que significa que não haverá solicitação de senha adicional.default=die
significa que, se o Google Authenticator rejeitar a tentativa de login, a autenticação falhará imediatamente, ignorando o prompt de senha.Assim,
[success=done new_authtok_reqd=done default=die]
é uma espécie de mistura entre os valores de controlesufficient
erequisite
, já que queremos um comportamento de ambos: se o sucesso for finalizado imediatamente (suficiente) e se o fracasso também for finalizado imediatamente (requisito).Observe que o
nullok
argumento pam_google_authenticator.so significa que, se um~/.google_authenticator
arquivo não for encontrado para um usuário, a autenticação de chave pública continuará normalmente. Isso é útil se eu quiser bloquear apenas um subconjunto de minhas contas com o 2FA.fonte
A resposta de Linus Kendall deve funcionar em sistemas mais antigos, mas em máquinas Linux mais recentes é problemática; no meu servidor web baseado em arch linux, essa configuração resulta em pam solicitando meu código de autenticador e minha senha após receber minha chave ssh (ou seja, preciso dos 3).
Uma solução mais simples que evita esse problema e deve funcionar em todos os sistemas é alterar a entrada
/etc/pam.d/sshd
para:E então, faça as mesmas edições em `` / etc / ssh / sshd` que Linus mencionou:
Isso deve solicitar seu token de autenticador após o servidor aceitar sua chave pública. Não deve solicitar sua senha.
Como observação lateral, se você deseja ter uma conta de usuário sftp, provavelmente precisará ignorar o Google Authenticator para fazê-la funcionar. Aqui está uma sugestão de como fazer isso com segurança usando uma prisão sftp. Em
etc/ssh/sshd_config
:Você precisará fazer as permissões somente na gravação raiz de / path / to / ftp / dir (por exemplo
chown root:root /path/to/ftp/dir
,chmod 755 /path/to/ftp/dir
todos os pais acima desse diretório também precisam de permissões seguras. A maneira como costumo fazer isso é criar o diretório chroot/home/shared/user
, criando um diretório diretório lá (por exemplo, 'dados') e, em seguida, montando qualquer diretório que eu queira compartilhar assim:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
Se você seguir todas essas etapas, terá uma chave pública + login do autenticador do google para seus usuários ssh e uma conta sftp protegida por senha funcional para transferência de dados.
fonte