Não é possível obter a autenticação de chave pública SSH para funcionar [fechada]

41

Meu servidor está executando o CentOS 5.3. Estou em um Mac rodando o Leopard. Não sei quem é responsável por isso:

Posso fazer logon no meu servidor muito bem via autenticação por senha. Eu segui todas as etapas para configurar o PKA (conforme descrito em http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-ssh-beyondshell.html ), mas quando Eu uso o SSH, ele se recusa a tentar a verificação de chave pública. Usando o comando

ssh -vvv user@host

(em que -vvv aumenta a verbosidade até o nível máximo), recebo a seguinte saída relevante:

debug2: key: /Users/me/.ssh/id_dsa (0x123456)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred keyboard-interactive,password
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

seguido de uma solicitação para minha senha. Se eu tentar forçar o problema com

ssh -vvv -o PreferredAuthentications=publickey user@host

eu recebo

debug2: key: /Users/me/.ssh/id_dsa (0x123456)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred publickey
debug3: authmethod_lookup publickey
debug3: No more authentication methods to try.

Portanto, mesmo que o servidor diga que aceita o método de autenticação de chave pública e meu cliente SSH insista, sou rejeitado. (Observe a ausência conspícua de uma linha "Chave pública da oferta:" acima). Alguma sugestão?


fonte
simplesmente use "ssh -v" você não precisa de mais detalhamento e incluem toda a produção não apenas as linhas que você acha que são importantes
cstamas
Esta questão está sendo encerrada porque não é mais responsável e está atraindo respostas de baixa qualidade.
HopelessN00b

Respostas:

44

Verifique se a sua máquina Centos possui:

RSAAuthentication yes
PubkeyAuthentication yes

no sshd_config

e verifique se você tem permissão adequada no diretório ~ / .ssh / da máquina centos.

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*

deve fazer o truque.

pyhimys
fonte
1
os direitos e nomes de arquivos corretos (às vezes, autorizadas_keys2, às vezes sem os 2) são muito importantes!
Brandstaetter
4
A permissão do arquivo allowed_keys é uma dica muito importante. Obrigado.
Kane
7
Você também pode precisar, chmod go-w ~/se ainda não o é.
tylerl
1
Além disso, verifique se o seu diretório home no servidor remoto tem permissões 755(como Jinyu Liu menciona abaixo)
Attila Fulop
1
Em outros sistemas operacionais, o arquivo de configuração SSH também pode estar presente em:/etc/ssh/ssh_config
Yoshua Wuyts 12/08
17

Eu tive um problema semelhante - o PC remoto não podia usar a autenticação de chave pública para fazer login no servidor CentOs 6. O problema no meu caso estava relacionado ao SELinux - o diretório inicial do usuário que tentava efetuar login tinha contextos de segurança de mensagens. Eu resolvi isso usando a restoreconferramenta assim:

restorecon -Rv /home
Gareth
fonte
2
Obrigado, Gareth! "restorecon -Rv /root/.ssh" fez o truque bem.
Tboberg
Para explicar mais: este comando está dizendo ao SELinux para redefinir as tags SELinux dos arquivos /homepara o que eles normalmente estão no layout do diretório /home.
rakslice
Se você está registrando-se como root, deve serrestorecon -Rv /root
Youfu
13

1- verifique seu / etc / ssh / sshd_config, verifique se você possui

Autenticação RSA sim
PubkeyAuthentication yes

2- verifique o log seguro da máquina remota, procure o log de erro detalhado do daemon sshd. por exemplo no meu Ubuntu

# grep 'sshd' / var / log / secure | grep 'Autenticação recusada' | cauda -5
4 de agosto 06:20:22 xxx sshd [16860]: Autenticação recusada: propriedade ou modos incorretos para o diretório / home / xxx
4 de agosto 06:20:22 xxx sshd [16860]: Autenticação recusada: propriedade ou modos incorretos para o diretório / home / xxx
4 de agosto 06:21:21 xxx sshd [17028]: Autenticação recusada: propriedade ou modos incorretos para o diretório / home / xxx
4 de agosto 06:21:21 xxx sshd [17028]: Autenticação recusada: propriedade ou modos incorretos para o diretório / home / xxx
4 de agosto 06:27:39 xxx sshd [20362]: Autenticação recusada: propriedade ou modos incorretos para o diretório / home / xxx

