web-dev-qa-db-ja.com

AWS EC2インスタンスに接続できない-「ホストキーの検証に失敗しました」

RailsパッケージでUbuntuインスタンスをセットアップし、アプリをデプロイしましたが、正常に動作しています。

しかし、SSHを実行しようとすると、リモートログインが許可されず、Host key verification failedのようなエラーがスローされます。

問題は解決しないようです。そのインスタンスにElastic IPをアタッチしましたが、パブリックDNSを表示できません。

私のインスタンスはシンガポール地域で実行されています。

sshデバッグ出力:

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

Sshサーバーに接続すると、sshクライアントはIPとsshサーバーのフィンガープリントのキーと値のペアとして信頼できるホストのリストを保持します。 ec2を使用すると、複数のサーバーインスタンスで同じIPを再利用することが多く、競合が発生します。

このIPで以前のec2インスタンスに接続し、同じIPで新しいインスタンスに接続した場合、以前に保存されたペアが新しいペアと一致しなくなったため、コンピューターは「ホストの検証に失敗しました」というメッセージを表示します。

エラーメッセージはそれを修正する方法を教えてくれます:

/home/ubuntu/.ssh/known_hosts:1にある問題のあるRSAキー
削除:ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R 46.137.253.231 "

または、/ home/ubuntu/.ssh/known_hostsを開き、1行目を削除します(「:1」で示されています)。

これで、接続して新しいホスト検証を受け取ることができます。

通常、sshのknown_hostsファイルには、ホスト名またはip6値の2番目の行ペアが格納されているため、数行を削除する必要がある場合があります。

警告:ホストの検証は重要であり、この警告が表示されるのはそのためです。ホストの検証が失敗することを期待していることを確認してください。確実でない場合は、検証のキーと値のペアを削除しないでください。

19
flurdy

@ flurdyの回答は、1回限りの解決策として適切です。

しかし、頻繁に:

  • 新しいEC2インスタンスを起動し、
  • eC2インスタンスの開始と停止、

..Elastic IP(サーバーに永続的に接続されている)を使用せずに、インスタンスの新しい/変更IP /ホスト名を常時処理する

その場合、SSHチェックを永久に停止し、EC2パブリックホスト名のサーバーフィンガープリントを保存することができます


これを行うには、これを_~/.ssh/config_に追加します。

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


SSHは接続時にWarning: Permanently added (...) to the list of known hosts.と表示しますが、_/dev/null_に追加したことを意味するだけであることに注意してください...

ただし、SSHは_confirm the authenticity of Host_を要求して停止し、接続を続行します。

したがって、EC2インスタンスを使用しているときは、より便利であり、 常に十分なSSH接続エラーが冗長になるわけではありません を回避できます。


理論的には、この設定はSSH接続のセキュリティを低下させることを付け加えなければなりませんが、実際には、とにかく一度限りのEC2インスタンスのフィンガープリントを確認することはないでしょう。

11
Greg Dubicki