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: "[email protected]"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
[email protected]
---- END SSH2 PUBLIC KEY ----

Copiei a parte de "ssh-rsa AAA" para "[email protected]" 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]
Forkbeard
fonte

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!

Forkbeard
fonte
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
kuraara
fonte
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).

Mischa
fonte
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 ~
Michal Zmuda
fonte
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
dopple
fonte
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.

Paulo
fonte
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.

zach
fonte
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.

Mark Lakata
fonte
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
dav
fonte
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

AmendoimPower
fonte
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
Kaleem
fonte
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)

hakabe
fonte
0

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

chmod 644 ~/.ssh/authorized_keys
Peter Liang
fonte
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

Shimon Doodkin
fonte
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

Leo Fisher
fonte