Questão Como faço para adicionar chaves SSH ao arquivo authorized_keys?


Eu tenho um servidor Ubuntu no Amazon EC2, que eu uso para desenvolvimento, e hoje eu estupidamente apaguei tudo do meu ~/.ssh/authorized_keys Arquivo. 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 acrescentar 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.

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


148
2018-06-01 16:02


origem


Anos depois, isso ainda parece relevante e ativo; só queria fazer uma observação, falar de ter evitado uma bala: "Por sorte tenho um SSH aberto, então ainda estou conectado [..]" - sheesh! dP - Nostromov
Este post, que foi editado no meu aniversário, me salvou dois meses atrás no meu aniversário. - ytpillai


Respostas:


Você deve Nunca salve o arquivo com seu conteúdo começando com -----BEGIN RSA PRIVATE KEY----- no servidor, essa é a sua privado chave. Em vez disso, você deve colocar o público chave para o ~/.ssh/authorized_keys Arquivo.

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

As permissões de ~/.ssh no servidor deve 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 user@example.com

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


171
2018-06-01 16:29



Com os servidores do Amazon EC2, tudo que consigo é a chave privada (key.pem). Eu não tenho uma chave pública em nenhum lugar. - Dave Long
@Dave Long: Você deve gerar uma nova chave usando ssh-keygen -t rsa e colocar o recém-criado id_rsa.pub arquivo em ~/.ssh/authorized_keys no seu servidor. Veja também docs.amazonwebservices.com/AWSEC2/latest/UserGuide/… - Lekensteyn
@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
@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
@Gerrat Fixed². - Lekensteyn


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-id Ser instalado.

  • garante que mkdir funciona antes de tentar anexar id_rsa.pub para authorized_keys.


147
2018-02-27 19:31



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 / authorized_keys" serão criados com as permissões corretas. - Nick
@Nick, eu tive esse problema. Então talvez alguém realmente precise primeiro checar sua existência, caso falte criar corretamente com chmod (700 / folder, 600 / file), e só então adicionar? então talvez não seja um forro? - AnneTheAgile
@AnneTheAgile Eu acho que mudar o mkdir -p ~/.ssh parte da resposta dada por @MariusButuc para umask 077 && mkdir -p ~/.ssh é tudo que você precisa fazer para garantir que funcione corretamente. - Nick
ty @Nick! Eu vou dar uma chance. - AnneTheAgile


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

ssh-copy-id user@host

115
2018-06-01 16:32



Isso não parece ser um comando válido no Mac, que é o que minha máquina cliente é. - Dave Long
Pode ser útil phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x - Shoaib Nawaz
no OSX você pode instalar com brew: brew install ssh-copy-id - phil
Em Macports, este comando pode ser instalado usando sudo port install openssh +ssh_copy_id. o +ssh_copy_id instala o openssh com a variante ssh_copy_id. - Stefan Lasiewski
Note que as instruções em phildawson.tumblr.com pedem que você instale software não confiável, como root. Isso é muito perigoso e uma boa maneira de ser hackeado, a menos que você saiba que pode confiar no autor. - Stefan Lasiewski


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

32
2018-06-01 18:23





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 começo "ssh-rsa" até que termine com o seu endereço de e-mail:

cat ~/.ssh/id_rsa.pub

Então 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 salvar Ctl+O, saia do arquivo Ctl+X, saia da sessão SSH exit e tente fazer o login novamente para confirmar se funcionou. Se não pedisse uma senha, funcionaria.


7
2017-09-07 18:42





Depois de salvar a chave pública, você deve salvar a chave privada em um diretório e arquivo no seu computador. 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. Funciona para mim.


3
2018-04-23 19:59



Eu adoraria se o console do Windows pudesse ter toda a funcionalidade ssh adicionada em seu interpretador - Dennis


Eu pensei que posso contribuir com isso, pois é sobre as instâncias da AWS especificamente e todas as respostas tratam apenas o problema 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.

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


3
2018-03-03 01:22





Obter um shell na máquina remota onde você deseja colocar a chave e, em seguida, você pode executar este one-liner para criar os arquivos e diretórios necessários, definir suas permissões e acrescentar a chave para o arquivo. Claro que você tem que mudar o KEYGOESHERE parte 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

1
2017-12-07 20:33





Aqui está uma variação em que 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ão no mesmo diretório.

Essa 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

1
2017-08-23 17:32