Como eu adiciono chaves SSH ao arquivo authorized_keys?

138

Eu tenho um servidor Ubuntu no Amazon EC2, que eu uso para desenvolvimento, e hoje eu estupidamente limpei tudo do meu arquivo ~/.ssh/authorized_keys . Felizmente eu tenho um SSH aberto, então ainda estou conectado e posso consertar o arquivo, mas quando tento colocar meu arquivo de chave de volta, ele não funciona. Ainda recebo permissão negada do servidor na minha máquina local.

authorized_keys tem as permissões 600. Eu tentei anexar minha chave SSH com ssh-rsa e deixar o ssh-rsa desativado. Eu também tentei transformar a chave SSH em uma única linha, mas isso também não funcionou.

Há algo mais que eu tenho que fazer como recarregar o arquivo de alguma forma?

    
por Dave Long 01.06.2011 / 18:02

9 respostas

161

Você deve nunca salvar o arquivo com seu conteúdo começando com -----BEGIN RSA PRIVATE KEY----- no servidor, ou seja, sua chave privada . Em vez disso, você deve colocar a chave pública no arquivo ~/.ssh/authorized_keys .

Essa chave pública tem a extensão .pub quando gerada usando ssh-keygen e seu conteúdo começa com ssh-rsa AAAAB3 . (O formato binário é descrito nas respostas a esta questão ).

As permissões de ~/.ssh no servidor devem ser 700. O arquivo ~/.ssh/authorized_keys (no servidor) deve ter um modo de 600. As permissões da chave (privada) no lado do cliente devem ser 600.

Se a chave privada não foi protegida com uma senha e você a colocou no servidor, recomendo que você gere uma nova:

ssh-keygen -t rsa

Você pode ignorar isso se tiver certeza absoluta de que ninguém pode recuperar a chave privada excluída do servidor.

Se isso não ajudar, execute ssh com opções para mais verbosidade:

ssh -vvv [email protected]

No lado do servidor, você pode analisar /var/log/auth.log para detalhes.

    
por Lekensteyn 01.06.2011 / 18:29
139

Uma maneira alternativa de instalar sua chave pública na máquina remota authorized_keys :

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Algumas vantagens:

  • não requer que o ssh-copy-id esteja instalado.

  • garante que mkdir funcione antes de tentar adicionar id_rsa.pub a authorized_keys .

por Marius Butuc 27.02.2013 / 20:31
112

Se você tiver autenticação baseada em login, use ssh-copy-id para anexar suas chaves públicas a servidor remoto.

ssh-copy-id user@host
    
por Shoaib Nawaz 01.06.2011 / 18:32
31
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit
    
por jjg 01.06.2011 / 20:23
5

A maneira mais fácil é copiar e colar ...

Primeiro, visualize / copie o conteúdo da sua chave pública local id_rsa.pub , incluindo o início "ssh-rsa", até que termine com o seu endereço de e-mail:

cat ~/.ssh/id_rsa.pub

Em seguida, edite authorized_keys no servidor e cole o conteúdo da sua área de transferência abaixo de qualquer outra chave nesse arquivo:

nano ~/.ssh/authorized_keys

E salve Ctl+O , saia do arquivo Ctl+X , saia da sessão SSH exit e tente fazer login novamente para confirmar se funcionou. Se não pedisse uma senha, funcionaria.

    
por ow3n 07.09.2015 / 20:42
2

Depois de salvar a chave pública, você deve salvar a chave privada em um diretório e arquivo no seu pc. E na seção auth do ssh on putty você deve apontar para o arquivo de chave privada que você salvou na sua área de trabalho. Vai funcionar. Isso funciona para mim.

    
por user273266 23.04.2014 / 21:59
2

Eu pensei que posso contribuir com isso, já que é especificamente sobre as instâncias da AWS e todas as respostas tratam o problema apenas como um problema do Linux, como se fosse uma peça de hardware. A primeira coisa que você precisa entender é que você nunca, nunca, deve tratar as instâncias do EC2 como hardware. Isso só vai criar mais trabalho para você. Trate-os como voláteis. Esse é o maior obstáculo que vejo pessoas tendo com a AWS. Faça uma AMI da sua instância e injete a chave que você precisa na nova instância. O cloud-init cuidará disso para você. Mais detalhadamente, tudo o que você precisa fazer é usar a chave pública correta ao criar a nova instância fora da AMI do original. Se, como nos comentários da resposta aprovada, você quiser gerar seu próprio par de chaves de arquivos pub e pem, a AWS fornecerá a opção de carregar suas chaves públicas para uso no EC2.

    
por einarc 03.03.2016 / 02:22
0

Obtenha um shell na máquina remota onde deseja colocar a chave e, em seguida, execute este one-liner para criar os arquivos e diretórios necessários, definir suas permissões e anexar a chave ao arquivo. É claro que você tem que alterar a parte KEYGOESHERE abaixo e o comentário depois dela.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys
    
por Sarel Botha 07.12.2016 / 21:33
0

Aqui está uma variação na qual você pode ter uma lista de nomes de arquivos de chave pública em um arquivo de texto e o grande lote de arquivos de chave pública também está no mesmo diretório.

Esta variação pode ser útil se você estiver dando uma lista enorme de arquivos de chave pública para importar: -)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
    
por jlmontes 23.08.2016 / 19:32