Tentando fazer o SSH em uma instância do Amazon Ec2 - erro de permissão


745

Esta é provavelmente uma pergunta estupidamente simples para alguns :)

Criei uma nova instância linux no Amazon EC2 e, como parte disso, baixei o arquivo .pem para permitir o SSH.

Quando tentei ssh com:

ssh -i myfile.pem <public dns>

Eu tenho:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Após este post , tentei chmod +600 o arquivo pem, mas agora quando ssh eu apenas recebo:

Permission denied (publickey).

Que erro de estudante estou cometendo aqui? O arquivo .pem está na minha pasta pessoal (em osx). Suas permissões são assim:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
Este erro também ocorre quando você está usando um arquivo pem errado.
Rahul Prasad 23/11

Verifique também se você criou sua instância DEPOIS de criar e selecionar o par de chaves como a chave designada a ser usada. Eu fiz isso ao contrário.
Gary

Estou no Windows com WinSCP. Não há nada a ver com chmod 400 myfile.pemo uso myfile.ppkgerado pelo PuTTYgen a partir do arquivo pem.
Chetabahana 17/07/2016

Este erro também pode ocorrer quando você não está efetuando login com o usuário certo;)
andrea06590

Respostas:


1462

O problema está no mod errado no arquivo.

Resolvido facilmente executando -

chmod 400 mykey.pem

Retirado das instruções da Amazon -

Seu arquivo de chave não deve estar visível publicamente para o SSH funcionar. Use este comando, se necessário: chmod 400 mykey.pem

400 protege-o, tornando-o somente leitura e somente para o proprietário.


3
Muito obrigado! O que faz o chmod 400? para mykey.pem?
Costa

19
400 protege-o, tornando-o somente leitura e somente para o proprietário.
Kof

1
Depois disso, recebo "Aviso: o arquivo de identidade blabla.pem não está acessível: esse arquivo ou diretório" não é exibido quando ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
Coolcool1994

3
Este comando + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPcorrigiu o problema. Talvez esta deve ser a resposta aceita ...
c4k

1
Como posso executar o mesmo para o windows?
Ahsan Mukhtar

262

Você provavelmente está usando o nome de usuário errado para fazer o login:

  • a maioria das imagens do Ubuntu tem um usuário ubuntu
  • O AMI da Amazon é ec2-user
  • a maioria das imagens do Debian tem rootouadmin

Para fazer login, você precisa ajustar seu comando ssh:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
ou ssh -i key.pem ubuntu @ servername
jsh

43
A mensagem de erro diz tudo: o arquivo .pem cert não está protegido o suficiente. Execute o chmod 400 xyz.pem conforme sugerido abaixo.
allprog

1
@allprog para mim isso só faz com que ele a dizer Permission denied (publickey).e nada mais ...
Aram Kocharyan

1
Eu encontrei o problema - eu não estava usando a mesma chave I criou a instância com
Aram Kocharyan

12
Essa não é a solução - as permissões de arquivo no arquivo-chave baixado são 844 por padrão. deve ser 400 chmod 500 <path_to_pem_file>deve fazê-lo.
Elad Meidar

62

Eu sei que isso é muito tarde para o jogo ... mas isso sempre funciona para mim:

passo 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

passo 2, basta ssh :)

ssh user_name@<instance public dns/ip>

por exemplo

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

espero que isso ajude alguém.


"ssh-add" é o mesmo que copiar apenas o arquivo * .pem para a pasta ~ / .ssh?
アレックス

1
>> apenas copiando o arquivo * .pem para a pasta ~ / .ssh Não é o mesmo, você deve adicionar à pasta e executar o comando ssh-add.
super_p

Muito tarde para o jogo, mas para adicionar alguns esclarecimentos ... 1. adicione o arquivo .pem ao diretório ~ / .ssh (crie-o se necessário), 2. use o comando ssh-add para adicionar a identidade à autenticação agente; isto significa nunca ter que especificar o arquivo .pem ao usar ssh
Ian Atkin

2
Após o ssh-add ¬ / .ssh / key.pem; Obtendo o erro Não foi possível abrir uma conexão com seu agente de autenticação. eval ssh-agent -srelata SSH_AGENT_PID = 3409; ssh-add dá o mesmo erro que o anterior ......... Qualquer ajuda aqui plz
Tariq

Uau, isso seria muito conveniente para todas as minhas conexões futuras com o meu VPS. Obrigado companheiro :)
Ahmad Mushtaq

36

Ok, cara, a única coisa que funcionou para mim foi:

  1. Alterar permissões da chave

    chmod 400 mykey.pem

  2. Certifique-se de fazer login usando o usuário ec2 e o endereço correto ec2-99 .... O endereço ec2-99 fica na parte inferior do console do aws quando você faz login e vê sua instância listada

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


Não consigo encontrar o endereço ec2-99. Você pode por favor me ajudar?
Adil Malik

1
chmod 400 mykey.pem entre com o ubuntu da seguinte maneira: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Gal Bracha

27

Dê uma olhada neste artigo . Você não usa o DNS público, mas o formulário

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

onde o nome está visível no seu painel AMI