Em seguida, verifique a propriedade e os modos do diretório / home / xxx, talvez você precise executar este

chmod 755 / home / xxx
Jinyu Liu
fonte
1
Verificar arquivo de log do sistema é uma dica muito importante.
Kane
1
As permissões de diretório home do 755 me ajudaram - definitivamente necessárias!
21413 Ben
11

Verifique se suas permissões estão corretas e a estrutura do arquivo (especificamente a ortografia) está correta, para máquinas locais e remotas. O URL a que você se refere indica todos eles, mas vale a pena verificar se o que você tem corresponde. Normalmente, as permissões geram um erro relevante.

Você verificou se a caixa sshd_config no seu CentOS 5.3 está definida para permitir PubkeyAuthentication ou RSAAuthentication?

Verifique os logs do servidor SSH no sistema CentOS - ele pode fornecer mais informações. Não tenho certeza se o CentOS verifica a chave ssh na lista negra que o debian faz, mas vi rejeições de chave pública ssh que são relativamente silenciosas no que diz respeito à saída -vvv, mas os logs explicaram claramente o que estava acontecendo

Daniel Lawson
fonte
7

Consegui! Acontece que era um problema do lado do cliente. (Acho que qualquer problema no servidor teria produzido uma saída de depuração mais útil.) Por motivos desconhecidos para mim, no meu Mac, o arquivo / etc / ssh_config tinha a linha

PubkeyAuthentication = no

Comentei essa linha e agora tudo funciona bem.


fonte
4

Além dos modos de arquivos / diretórios, verifique se a propriedade está correta! Um usuário deve possuir seu próprio diretório inicial, .ssh /, e arquivos nele.

Eu tive que correr chown -R $user:$user /home/$userpara superar minhas falhas de ssh.

Visser
fonte
+1, em um dos meus sistemas as permissões em .ssh estavam certos, mas alguém tinha feito a conta do diretório home 777.
GargantuChet
2

Verifique também se ele pode fornecer automaticamente uma chave ou não, use -i path / to / key se não for ou apenas para testar

Jimsmithkka
fonte
2

Parece um problema de configuração para mim. Como Daniel sugeriu, há duas coisas para verificar:

  1. As chaves SSH $HOME/.ssh/authorized_keyssão legíveis; e
  2. SSHd está configurado para permitir o login da chave pública.
sybreon
fonte
2

Verifique o nome de usuário com o qual você está tentando fazer login. Por padrão, é o seu nome de usuário na máquina local.

Creotiv
fonte
1

A saída do cliente como em ssh -vrevelará que há um problema em uma determinada etapa do protocolo, mas quando é devido a algo no servidor, o cliente não será informado da causa. Verifique os arquivos de log do servidor para descobrir o que há de errado. Você provavelmente precisa estar rootem ordem para ter permissões para fazê-lo. Por exemplo, para um sshdconfigurado para efetuar logon no syslog, você pode encontrar as mensagens em /var/log/secure. Como estes:

Authentication refused: bad ownership or modes for directory /home/you/.ssh
Authentication refused: bad ownership or modes for file /home/you/.ssh/authorized_keys

O motivo neste caso foi um padrão (estúpido) defaultde 0002. Isso significa, acesso de gravação para o grupo. (Nome do grupo = nome de usuário, mas ainda assim.) O daemon SSH não confiará em arquivos que possam ser adulterados por outras pessoas além do usuário (bem e root, é claro). Você pode resolver o problema usando chmod.

chmod 700 ~/.ssh # solve the issue
chmod 720 ~/.ssh # reproduce the issue
# or similar for a file
Lumi
fonte
1

eu só fiquei preso no mesmo problema acessando com o fedora core 16 a centavos 5.5

os logs e detalhado parecia exatamente o mesmo

o problema era a chave pública, ele obteve alguns dados falsos, regenerou-os e publicou-os no servidor sshd_server, o sshd_client está enviando as informações da chave, mas não é reconhecido pelo servidor (ele não corresponde a nenhuma das chaves das chaves autorizadas)

Freaktor
fonte
-2

Outro mordido por isso. Após uma longa pesquisa, descobri que eu estava alimentando explicitamente ssh a chave pública (com a opção -i) em vez da chave privada. Doh!

Ellert van Koperen
fonte