Tentando fazer autenticação ssh com arquivos de chave: o servidor recusou nossa chave


53

Estou tentando configurar a autenticação ssh com arquivos-chave em vez de nome de usuário / senha. O cliente é uma caixa do Windows executando o PuTTY e o servidor é um servidor Ubuntu 12.04 LTS.

Eu baixei o puttygen.exe e ele gerou um par de chaves. Em /etc/ssh/sshd_configeu tenho esta linha:

AuthorizedKeysFile %h/.ssh/authorized_keys

e no arquivo de chave pública do meu cliente, diz o seguinte:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

Copiei a parte de "ssh-rsa AAA" para "my@email.address.com" e coloquei isso no arquivo ~/.ssh/authorized_keysno meu servidor (na minha própria pasta pessoal). No PuTTY, em Conexão> SSH> Autenticação, digitei o caminho para a chave privada gerada no meu cliente e salvei as configurações da sessão.

Eu reiniciei o servidor ssh com

sudo service ssh restart

Agora, se eu carregar o perfil no PuTTY (verifiquei que a chave privada ainda está em Connection> SSH> Auth e se o caminho está correto) e execute o perfil, ele diz

Server refused our key

Tentei colocar a chave pública em um arquivo no diretório, ./ssh/authorized_keys/ mas isso não ajudou, então usei ./ssh/authorized_keyscomo arquivo , colando a chave nele. Também tentei gerar um par de chaves públicas / privadas no servidor, colocando a chave pública ./ssh/authorized_filese carregando a privada no PuTTY no meu cliente. Reiniciar o servidor também não ajudou.

Descobri que o erro pode ser resolvido colocando a chave em um local fora da pasta pessoal do usuário, mas isso só será útil se a pasta pessoal estiver criptografada, o que não é o caso.

Também tentei gerar uma chave de 4096 bits, pensando que talvez 1024 fosse muito curto.

Como posso fazer isso funcionar? Obrigado!

EDITAR:

Ok, /var/log/auth.logdisse:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

O Google me diz que ~/.ssh/deveria ter 700 e ~/.ssh/authorized_keys600, então eu fiz isso. Agora /var/log/auth.logdiz:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

Respostas:


95

Ok, está corrigido, no entanto, não vejo como isso é diferente do que já tentei.

O que eu fiz:

  • gerar um par de chaves com puttygen.exe (comprimento: 1024 bits)
  • carregar a chave privada no perfil PuTTY
  • insira a chave pública ~/.ssh/authorized_keys em uma linha (precisa começar ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • mudar /etc/ssh/sshd_configpara que ele contenhaAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

Para solução de problemas, faça # tail -f /var/log/auth.log.

Obrigado pela ajuda!


11
Hmm, então o que aconteceu com esse sshd: error: key_read: uudecode AAAAB3Nerro auth.log?
— Alaa Ali

Eu não tenho idéia, Alaa. Talvez tenha cometido um erro ao colar a sequência de teclas anterior. O Auth.log não recebe mais nenhuma entrada agora e a autenticação baseada em chave funciona perfeitamente. A principal problema foi que eu não tinha certeza sobre o que precisava ser feito, tornando o como que muito mais difícil. Então eu não sei por que, mas funciona. Obrigado novamente por sua ajuda :)
— Forkbeard

Impressionante!!! Estou coçando a cabeça há 2 dias. Esta resposta salva o dia !!
— naka

O passo 3 foi o truque para mim. Eu não coloquei a chave pública no authorized_keysarquivo, apenas colei meu mykey.pubarquivo na ~/.sshpasta e pensei que fosse buscá-lo. Em vez disso, o que eu precisava era executar isso ou editar e colar abaixo outras chaves que possam estar lá. cat mykey.pub >> authorized_keys. Parece simples agora, mas a lição aprendida é que todas as chaves públicas precisam residir authorized_keysnão apenas no ~/.ssh/diretório. Alguém, por favor, informe se esta não é uma afirmação correta.
— timbrown

se as etapas não ajudarem, verifique também: 1. você copiou a chave pública PuTTY salva em allowed_keys, não a OpenSSH 2. se você copiou usando copiar / colar do PuTTYgen (o que você deve fazer), pode ter dividido o chave pública em várias linhas; deve ser uma única linha; certifique-se de não adicionar espaços antes ou depois ao copiar graças a r_hartman centos.org/forums/viewtopic.php?t=990
— mvladk

23

Acabei de encontrar esse problema. Apesar de ter a configuração definida corretamente, como já mencionado neste segmento (permissões em allowed_keys etc.), acontece que eu tinha a chave pública no formato errado. Foi na forma de:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

O que não estava funcionando. Mas consegui fazê-lo funcionar da seguinte forma:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
Você pode usar ssh-keygen -i -f filenameofwindowsformpub.keypara transformar a chave pública no formato entendido pelo seu servidor OpenSSH.
— Preto

Sim, funcionou para mim! Tem que estar em uma única linha. Não posso acreditar que foi só isso!
— Adelriosantiago

11
OI kuraara Acho que a instrução acima feita por @Black deve ser destacada na resposta.
— ekerner

Posso adicionar um comentário ao formato do servidor OpenSSH? Para humanos, é difícil dizer em que computador essa chave representa.
— user1700890

