Permissão negada (chave pública) quando o acesso SSH à instância do Amazon EC2 [fechado]


355

Quero usar minha instância do Amazon ec2, mas enfrentou o seguinte erro:

Permission denied (publickey).

Eu criei meu par de chaves e baixei o arquivo .pem .

Dado:

chmod  600 pem file.

Então, este comando

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

Mas tem este erro:

Permission denied (publickey)

Além disso, como posso conectar-me ao filezilla para carregar / baixar arquivos?


11
em relação à sua segunda pergunta, se conectar com filezilla a arquivos de upload / download, verificar isso para instruções passo a passo - y2u.be/e9BDvg42-JI
Yasitha Chinthaka

2
você tem certeza que não usar "sudo chmod 600 arquivo pem" isso iria causar esse erro e significa que você precisaria usar sudo antes ssh
felbus

Também para alguns sistemas operacionais Debian, o nome de usuário é admin. Pelo menos para as versões 6.5 e 7.0.
Desenvolvedor

2
Se seu nome de usuário é ec2-user, certifique-se que você não está usando ec2_user:)
grisaitis

2
Verifique se o usuário com o qual você está tentando se conectar tem a chave listada em seu $HOME/.ssh/authorized_keys arquivo.
ILMostro_7 25/04

Respostas:


589

Essa mensagem de erro significa que você não conseguiu se autenticar.

Estes são os motivos comuns que podem causar isso:

  1. Tentando se conectar com a chave errada. Tem certeza de que esta instância está usando esse par de chaves?
  2. Tentando se conectar com o nome de usuário errado. ubuntué o nome de usuário para a distribuição AWS baseado ubuntu, mas em alguns outros é ec2-user(ou adminem alguns Debians, de acordo com a resposta de Bogdan Kulbida) (também pode ser root, fedora, veja abaixo)
  3. Tentando conectar o host errado. É o host certo em que você está tentando fazer login?

Observe que 1.isso também acontecerá se você alterou o /home/<username>/.ssh/authorized_keysarquivo na sua instância do EC2.

Sobre 2., as informações sobre qual nome de usuário você deve usar geralmente estão ausentes na descrição da imagem da AMI. Mas você pode encontrar alguns na documentação do AWS EC2, ponto de referência 4.: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Use o comando ssh para conectar-se à instância. Você especificará o arquivo da chave privada (.pem) e nome_do_usuário @ nome_dns_public. Para Amazon Linux, o nome de usuário é ec2-user. Para RHEL5, o nome do usuário é root ou ec2-user . Para o Ubuntu, o nome de usuário é ubuntu . Para o Fedora, o nome de usuário é fedora ou ec2-user . Para o SUSE Linux, o nome do usuário é raiz . Caso contrário, se o usuário ec2 e o root não funcionarem, verifique com seu provedor de AMI.

Por fim , esteja ciente de que existem muitos outros motivos pelos quais a autenticação falharia. O SSH geralmente é bastante explícito sobre o que deu errado, se você quiser adicionar a -vopção ao seu comando SSH e ler a saída, conforme explicado em muitas outras respostas a esta pergunta.


2
Não acho que a interface ofereça a você adicionar uma chave a uma instância em execução; portanto, você precisará iniciar uma nova se tiver perdido a chave da instância em execução.
Thibault D.

81
# 2 corrigiu meu problema, obrigado!
Rckehoe #

4
Esta resposta resolveu para mim. O nome de usuário padrão para esta instância era "ubuntu", não ec2-user, como foi dito no manual da AWS. Tente usar'ec2-user@_your_EC2_IP.amazonaws.com
emf

7
Com relação ao número 1, chave errada, adicionar -v (detalhado) à linha de comando ssh me mostrou quais chaves estava tentando e que me levaram a perceber que não estava tentando a chave que eu havia gerado porque a havia nomeado algo diferente de id_rsa ou id_dsa.
KC Baltz

3
"ubuntu é o nome de usuário para a distribuição da AWS baseada no ubuntu", é isso que me entendeu. Foi usado para ec2-user, apenas assumiu que sempre foi o nome de usuário.
Nate Reed

48

Nesse caso, o problema surge do par de chaves perdido. Sobre isso:

  • Não há como alterar o par de chaves em uma instância . Você precisa criar uma nova instância que use um novo par de chaves.
  • Você pode solucionar o problema se sua instância for usada por um aplicativo no Elastic Beanstalk .

Você pode seguir estas etapas:

  1. Acesso ao console de gerenciamento da AWS
  2. Abra a guia Elastic Beanstalk
  3. Selecione seu aplicativo na guia Todos os aplicativos
  4. No lado esquerdo menù selecione Configuration
  5. Clique na engrenagem de instâncias
  6. No formulário do servidor, verifique a entrada do par de chaves EC2 e selecione seu novo par de chaves. Pode ser necessário atualizar a lista para ver um novo par de chaves que você acabou de criar.
  7. Salve 
  8. O Elastic Beanstalk criará para você novas instâncias associadas ao novo par de chaves.

