无法连接到AWS EC2实例-“主机密钥验证失败”


13

我已经用Rails包设置了一个Ubuntu实例,部署了我的应用程序,并且运行良好。

但是,当我尝试执行SSH时,它不允许我进行远程登录,并引发诸如以下错误:Host key verification failed

这个问题似乎一直存在。我已将弹性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.

您必须告诉我们您遇到的确切实际错误。告诉我们其中一个错误是什么没有帮助。
大卫·史瓦兹

Answers:


19

当您连接到ssh服务器时,ssh客户端会保留受信任主机的列表,作为IP和ssh服务器指纹的键值对。使用ec2,您经常将同一IP用于多个服务器实例,这会导致冲突。

如果您已使用此IP连接到较早的ec2实例,现在又使用相同的IP连接到新实例,则计算机将抱怨“主机验证失败”,因为其先前存储的对不再与新对匹配。

该错误消息告诉您如何解决:

/home/ubuntu/.ssh/known_hosts中有害的RSA密钥:1使用以下命令
删除:ssh-keygen -f“ /home/ubuntu/.ssh/known_hosts” -R 46.137.253.231“

另一种方法是简单地打开/home/ubuntu/.ssh/known_hosts并删除第1行(如“:1”所示)。

现在,您可以连接并接收新的主机验证。

请注意,通常ssh的known_hosts文件通常为主机名或ip6值存储了第二行,因此您可能需要删除几行。

警告:主机验证很重要,这是收到此警告的充分原因。确保您期望主机验证失败。如果不确定,请勿删除验证键值对。


我做到了 现在,我收到此错误:权限被拒绝(公钥)。任何解决方案的想法,因为上一次我访问我的AWS服务器时,公钥文件已经足够好了。
Najeeb

11

@flurdy的答案是一次性解决方案。

但是,如果您经常:

  • 启动新的EC2实例,
  • 启动和停止EC2实例,

..无使用弹性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实例的指纹。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.