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.
Jeevan Dongre
fonte
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.

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

Greg Dubicki
fonte