Quando sigo a sugestão de @Black, não há UserName @ HOSTNAME no final da string. Não sei se essa parte importa.
— Arnoldbird

9

o problema é que o windows usa uma nova linha diferente do linux; portanto, ao copiar a chave do windows para o linux, existe um \ n no final da linha que você não pode ver no linux no editor.

Se você seguir o /var/log/auth.log e tentar fazer login, o erro será o seguinte:

sshd: error: key_read: uudecode AAAAB3N [....] == \ n

Se você alterar sua chave no Windows para que ela fique em uma única linha sem uma nova linha no final e copiá-la para o Linux, ela deverá funcionar (fez o truque para mim).


esse foi o meu problema, mas não vi nada no auth.log para sugerir que era esse o caso. frustrante ...
— Anthony

8

Eu tive que alterar as permissões para o diretório inicial

chmod 700 ~

2
Isso funcionou para mim também (no AIX).
— 21415 stevepastelan

Trabalhou para mim também no CentOS #
— 214

Trabalhou para mim no Redhat! O acesso de gravação em grupo parece ser o problema específico. Ainda funciona para mim se eu deixar permissões de leitura de grupo no local: "chmod 740 ~".
— Paul

6

Eu tive que alterar as permissões do diretório ~ / .ssh de 770 para 700 e as permissões de arquivo ~ / .ssh / allowed_keys de 660 para 600.

Por algum motivo, a remoção de permissões de grupo corrigiu esse problema para mim.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5

O ~/.ssh/authorized_keysarquivo requer que as chaves estejam todas em uma linha. Se você o adicionou em várias linhas, como na pasta acima, tente ingressar nas linhas.


Obrigado, isso faz sentido e agora entendo por que é um arquivo, não um diretório. No entanto, não ajudou.
— Forkbeard

3
para quem pode ficar confuso com isso, o que ele quer dizer é que cada chave em si deve estar em uma única linha, mas chaves diferentes precisam estar em linhas diferentes.
— Anthony

2

Aqui está o que funcionou para mim:

Em puttygen, depois de ter gerado as chaves, certifique-se de que você copiar e colar as informações do campo superior para ir em seu arquivo authorized_keys. Se você salvar sua chave pública na máquina cliente e abri-la, o texto será diferente do texto na parte superior da puttygentela. Novamente, certifique-se de copiar e colar o texto da parte superior da puttygentela (depois de criar suas chaves) no seu arquivo allowed_keys, que deve estar localizado ~/.ssh.


isso realmente resolveu o problema. Eu não entendo por que, se você clicar em Salvar a chave pública, por que ela não salva o formato adequado.
— Luky

1

Além de todas as respostas acima, copie e cole a chave puttygencorretamente!

Se você clicar duas vezes no volume da cadeia de teclas para selecioná-la, poderá não obter a cadeia inteira, porque a caixa de texto divide linhas em alguns caracteres, como +, por exemplo, para que você não selecione o texto após o +caractere ( que você não pode ver porque a caixa de texto é muito pequena). Certifique-se de selecionar a sequência inteira manualmente, ssh-rsaaté o final da caixa de texto.


1

Às vezes, pode ser um problema associado a ter a chave pública em uma linha, essa abordagem parece resolvê-la

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

para mim, o problema foi que eu criei ~/.ssh/authorized_keysusando o root para que o root possuísse. Eu tive que chown sshuser:sshuser ~/.ssh/authorized_keysentão começou a trabalhar


1

Eu também enfrentei esse erro e o resolvi alterando as permissões do arquivo allowed_keys para 600.

chmod 600 ~/.ssh/authorized_keys

1

O erro comum é que as pessoas usam o editor de texto (como o Vim) e colam o texto copiado antes de ativar a "inserção" (pressione + i no Vim antes de colar)


0

Na verdade, mudei authorized_keysa permissão para 644e resolvi o problema.

chmod 644 ~/.ssh/authorized_keys

0

para depurar o ssh aberto, pode-se usar:

sudo `which sshd` -p 2020 -Dd

executa o sshd em outra porta 2020. executa o sshd como um programa atual para que a saída seja exibida. se fechado, está fechado.

então tente se conectar.

explicação:

  • `which sshd` - localiza o endereço sshd, tente executar qual sshd vê o que é impresso. ao usar aspas, ele executa e retorna o resultado no local.
  • -p 2020 - especifica a porta
  • -D - log para arquivo
  • -d - registra na tela

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


Você poderia expandir essa resposta? O que os argumentos envolvem? O que o comando está fazendo (para alguém não experiente)?
— Zzzach ... 17/04

-1

Eu estava criando os arquivos .ssh e allowed_keys enquanto estava logado como root, o que deu as permissões erradas. Ele também colocou todos os arquivos no diretório raiz.

Alterar a propriedade desses arquivos para o usuário que você deseja não será uma boa prática, por isso refiz minhas etapas e verifiquei se estava conectado como o usuário com o qual desejava utilizar o SSH e criei .ssh e authored_keys novamente.

Instruções para conectar o Win7 ao servidor Xubuntu 15.04: Como criar chaves SSH com Putty para conectar-se a um VPS

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.