O ssh não permite mais a autenticação de chave pública

22

Minha máquina parou recentemente de aceitar a autenticação de chave pública recebida. Eu tenho um desktop ubuntu 11.04 no qual ssh em uma máquina Windows. Eu uso massa de vidraceiro com concurso. Consigo me conectar, mas apenas com autenticação de senha interativa, não com minha chave rsa que eu configurei.

Eu já verifiquei que a chave está listada em ~ / .ssh / allowed_keys. Como faço para corrigir isso e o que verifico?

Andrew Redd
fonte
2
Primeiro, verifique se todos os três ~, ~/.sshe ~/.ssh/authorized_keyssão apenas gravável por você (em particular permissão de escrita grupo não). Procure /var/log/auth.logentradas de log criadas no momento de suas tentativas de login. Copie e cole-os na sua pergunta (editando nomes para privacidade, se quiser). Verifique também se o problema está do lado do servidor ou não: copie a chave privada para a máquina Linux (você precisará converter o arquivo da chave privada do PuTTY no formato OpenSSH) e veja se ssh localhostfunciona.
Gilles 'SO- stop be evil'
meu diretório pessoal era gravável por algum motivo. Isso consertou. Coloque isso como uma resposta para que eu possa aceitá-lo.
Andrew Redd

Respostas:

28

Se a autenticação de chave pública não funcionar: verifique se, no lado do servidor, seu diretório pessoal ( ~), o ~/.sshdiretório e o ~/.ssh/authorized_keysarquivo são todos graváveis apenas pelo proprietário . Em particular, nenhum deles deve ser gravável pelo grupo (mesmo que o usuário esteja sozinho no grupo). chmod 755ou chmod 700está ok, chmod 770não está.

O que verificar quando algo está errado:

  • Execute ssh -vvvpara ver muita saída de depuração. Se você postar uma pergunta perguntando por que não pode se conectar ao ssh, inclua esta saída (convém anonimizar os nomes de host e usuário).
  • Se puder, verifique os logins do servidor /var/log/auth.log.
  • Se a autenticação de chave pública não estiver funcionando, verifique as permissões novamente, especialmente o bit do grupo (veja acima).
