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  [email protected]

Mas tem este erro:

Permission denied (publickey)

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

Kashiftufail
fonte
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.

Thibault D.
fonte
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.

Matteo Ceserani
fonte
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>
Deepti Kohli
fonte
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
Wellington Lorindo
fonte
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>
Abhishek Gupta
fonte
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.)

Stepan
fonte
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
dc10
fonte
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.

Rabinarayan Panigrahi
fonte
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.

Ben Paz
fonte
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 [email protected]
JohnP
fonte
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.

Wade Anderson
fonte
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.

Buscador
fonte
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

JedA
fonte
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".
AJNinja
fonte
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 .

Chetabahana
fonte
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.

eiTan LaVi
fonte
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
Prajith
fonte
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.

Greg Bell
fonte
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.

Mehran
fonte
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

Kuldeep Dangi
fonte
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

Jerome Anthony
fonte
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.

Manoj Sahu
fonte
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> [email protected]

Mas foi outro usuário :

ssh -i ~/keys/<key_name> [email protected]
Andre Araujo
fonte
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).

Azriel
fonte
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)

Mike Q
fonte
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

RNA
fonte
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

Tanmay
fonte
-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.

Petko M
fonte
-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.

pbegle
fonte
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