Como adiciono chaves SSH ao arquivo allowed_keys?

185

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

authorized_keystem as permissões 600. Tentei anexar minha chave SSH com o ssh-rsa e deixar o ssh-rsa desativado. Também tentei criar 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?

Dave Long
fonte
3
Anos depois, isso ainda parece relevante e ativo; só queria fazer uma observação, falar sobre ter esquivado uma bala: "Felizmente eu tenho um SSH aberto, então ainda estou conectado [..]" - sheesh! ; dP
Nostromov 15/03
1
Esta postagem, editada no meu aniversário, me salvou há dois meses no meu aniversário.
ytpillai

Respostas:

198

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

Essa chave pública possui a .pubextensão quando gerada usando ssh-keygene seu conteúdo começa com ssh-rsa AAAAB3. (O formato binário é descrito nas respostas a esta pergunta ).

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

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

ssh-keygen -t rsa

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

Se isso não ajudar, execute as sshopções para obter mais detalhes:

ssh -vvv [email protected]

No lado do servidor, você pode revisar /var/log/auth.logpara obter detalhes.

Lekensteyn
fonte
1
Com os servidores Amazon EC2, tudo o que recebo é a chave privada (key.pem). Eu não tenho uma chave pública em lugar nenhum.
Dave Longo
3
@Dave Long: Você deve gerar uma nova chave usando ssh-keygen -t rsae colocar o id_rsa.pubarquivo recém-criado ~/.ssh/authorized_keysno seu servidor. Consulte também docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn
15
@DaveLong: você pode gerar a chave pública a partir da chave privada a qualquer momento. Você pode fazer isso simplesmente com o seguinte comando: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne
5
@MorganBlackthorne Embora isso seja verdade, eu recomendaria gerar suas chaves privadas em vez de aceitar uma de fontes remotas. Você não pode ter certeza absoluta de que a chave privada não vazou.
Lekensteyn
2
@Gerrat Fixed².
Lekensteyn
175

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 ssh-copy-idinstalação.

  • garantias que mkdirfunciona antes de tentar anexar id_rsa.puba authorized_keys.

Marius Butuc
fonte
10
Sua resposta me ajudou a fazer isso em várias máquinas remotas sem nenhum pacote adicional, obrigado.
nol
Isso não garante que o diretório "~ / .ssh" e o arquivo "~ / .ssh / allowed_keys" sejam criados com as permissões corretas.
Nick
1
@ Nick, eu tive esse problema. Então talvez seja necessário primeiro verificar a existência deles, se estiver faltando, crie corretamente com o chmod (700 / pasta, 600 / arquivo) e só então adicione? então talvez não possa ser um liner?
AnneTheAgile 7/08
7
@AnneTheAgile Acho que mudar a mkdir -p ~/.sshparte da resposta dada por @MariusButuc umask 077 && mkdir -p ~/.sshé tudo o que você precisa fazer para garantir que funcione corretamente.
Nick
1
ty @Nick! Eu vou tentar.
AnneTheAgile 7/08
128

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

ssh-copy-id user@host
Shoaib Nawaz
fonte
1
Esse não parece ser um comando válido no Mac, que é o meu computador cliente.
Dave Longo
13
no OSX você pode instalar com o brew:brew install ssh-copy-id
phil
No Macports, este comando pode ser instalado usando sudo port install openssh +ssh_copy_id. A +ssh_copy_idinstalação do openssh com a variante ssh_copy_id.
Stefan Lasiewski
6
Observe que as instruções em phildawson.tumblr.com solicitam a instalação de software não confiável, como root. Isso é bastante perigoso e uma boa maneira de ser hackeado, a menos que você saiba que pode confiar no autor.
Stefan Lasiewski
38
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
jjg
fonte
16

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

Primeiro visualize / copie o conteúdo da sua chave pública local, id_rsa.pubincluindo o início "ssh-rsa" até terminar com o seu endereço de email:

cat ~/.ssh/id_rsa.pub

Em seguida, edite authorized_keysno 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 exite tente fazer login novamente para confirmar que funcionou. Se não pedisse uma senha, funcionava.

ow3n
fonte
5

Pensei em contribuir com isso, já que se trata especificamente de instâncias da AWS e todas as respostas tratam o problema apenas como um problema do Linux, como se fosse um pedaço de hardware. A primeira coisa que você precisa entender é que nunca deve nunca tratar as instâncias do EC2 como hardware. Isso apenas criará mais trabalho para você. Trate-os como voláteis. Esse é o maior obstáculo que vejo pessoas enfrentando com a AWS. Faça uma AMI da sua instância e injete a chave necessária 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 a partir da AMI do original. Se, como nos comentários da resposta aprovada, você deseja gerar seu próprio par de chaves de arquivos pub e pem, a AWS fornece a opção de fazer upload de suas chaves públicas para uso no EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

einarc
fonte
3

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 área de trabalho. Vai funcionar. Funciona para mim.

user273266
fonte
1
Eu adoro isso, se consola janelas poderia ter toda a funcionalidade ssh adicionado para ela, do intérprete
Dennis
2

Obtenha um shell na máquina remota em que deseja colocar a chave e, em seguida, você pode executar esse procedimento para criar os arquivos e diretórios necessários, definir suas permissões e anexar a chave ao arquivo. Claro que você precisa alterar a KEYGOESHEREparte abaixo e o comentário depois.

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
Sarel Botha
fonte
1

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.

Essa variação pode ser útil se você estivesse fornecendo 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
jlmontes
fonte