Por que ainda posso ssh na minha máquina Ubuntu usando uma senha? Este é o /etc/ssh/sshd_config
arquivo do meu Ubuntu 20.04 na hospedagem da ovh (mostrando apenas as linhas não comentadas para abreviar):
Include /etc/ssh/sshd_config.d/*.conf
Port xxx
PermitRootLogin no
AllowUsers user1 user2
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
As permissões dos arquivos relevantes parecem estar OK:
$ stat -c %a /home/user1/.ssh/
700
$ stat -c %a /home/user1/.ssh/authorized_keys`
600
Eu corri sudo service ssh restart
e sudo service sshd restart
.
Por que ainda consigo fazer login na minha máquina Ubuntu por senha no ssh? Consigo logar por usuário e senha pelo ssh (PuTTY), ele só pede senha. Ambos user1 e user2 têm suas chaves na pasta inicial .ssh. O que está faltando?
Eu verifiquei o arquivo de inclusão:
-rw------- 1 root root 27 Dec 1 12:52 50-cloud-init.conf
...:/etc/ssh/sshd_config.d$ sudo cat 50-cloud-init.conf
PasswordAuthentication yes
então eu acho que é a causa? No entanto, minha configuração não substituiria essa configuração? uma vez que está incluído acima (em linha)?
As distribuições Ubuntu/Debian têm a entrada não padrão
Include /etc/ssh/sshd_config.d/*.conf
no início da distribuiçãosshd_config
. O objetivo disso é permitir que os usuários personalizem sua configuração sshd sem modificar osshd_config
arquivo principal, o que pode minimizar conflitos ou alterações inesperadas na configuraçãoapt update
do OpenSSH.Como a primeira linha de configuração encontrada é aquela aplicada, qualquer comando de senha em um arquivo de configuração personalizada
/etc/ssh/sshd_config.d/*.conf
substituirá aPasswordAuthentication no
linha na configuração primária. Certifique-se de que toda a configuração esteja conforme o esperado.Conforme observado por @dexter, você pode produzir a configuração efetiva com
sudo sshd -T
, que pode ser destacada quando um arquivo de configuração substitui outro.O login por senha pode ser realizado não apenas com
PasswordAuthentication
. Na verdade, é o método de autenticação "dedicado simples", e existe um método genérico que, entre outros, pode fazer autenticação por senha - ,KbdInteractiveAuthentication
anteriormente conhecido como ChallengeResponseAuhentication. É uma autenticação genérica semelhante a um bate-papo (é o que significa resposta de desafio), que pode ser feita em fator duplo, usar senhas de uso único e assim por diante, fazendo perguntas adicionais ou personalizadas, enquanto a primeira permite apenas exatamente o que nomeia - autenticação por senha do sistema.UsePAM
controla um pouco comoKbdInteractiveAuthentication
(akaChallengeResponseAuthentication
) poderia substituir/duplicar o arquivoPasswordAuthentication
. O PAM pode fornecer um bate-papo de resposta ao desafio para sshd, e o PAM geralmente é configurado compam_unix.so
o qual executa a autenticação de senha tradicional, portantoUsePAM
+KbdInteractiveAuthentication
fornece efetivamente autenticação de senha para SSH. (Obrigado @TooTea por perceber isso.)Veja a resposta mais votada aqui (é uma pena que não seja a resposta aceita, porque é claramente melhor) e veja também
man sshd_config
, é claro.O arquivo de inclusão teve
PasswordAuthentication yes
o qual foi utilizado, graças aman sshd_config
: "Para cada palavra-chave, será utilizado o primeiro valor obtido."Agora, se eu tentar fazer login via SSH, eu "Não há métodos de autenticação suportados disponíveis (chave pública)" .
Apenas a chave SSH funciona.