Gilles 'SO- parar de ser mau'
fonte
(do wiki da U&L , copiado para a AU )
Gilles 'SO- stop be evil' (
1
Boa resposta! Eu esqueci meu homedir: o
RobAu
Se você estiver executando a versão recente do ssh (ou sshd), as chaves DSA não serão mais suportadas por padrão devido a problemas de segurança. A única correção real é atualizar para RSA ou chaves melhores.
Mikko Rantalainen
Alterei as permissões da minha pasta pessoal e o quê? Eu estava trancado fora do SSH! Mudei as teclas ssh, não, o servidor ainda se recusa a conectar! Eu estava louco tentando encontrar uma solução e com a sua resposta do chmod 700 na minha pasta pessoal, o ssh começou a funcionar !!!!!!! Obrigado! Se minha conexão com o terminal caísse ao tentar encontrar a solução, eu estaria totalmente bloqueado no servidor. Portanto, cuidado para não brincar com as permissões da sua pasta pessoal! (Eu só mudei meus permissões de pasta casa, não pasta .ssh mas ainda trancado para fora de SSH)
Tarik
9

Encontrei a mesma coisa e finalmente descobri que era porque criptografava meu diretório pessoal. O SSH não pode ler o arquivo allowed_keys até você efetuar login, portanto, basicamente, obriga você a se autenticar com senha primeiro. Consulte a seção sobre o diretório inicial criptografado no seguinte link:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory

Willie Wheeler
fonte
5

Se você verificar as permissões nos diretórios, e houver um "." logo após eles, você pode ter o selinux ativado, o que prejudicará a troca de chaves e o padrão para identificação manual de senha.

Você pode desativar o SELinux para solucionar problemas seguindo as instruções aqui: http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html ou apenas edite o arquivo / etc / selinux / config e altere-o de "reforçando" para "desativado".

Espero que isto ajude.

tweekd
fonte
Eu tinha o selinux ativado, mas desativá-lo não pareceu corrigi-lo. Qual foi o truque para mim chmod 600 ~/.ssh/authorized_keys- o arquivo pode ser gravado em grupo. (via pyrosoft.co.uk/blog/2013/01/12/… )
David Carboni
Isso me ajudou! Obrigado!
907th 14/10
Você também deve conseguir que a autenticação SSH funcione com o SELinux, definindo os contextos corretos do SELinux. Restaurar os contextos configurados pelo sistema em seu diretório pessoal ( restorecon ~ -R) é um bom ponto de partida.
Josh Kelley
4

Eu garantiria que suas configurações no / etc / ssh / sshd_config estejam corretas.

Para forçar o uso apenas de PKI e não permitir senhas, encontre a linha

#PasswordAuthentication yes 

no seu arquivo, remova o comentário e defina-o como

PasswordAuthenticate no

Também leria o balanço das configurações para garantir que elas fizessem sentido. Em particular, tente garantir o uso de chaves RSA, pois o DSA é comprometido.

cmdematos
fonte
11
Você está explicando como desativar a autenticação de senha. Isso não ajudará a fazer a autenticação de chave pública funcionar (a chave pública é tentada primeiro). Andrew: não desative a autenticação por senha até ter certeza de que a autenticação por chave pública funciona!
Gilles 'SO- stop be evil'
2

Uma causa possível do problema é que você possui chaves DSA, mas agora o SSH (aparentemente) assume o padrão de exigir chaves RSA. Eu tive o problema ao atualizar para o 16.04. Você pode ver mais aqui, mas a resposta curta é adicionar o seguinte a ~/.ssh/config:

PubkeyAcceptedKeyTypes ssh-dss
DeegC
fonte
1

Corrigi esse problema cancelando o comentário "PasswordAuthentication yes" em / etc / ssh / sshd_config.

Ben Ernest
fonte
1

Devido à necessidade de solucionar problemas de comunicação entre duas máquinas diferentes, eu tinha duas chaves privadas no ~/.sshlado do cliente.

Em vez de configurar cada host do servidor com a respectiva chave privada, ~/.ssh/identitycomo eu deveria ter feito, eu tinha a chave secundária (e, neste caso, incorreta) configurada para todos os hosts:

Host *
IdentityFile ~/.ssh/identity_b

A correção ~/.ssh/identityresolveu o problema:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b
Uli Klumpp
fonte
0

Eu apenas tive o mesmo problema, mas alterar as permissões com chmodnão estava ajudando, pois acabou que eu não tinha a propriedade do ~/.ssh/authorized_keysarquivo. Você pode alterar a propriedade do .sshdiretório com:

sudo chown -R "$USER" ~/.ssh
usuario
fonte
-1

De alguma forma, isso funcionou para mim:

root @ kaiser: ~ # vim / etc / ssh / sshd_config

Alterar essa linha de sim para não 28 StrictModes no

Tente novamente

sysadmin @ suselinux1: ~> com sysadmin kaiser Bem-vindo ao Ubuntu 12.04.1 LTS (i686 genérico do GNU / Linux 3.2.0-25)

Último login: Sex Nov 9 15:40:11 2012 from 10.1.3.25 sysadmin @ kaiser: ~ $ date vie nov 9 17:53:11 CST 2012 sysadmin @ kaiser: ~ $

theunbekanntshadow
fonte
3
Fazer algo sem saber o que faz e por que funciona pode ser aceitável, mas sugerir o mesmo é ruim e, para ser justo, pior se tratar de um sistema de segurança.
Mahesh
2
acordado. que seja um incentivo para criar sshddocumentos melhores , que não se enquadram exatamente na categoria "boa leitura de sábado"
code_monk