Felicidades pelo artigo, muito útil!
Matt Roberts

pequena melhoria: ao tentar fazer login como root, o aws solicita o seguinte: "Faça o login como o usuário ec2-user em vez de root."
Andre Schweighofer

como faço para descobrir qual é o meu ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com?
アレックス

Console de gerenciamento> EC2> Instâncias e selecione sua instância.
renick

O 'root @' é o que todo mundo está faltando nesta resposta. Seu ajudou! Isso e chmod.
precisa saber é o seguinte


13

No Windows, você pode ir para as propriedades do arquivo pem, e ir para a guia segurança, depois para avançar no botão.

remova a herança e todas as permissões. então conceda a si mesmo o controle total. afinal, o SSL não fornecerá o mesmo erro novamente.


7

Eu sei que esta pergunta já foi respondida, mas para aqueles que tentaram todas elas e você ainda está recebendo a irritante "Permissão negada (chave pública)". Tente executar seu comando com SUDO. Obviamente, essa é uma solução temporária e você deve definir permissões corretamente, mas pelo menos isso permitirá que você identifique que seu usuário atual não está executando os privilégios necessários (como você supôs)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Depois de fazer isso, você receberá uma mensagem como esta:

Please login as the user "ec2-user" rather than the user "root"

O que também é escassamente documentado. Nesse caso, faça o seguinte:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

E você terá o glorioso:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
Obrigado .. Ainda estava recebendo erro depois de tentar todas as opções mencionadas acima. Executar ssh com sudo funcionou para mim.
Gursharan Singh

Gostaria de saber por que tenho que executar isso no sudo. Eu tentei chmod 400 xyz.pem, mas não ajudou.
Samuel Dominguez

6

No terminal Mac, fazer "chmod 400 xyz.pem" não me ajudou, continuava dizendo permissão negada. Para usuários do Ubuntu, eu sugeriria

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (observe que o usuário é ubuntu)

4

Práticas recomendadas de chaves SSH e permissão de arquivo:

  • Diretório .ssh - 0700 (apenas pelo proprietário)
  • chave privada / arquivo .pem - 0400 (somente leitura pelo proprietário)
  • chave pública / arquivo .pub - 0600 (somente leitura e gravação pelo proprietário)

    chmod XXXX file/directory


3

usuário ssh -i /.pem @ host-machine-IP

Eu acho que é porque você inseriu credenciais incorretas ou está usando uma chave pública em vez de privada ou suas permissões de porta estão abertas para que ALL seja ssh. Isso é ruim para a Amazon.


3

Logon alternativo usando o PuTTY. É bom, mas precisa de alguns passos.

  1. Obtenha seu .pem que foi gerado quando você criou a instância do EC2.
  2. Converta o arquivo .pem .ppk usando PuttyGen, pois o PuTTY não lê .pem.
  3. Abra o PuTTY e digite seu Nome do host, que é o nome de usuário da sua instância + DNS público (por exemplo, ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). Não é o nome de usuário da sua conta da AWS.
  4. Em seguida, navegue para Conexão> SSH> Autenticação . Em seguida, adicione seu arquivo .ppk . Clique em Procurar, onde se lê "Arquivo de chave privada para autenticação" .
  5. Clique em Abrir e você poderá estabelecer uma conexão imediata.

Estou usando o PuTTY 0,66 no Windows.


Isso funciona, mas existe uma maneira de fazer a conexão ssh funcionar diretamente na linha de comando?
Ariel

3

Além das outras respostas, aqui está o que eu fiz para que isso funcionasse:

  • Copie a chave para a pasta .ssh se você ainda não tinha:

cp key.pem ~/.ssh/key.pem

  • Dê as permissões apropriadas para a chave

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Em seguida, adicione a chave

ssh-add ~/.ssh/key.pem

