主机密钥验证失败 - 亚马逊EC2

14

我正在使用Windows 7和Git Bash以及Amazon EC2实例进行工作。我尝试登录我的实例:

$ ssh -i f:mykey.pem ubuntu@ec2-52-10-**-**.us-west-2.compute.amazonaws.com
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @    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 ECDSA key sent by the remote host is
 71:00:d7:d8:a------------------26.
 Please contact your system administrator.
 Add correct host key in /m/.ssh/known_hosts to get rid of this message.
 Offending ECDSA key in /m/.ssh/known_hosts:27
 ECDSA host key for ec2-52-10-**-**.us-west-2.compute.amazonaws.com has changed and you have request
 ed strict checking.
 Host key verification failed.

这种方式以前一直可以正常登录,但是在我重新启动EC2实例之后出现了问题。我应该如何让它再次正常工作?

编辑:

$ ssh -i f:tproxy.pem ubuntu@ec2-52-10-**-**.us-west-2.compute.amazonaws.com
ssh: connect to host ec2-52-10-**-**.us-west-2.compute.amazonaws.com port 22: Bad file number

这里输入图片描述

再试一次:

The authenticity of host 'ec2-52-10-**-**.us-west-2.compute.amazonaws.com (52.10.**-**)' can't be
established.
ECDSA key fingerprint is d6:c4:88:-----------fd:65.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'ec2-52-10-**-**.us-west-2.compute.amazonaws.com,52.10.**-**' (ECDSA) t
o the list of known hosts.
Permission denied (publickey).

现在我应该做什么?

4个回答

12

主机名有一个新的SSH密钥,因此SSH会告诉你有些内容发生了变化。 提示在这里:

Offending ECDSA key in /m/.ssh/known_hosts:27
如果您确定另一侧的服务器是真实可靠的,那么您应该删除/m/.ssh/known_hosts中的第27行。

虽然每个条目都由4行组成,但只有7个条目,因此我删除了整个knownhosts文件。请参见上面的编辑。 - user1592380
现在是另一个问题 - 您的密钥被拒绝了。尝试使用“-i mykey.pem”(不带“-f”)。 - Adam Matan
感谢您查看这个问题,Adam。由于不知道更好的方法,我尝试创建了一个新的密钥对并覆盖了旧的密钥对,然后我才发现只有原始密钥对才能与 EC2 上的任何一个实例配合使用。所以我删除了我的实例,现在正在重新构建它。我有一个新的密钥对,现在可以登录了。显然,这不是首选的方法。 - user1592380
当然。还有两点需要注意 - 1. 建议将新的RSA密钥添加到所有机器中,并将原始的pem密钥用作紧急备份。2. 这个问题可能属于serverfault.com。 - Adam Matan
谢谢您再次提供的帮助。现在我已经启动了EC2实例,是否为其创建新的密钥对太晚了? - user1592380

7
这个错误表示自从您上次登录到该服务器以来已有更改,您尝试 ssh 到的服务器可能并不是您认为的那个服务器。
需要注意的一点是...
当您创建 EC2 实例时,该实例未分配固定 IP。
当您启动实例时,它将获得 (动态) IP 号和基于该 IP 的 DNS 名称。
如果您关闭实例并在几个小时后重新启动它,则可能会获得新的 IP 和新的 DNS 名称。
如果您仍在尝试访问旧的 DNS 名称/IP,则实际上正在尝试访问可能并不属于您的服务器。
这将以与您之前遇到的相同的错误消息结束。
(这可能发生因为您将 DNS 条目指向旧的 IP,或者您正在使用尝试访问旧 DNS 名称/IP 的脚本,或者只是从历史命令中重复执行 ssh 命令...)
如果是这种情况,解决方案是使用弹性 IP。
您可以将 Elastic IP 分配给您的服务器,这将强制保持其 IP 地址在重新启动之间不变。
弹性 IP 在已连接的服务器处于运行状态时是免费的。
但是当连接的服务器关闭时,它将会产生一些小费用。
这是为了确保您在不使用/需要它时不会“保留” IP。

2
在BeanStalk环境中,问题在于它引用了相应IP的known_hosts密钥。但是该密钥已更改,因此使用相同的密钥将无法正常工作。
~/.ssh/known_hosts中删除该IP的密钥,然后通过ssh连接即可解决问题。
(基本上,当~/.ssh/known_hosts中没有该条目时,它会创建一个新条目,从而解决冲突)

0

输入以下命令以设置权限。将~/mykeypair.pem替换为您的密钥对私钥文件的位置和文件名。

chmod 400 ~/mykeypair.pem

在您的情况下,mykeypair.pem是tproxy.pem

我遇到了同样的问题,在将pem文件设为私有后,问题得到了解决。

这里有关于SSH密钥权限的更多信息。


谢谢@ioneyed,我会尽量注意格式。 - Himanshu Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接