Nie można połączyć się z instancją AWS EC2 - „Błąd weryfikacji klucza hosta”

13

Skonfigurowałem instancję Ubuntu z pakietem Rails, wdrożyłem moją aplikację i działa dobrze.

Ale gdy próbuję zrobić SSH, to nie pozwala mi do zdalnego logowania i wyrzuca błędy jak: Host key verification failed.

Problem wydaje się być uporczywy. Dołączyłem Elastyczny adres IP do tego wystąpienia i nie widzę publicznego DNS.

Moja instancja działa w regionie Singapuru.

ssh wyjście debugowania:

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
źródło
Musisz nam powiedzieć, jakie dokładnie błędy masz. Powiedzenie nam, jak wyglądał jeden z błędów, nie jest pomocne.
David Schwartz,

Odpowiedzi:

19

Gdy łączysz się z serwerem ssh, klient ssh przechowuje listę zaufanych hostów jako pary klucz-wartość dla odcisków palców serwera IP i ssh. W ec2 często używasz tego samego adresu IP z kilkoma instancjami serwera, co powoduje konflikt.

Jeśli podłączyłeś się do wcześniejszej instancji ec2 za pomocą tego adresu IP, a teraz łączysz się z nową instancją o tym samym adresie IP, komputer narzeka na „Nieudana weryfikacja hosta”, ponieważ poprzednio przechowywana para nie pasuje już do nowej pary.

Komunikat o błędzie informuje, jak to naprawić:

Obrażanie klucza RSA w /home/ubuntu/.ssh/known_hosts:1
usuń za pomocą: ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R 46.137.253.231 "

Alternatywnie wystarczy otworzyć /home/ubuntu/.ssh/known_hosts i usunąć wiersz 1 (zgodnie z oznaczeniem „: 1”).

Możesz teraz połączyć się i otrzymać nową weryfikację hosta.

Pamiętaj, że zwykle plik znane_hosty ssh zwykle zawiera drugą parę linii dla nazwy hosta lub wartości ip6, więc może być konieczne usunięcie kilku linii.

Ostrzeżenie: weryfikacja hosta jest ważna i jest to dobry powód, dla którego pojawia się to ostrzeżenie. Upewnij się, że oczekujesz niepowodzenia weryfikacji hosta. Nie usuwaj pary klucz-wartość weryfikacyjna, jeśli nie jesteś pewien.

flurdy
źródło
Ja to zrobiłem. Teraz pojawia się ten błąd: Odmowa dostępu (publickey). Jakikolwiek pomysł, jak to rozwiązać, ponieważ plik klucza publicznego był wystarczająco dobry podczas ostatniego dostępu do mojego serwera AWS.
Najeeb
11

Odpowiedź @flurdy jest dobra jako jednorazowa rozdzielczość.

Ale jeśli często:

  • uruchom nowe instancje EC2,
  • uruchamiać i zatrzymywać instancje EC2,

..without stosując elastyczne IP (stałe przymocowany do serwerów), wówczas mamy do czynienia z nowym / IPS / zmianie nazwy hostów z wystąpień cały czas .

Jeśli tak, to możesz chcieć trwale zatrzymać sprawdzanie SSH i przechowywanie odcisków palców serwera dla publicznych nazw hostów EC2 .


Aby to zrobić, po prostu dodaj to do ~/.ssh/config:

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


Należy pamiętać, że SSH nadal powie Warning: Permanently added (...) to the list of known hosts.przy łączeniu, ale oznacza to, że dodał go do /dev/null...

SSH przestanie jednak pytać, czy ty confirm the authenticity of hosti po prostu kontynuujesz połączenie.

Jest to więc wygodniejsze i możesz uniknąć nie zawsze wystarczającej liczby błędów połączenia SSH podczas korzystania z instancji EC2.


Muszę dodać, że teoretycznie to ustawienie obniża bezpieczeństwo połączeń SSH, ale w rzeczywistości prawdopodobnie i tak nie sprawdziłbyś odcisków palców swoich jednorazowych instancji EC2.

Greg Dubicki
źródło