Agora você deve poder ssh EC2 (:


2

Faça um chmod 400 yourkeyfile.pem Se sua instância for Amazon linux, use ssh -i yourkeyfile.pem ec2-user @ ip para ubuntu ssh -i yourkeyfile.pem ubuntu @ ip para centos ssh -i yourkeyfile.pem centos @ ip


2

Pode haver três razões por trás desse erro.

  1. Você está usando uma chave errada.
  2. Sua chave não tem as permissões corretas. Você precisa chmod para 400.
  3. Você está usando o usuário errado. As imagens do Ubuntu têm um usuário ubuntu , a AMI da Amazon é ec2-user e as imagens do debian têm root ou admin

2

O problema para mim foi que meu arquivo .pem estava em uma das minhas partições NTFS. Eu mudei para a minha partição linux (ext4).

Deu as permissões necessárias executando:

chmod 400 my_file.pem

E funcionou.


2

Bem, olhando para a descrição do seu post, sinto que houve 2 erros cometidos por você: -

  1. Defina as permissões corretas para a chave privada . O comando abaixo deve ajudá-lo a definir a permissão correta de arquivo.

    chmod 0600 mykey.pem

  2. Usuário ec2 errado no qual você está tentando fazer login .

    Olhando para o seu log de depuração, acho que você gerou uma instância do Amazon linux. O usuário padrão para esse tipo de instância é ec2-user. Se a instância tivesse sido no ubuntu, seu usuário padrão teria sido ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

fonte: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

Lista de controle:

  1. Você está usando o arquivo .pem de chave privada certo?

  2. Suas permissões estão definidas corretamente? (Minhas AMIs da marca Amazon funcionam com 644, mas a Red Hat deve ter pelo menos 600 ou 400. Não conheço o Ubuntu.)

  3. Você está usando o nome de usuário correto na sua linha ssh? Marca Amazon = "usuário ec2", Red Hat = "root", Ubuntu = "ubuntu". O usuário pode ser especificado como "ssh -i pem nome de usuário @ nome do host" OU "ssh -l nome de usuário -i pem nome do host"


1

Basta alterar a permissão do arquivo pem para 0600, permitindo apenas o usuário permitido, e ele funcionará como um encanto.

sudo chmod 0600 myfile.pem

E então tente ssh, ele funcionará perfeitamente.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

Por permissão padrão, não estão permitindo a chave pem. Você apenas precisa alterar a permissão:

chmod 400 xyz.pem

e se instância do ubuntu, conecte-se usando:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

O arquivo de chave não deve ser visualizado publicamente, portanto, use a permissão 400

chmod 400 keyfile.pem

Se o comando acima mostra erro de permissão, use

sudo chmod 400 keyfile.pem

Agora ssh na máquina ec2, se você ainda enfrentar o problema, use ec2-user

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400 protege-o, tornando-o somente leitura e somente para o proprietário.
Você pode encontrar a resposta no guia ASW.

chmod 400 yourPrivateKey.pem

insira a descrição da imagem aqui


0

A seguir estão as etapas simples para o usuário Linux se conectar ao servidor usando o arquivo .pem:

Etapa 1: Para o local do arquivo pem e copie-o para o local .ssh inicial.

cp example.pem ~/.ssh/example.pem

Etapa 2: alterar a permissão

chmod 400 ~/.ssh/example.pem

Etapa 3: Execute o seguinte comando

ssh -i ~/.ssh/example.pem ec2-user@host.com

Como esse comando é muito longo, você deve criar o alias usando os seguintes comandos:

 vim ~/.bashrc

Escreva o mesmo comando da seguinte maneira no final.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

Agora reinicie o sistema e use sshConnectpara conectar-se ao seu servidor.


0

É apenas um problema de permissão com sua chave aws pem.

Apenas altere a permissão da chave pem para 400 usando o comando abaixo.

chmod 400 pemkeyname.pem

Se você não tem permissão para alterar a permissão de um arquivo, pode usar o comando sudo like below.

sudo chmod 400 pemkeyname.pem

Espero que isso funcione bem.


0

Vi duas razões por trás desse problema

1) a chave de acesso não tem a permissão correta. chaves pem com permissão padrão não têm permissão para fazer uma conexão segura. Você apenas precisa alterar a permissão:

chmod 400 xyz.pem

2) Verifique também se você efetuou login com credenciais de usuário adequadas. Caso contrário, use sudo ao conectar

sudo ssh -i {arquivo de chave} ec2-user @ {endereço IP do host remoto}


0

Sua chave não deve estar visível publicamente para o SSH funcionar. Use este comando, se necessário:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Exemplo:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

Ignore esta resposta se for irrelevante para você, mas, pela minha experiência, vi pessoas com problemas Permission denied (publickey)porque simplesmente colaram sua chave pública (em uma máquina de destino) sem a primeira letra !

Isso acontece ao usar o vim para editar (colar) a chave. Como o vim, por padrão, é aberto no modo de comando (não no modo de inserção ), colar a tecla sem alternar para o modo de inserção (ou seja i) resultará em pular a primeira sletra, por exemplo, em vez de

ssh-rsa <key>

você acaba colando

sh-rsa <key>

Portanto, antes de tentar outras soluções, verifique se você colou sua chave corretamente ! ie

cat ~/.ssh/id_rsa.pub

Somente se tiver certeza, execute as próximas etapas; tentar ssh em um modo detalhado (ou seja, sinalizador -v) pode indicar o problema real:

ssh -v -i <private_key> <name>@<ip> -p <port>

Como uma observação lateral, como já foi mencionado aqui por outras pessoas, na maioria dos casos, iniciar um agente ssh vazio (programa que mantém suas chaves na memória) e adicionar sua chave deve resolver o problema:

ssh-agent bash
ssh-add <private_key>

-1

O que corrigiu isso para mim foi mover o arquivo .pem dentro do diretório de aplicativos. Então, digamos que fooapp é o nome do meu aplicativo. Coloquei diretamente lá.


-2

Às vezes, pode haver um erro na pasta. Eu não sei porque...

Você pode alterar a pasta e tentar novamente. Por exemplo, você pode experimentar nas pastas comuns (área de trabalho, downloads e etc.).

Eu tentei esse método e funcionou


-2

Este erro ocorre apenas devido à permissão.

Apenas dê a permissão 400

#chmod 400 pemfilepath


permissão muito aberta. ruim!!
sheelpriy
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.