Em geral, lembre-se de que você deve permitir que sua instância do EC2 aceite o tráfego SSH de entrada.

Para fazer isso, você deve criar uma regra específica para o grupo de segurança da sua instância do EC2. Você pode seguir estas etapas.

  1. Acesso ao console de gerenciamento da AWS
  2. Abra a guia EC2
  3. Na lista Instâncias, selecione a instância em que você está interessado
  4. Na guia Descrição, selecione o nome do grupo de segurança que sua instância está usando.
  5. Novamente na guia Descrição, clique em Exibir regras e verifique se o seu Grupo de segurança possui uma regra para o tráfego ssh de entrada na porta 22
  6. Caso contrário, nos homens de Rede e segurançaù selecione Grupo de Segurança
  7. Selecione o grupo de segurança usado por sua instância e clique na guia Entrada
  8. À esquerda da guia Entrada, você pode escrever uma regra para o tráfego de entrada SSH:
    • Crie uma nova regra : SSH
    • Origem : endereço IP ou sub - rede da qual você deseja acessar a instância
    • Nota : Se você deseja conceder acesso ilimitado à sua instância, pode especificar 0.0.0.0/0 , embora a Amazon não recomende esta prática
  9. Clique em Adicionar regra e, em seguida, aplique suas alterações
  10. Verifique se agora você pode se conectar à sua instância via SSH.

Espero que isso possa ajudar alguém como me ajudou.


11
A segunda parte da sua resposta está errada. Você não pode obter "Permissão negada (chave pública)". se você não definiu corretamente as configurações do firewall (grupos de segurança). "Permissão negada (chave pública)." é uma mensagem de erro do SSH e é uma prova de que sua configuração de grupos de segurança está correta. Em vez disso, você obteria "ssh: conectar à porta xxxx do host 22: Conexão recusada"
Thibault D.

Longa história: a mensagem de erro informa que esse problema não tem nada a ver com a configuração dos Grupos de Segurança.
Thibault D.

Você está certo. A segunda parte trata de outro tipo de problema. Eu consertei a postagem.
Matteo Ceserani 31 /

Se você perdeu a chave, acho que uma maneira possível de resolver seria tirar um instantâneo da instância e iniciar um novo com uma nova chave. Nesse caso, a Amazon anexa a nova chave pública em .ssh / allowed_keys, portanto, remova a antiga depois. (tenha cuidado para não remover o novo ou retorne ao seu primeiro problema)
Thibault D.

43

Foi assim que resolvi o problema

ssh -i <key> ec2-user@<ec2 ip>

11
Parecia que a chave para mim aqui era o endereço DNS do host vs IP. ec2-user @ <ip> funcionou para mim.
Zack

11
Solução também.
Tpojka 19/09/16

26

Eu resolvi o problema colocando sudoantes

sudo ssh -i mykey.pem myec2.amazonaws.com

Mas a solução adequada é mudar a propriedade primeiro e depois conectar-se como um usuário normal, como Janus Troelsen disse abaixo. No meu caso, seria:

chown wellington:wellington key.pem

Trabalhou para mim (depois de atualizar alguns pacotes)!
User1429980

4
a solução adequada é alterar a propriedade primeiro e depois conectar-se como um usuário normal. use sudo chown wellington:wellington key.pem.
Janus Troelsen

ele está trabalhando, no seu caso, porque você está tentando login que VM no Amazon que o apoio raiz do usuário
Taimoor Changaiz

Eu tinha feito whoami e sudo chown user_name_given_by_whoami xxxx.pem
Chirag Purohit

23

Tente usar

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

OU

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

11
Isso me ajudou. Obrigado pela dica! : D
jehzlau 22/11

22

Outra causa possível desse erro:

Quando o diretório inicial do usuário é gravável em grupo , o usuário não pode efetuar o login.

(Reproduzido na instância do Ubuntu.)


11
+1 Gostaria de ter lido isso há 4 horas !!! Resolvi meu problema em que o rsync -a estava substituindo a permissão da minha pasta ec2-user.
Michael Hobbs

Depois de visualizar meu diretório inicial, não consegui entrar.
Robert Moon

Então, como você faz login em uma máquina que é afetada e não consegue fazer o login?
PKHunter

Corrigir permissões no diretório / home também funciona para mim, obrigado! @AlexPetralia, seu link está quebrado = / mas tem uma postagem no fórum aws falando sobre isso: forums.aws.amazon.com/message.jspa?messageID=334402
Liko

Alguém como Alex Petralia ou @Michael Hobbs pode repassar (ou reafirmar) a solução para isso?
Jakub Langr

