Não foi possível conectar-se à instância do AWS EC2 - "Falha na verificação da chave do host"


13

Eu havia configurado uma instância do Ubuntu com um pacote Rails, implantado meu aplicativo e ele está funcionando bem.

Mas quando eu tento fazer SSH, não é me permitindo o login remoto e gera erros como: Host key verification failed.

O problema parece ser persistente. Anexei o IP Elastic a essa instância e não consigo ver o DNS público.

Minha instância está sendo executada na região de Cingapura.

ssh saída de depuração:

OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 Sep 2011
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 46.137.253.231 [46.137.253.231] port 22.
debug1: Connection established.
debug1: identity file st.pem type -1
debug1: identity file st.pem-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.5p1 Debian-4ubuntu6
debug1: match: OpenSSH_5.5p1 Debian-4ubuntu6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is.
Please contact your system administrator.
Add correct host key in /home/ubuntu/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/ubuntu/.ssh/known_hosts:1
  remove with: ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R 46.137.253.231
RSA host key for 46.137.253.231 has changed and you have requested strict checking.
Host key verification failed.

Você precisa nos dizer os erros reais exatos que recebeu. Não é útil nos dizer como foi um dos erros.
David Schwartz

Respostas:


18

Quando você se conecta a um servidor ssh, seu cliente ssh mantém uma lista de hosts confiáveis ​​como pares de valores-chave de impressão digital de servidor IP e ssh. Com o ec2, você geralmente reutiliza o mesmo IP em várias instâncias do servidor, o que causa conflito.

Se você se conectou a uma instância anterior do ec2 com esse IP e agora se conecta a uma nova instância com o mesmo IP, seu computador reclama de "Falha na verificação do host", pois seu par armazenado anteriormente não corresponde mais ao novo par.

A mensagem de erro informa como corrigi-lo:

Chave RSA ofensiva em /home/ubuntu/.ssh/known_hosts:1
remova com: ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R 46.137.253.231 "

Alternativa simplesmente abra /home/ubuntu/.ssh/known_hosts e exclua a linha 1 (conforme indicado pelo ": 1").

Agora você pode se conectar e receber uma nova verificação de host.

Observe que normalmente o arquivo known_hosts do ssh geralmente armazena um segundo par de linhas para o nome do host ou o valor ip6, portanto, você pode precisar remover algumas linhas.

Aviso: a verificação do host é importante e é um bom motivo para você receber esse aviso. Verifique se você está esperando a verificação do host falhar. Não remova o par de valores-chave de verificação, se não tiver certeza.


Eu fiz isso. Agora estou recebendo este erro: Permissão negada (chave pública). Alguma idéia de como resolver isso, porque o arquivo de chave pública foi bom o suficiente na última vez em que acessei meu servidor da AWS.
Najeeb

11

A resposta da @flurdy é boa como uma resolução única.

Mas se você costuma:

  • lançar novas instâncias do EC2,
  • iniciar e parar instâncias do EC2,

..sem usar IPs elásticos (permanentemente conectados aos seus servidores), você lida com novos / alterando IPs / nomes de host de suas instâncias o tempo todo .

Nesse caso, convém interromper permanentemente a verificação do SSH e o armazenamento de impressões digitais do servidor para nomes de host públicos do EC2 .


Para fazer isso, basta adicionar isso ao seu ~/.ssh/config:

# AWS EC2 public hostnames (changing IPs)
Host *.compute.amazonaws.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null


Observe que o SSH ainda dirá Warning: Permanently added (...) to the list of known hosts.ao se conectar, mas apenas significa que ele foi adicionado ao /dev/null...

No entanto, o SSH deixará de perguntar se você confirm the authenticity of hoste apenas continuará se conectando.

Portanto, é mais conveniente e você pode evitar nem sempre erros de conexão SSH suficientes ao usar suas instâncias do EC2.


Devo acrescentar que, em teoria, essa configuração reduz a segurança de suas conexões SSH, mas na vida real você provavelmente não verificaria as impressões digitais de suas instâncias únicas do EC2.

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.