7

para a ubuntu 12.04 lts micro instance eu tive que definir o nome de usuário como opção

ssh -i pemfile.pem -l ubuntu dns

isso funcionou para mim, estou surpreso que não faça parte da documentação do aws para realmente discutir usuários que possam ser necessários.
Ben

7

Você precisa executar as seguintes etapas:

  1. Abra seu cliente ou terminal ssh se você estiver usando Linux.
  2. Localize seu arquivo de chave privada e altere seu diretório.
    cd <path to your .pem file>
  3. Execute os comandos abaixo:
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>

Se o ubuntuusuário não estiver trabalhando, tente com ec2-user.


5

Eu lutei com a mesma permissão negada erro aparentemente devido a

key_parse_private2: missing begin marker 

Na minha situação, a causa foi o arquivo de configuração ssh do usuário atual (~ / .ssh / config).

Usando o seguinte:

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

A saída inicial mostrou:

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

... muitas linhas de depuração cortadas aqui ...

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

A terceira linha acima é onde o problema real foi identificado; no entanto, procurei a mensagem de depuração quatro linhas abaixo (acima) e fui enganado. Não há um problema com a chave, mas eu a testei e comparei outras configurações.

Meu arquivo de configuração ssh do usuário redefine o host por meio de uma configuração global não intencional, como mostrado abaixo. A primeira linha do host não deveria ter sido um comentário.

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

Espero que alguém ache isso útil.


4

Esqueci de adicionar o nome de usuário (ubuntu) ao conectar minha instância do Ubuntu. Então eu tentei isso:

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

e a maneira correta era

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

Erro iniciante legítimo. Se você esquecer de adicionar o nome de usuário, ele usará o nome de usuário com o qual você está conectado no seu computador local.
Thiagoult D.

3

Isso já aconteceu comigo várias vezes. Eu usei o Amazon Linux AMI 2013.09.2 e o Ubuntu Server 12.04.3 LTS, ambos no nível gratuito.

Toda vez que lancei uma instância, tenho permissão negada para aparecer. Não verifiquei isso, mas minha teoria é que o servidor não está completamente configurado antes de tentar fazer o ssh nele. Depois de algumas tentativas com permissão negada, espero alguns minutos e consigo me conectar. Se você está tendo esse problema, sugiro esperar cinco minutos e tentar novamente.


Eu esperei 5 minutos. e funcionou. também estou no nível gratuito. graças
Emeka Mbah

2

Aqui está um cenário frustrante possível que produz esse erro:

Se você estiver almoçando uma nova instância de uma AMI criada por outra instância (por exemplo, instância xyz), a nova instância aceitará apenas a mesma chave que a instância A usou. Isso é totalmente compreensível, mas fica confuso porque, durante o processo passo a passo da criação da nova instância, você é solicitado a selecionar ou criar uma chave (na última etapa) que não funcionará.

Independentemente da chave que você criar ou selecionar, apenas a chave que você estava usando, por exemplo, XYZ será aceita pela nova instância.


Uau, eu nunca pensei sobre isso. Usar a chave antiga resolveu o problema para mim. Obrigado.
21414 tolgamorf

Geralmente, ele anexa a nova chave pública ao arquivo allowed_keys, tornando os dois utilizáveis. Já faz um tempo desde que eu testei, mas é o que eu esperava que acontecesse.
Thibault D.

2

Eu lutei com isso por um tempo também até encontrar o seguinte:

eb ssh

Quando você usa isso no diretório do projeto, bingo-bango sem confusão, você está em


2

No meu próprio caso, fiz o seguinte:

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

Eu estava inicialmente usando root@parte e recebi este prompt:

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

2

Estou no Windows com WinSCP . Ele funciona muito bem no File Explorer e no PuTTY SSH Shell para acessar meu Amazon EC2-VPC Linux. Não há nada a ver com chmod pem fileo uso do myfile.ppk convertido por PuTTYgen a partir do arquivo pem .


2

A mesma coisa aconteceu comigo, mas tudo o que estava acontecendo é que a chave privada se perdeu do chaveiro na minha máquina local.

ssh-add -K

adicionou novamente a chave e, em seguida, o comando ssh para conectar retornou ao trabalho.


Isso acontece todas as vezes após a reinicialização e eu preciso executar novamente o comando acima, qualquer solução alternativa para isso.
silentsudo

11
não verificamos isso mesmo, mas a resposta verificada aqui podem ajudar: apple.stackexchange.com/questions/254468/...
Eitan Lavi

1

Este problema pode ser resolvido fazendo login na caixa Ubuntu usando o comando abaixo:

ssh -i ec2key.pem ubuntu@ec2-public-IP

11
Por favor, dê alguns detalhes.
Syeda Zunaira

1

Por duas vezes, as teclas e a linha de comando ssh estão corretas (sei porque estou duplicando uma instância do Ubuntu 14.04 em funcionamento), mas não consegui ssh em uma nova instância, mesmo depois de esperar 5 minutos, conforme sugerido por Wade Anderson acima.

Eu tive que destruir e recriar a máquina. Isso aconteceu em duas ocasiões separadas. Como não consigo entrar inicialmente, não vejo o que há de errado.

Portanto, se você tiver esse problema, tente isso.


1

você deve verificar estas poucas coisas:

  1. Verifique se o seu endereço IP está correto
  2. Verifique se você está usando a chave correta
  3. Certifique-se de estar usando o nome de usuário correto, você pode tentar: 3.1. admin 3.2. usuário ec2 3.3. ubuntu

Eu tive o mesmo problema, e ele resolveu depois que mudei o nome de usuário para o ubuntu. Na documentação da AWS, o usuário ec2-user foi mencionado, mas de alguma forma não funciona para mim.


1

Minha chave privada foi configurada com permissão 400e resultou em Permissão negada definindo-a como '644' me ajudou.

key_load_private_type: permissão negada é o erro específico que eu estava recebendo

Solução: Sudo chmod 644 <key.pem>

Nota: definido como 644 é obrigatório, ele não estava funcionando com 400


1

Quando você tenta fazer

ssh -i <.pem path> root@ec2-public-dns

Você recebe uma mensagem avisando que você deve usar o ec2-user.

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

Então use

ssh -i <.pem path> ec2-user@ec2-public-dns


1

Eu tive o mesmo problema e é muito estranho. Se você acredita que está fazendo tudo de bom, siga estas instruções: Algumas vezes há confusão sobre o usuário para a instância do EC2 !! Algumas vezes você recebe ec2-user, ubuntu, centos etc. Então verifique seu nome de usuário para ver o machie !!

Faça o login com o usuário root ssh -i yourkey.pem (400 permission) root@<ip> Irá gerar um erro e fornecerá o nome de usuário disponível . depois faça o login com esse usuário.


1

É uma coisa básica, mas sempre confirme qual usuário você está tentando fazer o login. Eu sou o meu caso foi apenas uma distração . Eu estava tentando usar um usuário root :

ssh -i ~/keys/<key_name> root@111.111.111.111

Mas foi outro usuário :

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

1

Eu tive o mesmo erro, mas situação diferente. para mim, aconteceu do nada depois de muito tempo, eu consegui ssh com sucesso no meu computador remoto por aí. depois de muita pesquisa na solução do meu problema, havia permissões de arquivo. é estranho, é claro, porque eu não alterei nenhuma permissão no meu computador ou na remota pertencente aos arquivos / diretórios do ssh. então, a partir do bom wiki do archlinux, aqui está:

Para a máquina local, faça o seguinte:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

Para a máquina remota, faça o seguinte:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

depois disso, meu ssh começou a trabalhar novamente sem a permissão negada (publickey).


0

Outro possível problema: ID de login incorreto

Marque 'Instruções de uso'

Todas as boas sugestões acima, mas o que encontrei foi que selecionei uma instância pré-criada. Após o início da instância, consulte as instruções de uso. Usei incorretamente o ID de login da chave privada quando nas instruções eu deveria usar 'bitnami' (por exemplo, bitnami @ domain -i key.pem)


0

Erro semelhante

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

Meu problema foi que a instância não foi iniciada corretamente devido a erro no script de execução na inicialização de Step 3: Configure instance detail emAdvanced details:

O que eu pensei ter inserido:

#include
 https://xxxx/bootstrap.sh


O que realmente entrou interrompe a configuração da instância

#include

https://xxxx/bootstrap.sh

Portanto, a chave pública no lado da instância não foi criada


0

É sensível a maiúsculas.

Errado: usuário SSH EC2 @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

Correto: SSH ec2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem


-1

Consegui fazer o SSH de uma máquina, mas não de outra. Acontece que eu estava usando a chave privada errada.

A maneira como eu descobri isso foi obtendo a chave pública da minha chave privada, assim:

ssh-keygen -y -f ./myprivatekey.pem

O que saiu não correspondeu ao que estava na ~/.ssh/authorized_keysinstância do EC2.


-1

Todas as respostas mais bem classificadas acima são precisas e devem funcionar na maioria dos casos. No caso de eles não funcionarem como no meu caso, simplesmente me livrei do meu ~/.ssh/known_hostsarquivo na máquina da qual estava tentando ssh e isso resolveu o problema para mim. Eu consegui me conectar depois.


Embora a exclusão known_hostspossa resolver um problema ao conectar-se ao servidor que alterou sua chave do host (embora seja uma abordagem ruim de qualquer maneira), tenho certeza de que não pode resolver o erro "Permissão negada (chave pública)" .
Martin Prikryl
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.