从私有 EBS AMI 启动实例后“服务器拒绝我们的密钥”

Posted

技术标签:

【中文标题】从私有 EBS AMI 启动实例后“服务器拒绝我们的密钥”【英文标题】:"Server Refused our key" after launching instance from private EBS AMI 【发布时间】:2012-07-21 18:58:23 【问题描述】:

我创建了自己的 EBS AMI,与另一个 AWS 账户共享,使用新密钥对基于此映像启动了新实例,现在当我尝试连接到这个新实例时出现错误:“服务器被拒绝我们的钥匙”。

这就是我所做的(一步一步):

    在我的个人帐户中配置了新的 CentOS 6.3 服务器(使用我的个人密钥对) 已创建该服务器的 EBS AMI 映像 与我客户的帐户分享了这张图片 基于此共享图像 + 新密钥对在我的客户帐户中启动了新实例 新启动的实例不想使用新的密钥对。经过一些测试,我认为它接受了我的个人密钥对。

如何从我的图像创建新实例以接受新的密钥对? 我什至尝试在原始图像中删除“.ssh/authorized_keys”文件,在没有公钥的情况下基于该图像启动新实例,但仍然没有成功。

请告知如何创建不会附加到旧密钥对的图像

【问题讨论】:

您是如何创建新的密钥对的?您是让 AWS 创建它还是使用其他工具创建它? 您好 David,我在启动新实例时使用 AWS 创建了它。不是手动做的。 你使用的是什么 ssh 客户端? 当您查看 /home/ec2-user/.ssh/authorized_keys 时,您看到的是新的公钥、旧的个人密钥,还是两者都有? 在两个位置:“.ssh/authorized_keys”和“/home/ec2-user/.ssh/authorized_keys”只有一个 - 旧的个人公钥 【参考方案1】:

在我的例子中,我使用的是 Elastic Beanstalk,并且在启动它之前没有将我的密钥对分配给我的配置。要解决这个问题:

    在 elastic beanstalk 中转到您的应用 导航到配置 滚动到安全并选择编辑 将您的密钥对添加到实例中 应用配置后点击保存并再次尝试连接

【讨论】:

【参考方案2】:

我也只是更新我的案例作为答案。我曾经使用主机名ec2-38-239-22-12.us-east-2.compute.amazonaws.com(公共 IPv4 DNS)与腻子中保存的部分进行连接。昨天我停止了实例并在今天早上启动实例(aws)后尝试连接时开始遇到这个问题。

解决方案: 公共 IPv4 DNS 记录 (ec2-38-239-22-12.us-east-2.compute.amazonaws.com) 在重新启动后更改。登录到 AWS 控制台并使用新记录更新腻子部分。这解决了问题!

【讨论】:

【参考方案3】:

我通过选择用户作为 AWS ubuntu 机器的 ubuntu 解决了我的问题。所以请验证正确的用户帐户和机器类型。

请查看以下链接: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html

【讨论】:

【参考方案4】:

我遇到了这个问题,结果我输入的是 ec2_user,而它本来应该是 ec2-user

【讨论】:

我一直忘记有时用户是“centos”而不是“ec2-user”。不过这勾起了我的记忆。【参考方案5】:

默认情况下,亚马逊会将新密钥附加到现有密钥中。我们可以通过在其他活动实例上安装驱动器来解决它,并从文件 .ssh/authorized_keys 中删除内容并添加新密钥的 pem 密钥文件。

【讨论】:

【参考方案6】:

显示服务器拒绝我们的密钥可能只是一个原因。

即:服务器的Key Pair用户名组合不正确,我遇到过很多次了。

【讨论】:

我确定您的组合不正确或者您没有使用正确的密钥对 这对我来说实际上是正确的答案,我输入的是 ec2_user 而不是 ec2-user。所以否决票有点苛刻。【参考方案7】:

这意味着您没有使用正确的用户名来登录您的 ec2 实例。这是您可以在 putty 中用于连接到 ec2 实例的用户列表 对于 Amazon Linux AMI,用户名为 ec2-user。 对于 RHEL5 AMI,用户名是 root 或 ec2-user。 对于 Ubuntu AMI,用户名为 ubuntu。 对于 Fedora AMI,用户名是 fedoraec2-user。 对于 SUSE Linux,用户名是 rootec2-user。 否则,如果 ec2-user 和 root 不起作用,请与 AMI 提供商联系。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingPuTTY

【讨论】:

在我的情况下是“centos”。【参考方案8】:

我在使用新的 SUSE 实例时遇到了这个问题。我终于能够使用用户“root”进行连接。它一直拒绝 ec2-user。

【讨论】:

发现这是一个有用的答案。我选择了 Ubuntu 12.04 映像,并且必须使用 ubuntu 用户而不是 ec2-user 登录。【参考方案9】:

由于您的 AMI 源自社区 AMI 而不是官方公共 AMI,因此它可能尚未设置为在实例启动时复制 ssh 密钥,或者它使用不同的机制来执行此操作。

我的理解是,要在启动时复制 ssh 密钥,必须在实例本身内部运行一些 shell 脚本,如 here 的简要描述。

AMI description page 提到它已经“启用了 cloud-init”,所以也许有一种方法可以通过 CloudInit 来实现。请参阅文档here。

【讨论】:

好的,非常感谢大卫的帮助。我会试着弄清楚还能做些什么。【参考方案10】:

我对该错误消息有类似的问题,这是我修复它的方法。希望这对您或其他陷入困境并在这里找到方式的人有所帮助:

    在 AWS 控制台中确保您的实例健康且正在运行 检查您是否使用了正确的公有 DNS 地址,在您单击实例时列出 从左侧选择安全组,然后单击要使用的安全组 点击入站标签 从创建新规则:对话框中选择 SSH 在源中输入您的 IP 地址和 CIDR 值。如果只是您的网络上没有 NAT,只需使用 32 作为您的 CIDR(例如 ?.?.?.?/32) 点击添加规则 单击应用规则更改 右键单击您的实例并选择创建映像 (EBS AMI) 在创建映像向导中为其指定一个映像名称,然后单击创建 稍后从 AWS 控制台的左侧导航栏中选择 AMI 右键单击新的 AMI,然后单击启动实例 在请求实例向导中单击继续,直到您必须创建密钥对 选择一个密钥对并记下它 (注意:如果您还没有此密钥对的 .pem 文件,您需要通过选择左侧导航栏上的密钥对、创建密钥对等来生成一个新的文件以获取 .pem 文件) 使用您为 IP 地址创建的规则选择安全组(CIDR 为 32 - 无子网掩码) 点击继续,然后在下一个屏幕上点击启动 返回 Instances 视图并等待您的 Instance 完全初始化并运行良好 打开 PuttyGEN 点击工具栏中的转换,然后导入密钥 在文件浏览器中导航到您的 .pem 密钥并打开它 从“参数”框中选择 SSH-1 (RSA) 将您的密钥对名称放在密钥注释框中(只是为了妥善保管) 点击保存私钥并将 .ppk 文件保存在文件系统的某个位置 打开腻子 在主机名框中输入您的 EC2 实例的公有 DNS 进入22端口 在“连接类型”框中勾选 SSH 单选按钮 从左侧导航栏中的连接树中单击 SSH 点击授权 在身份验证参数框中单击浏览,然后打开您的 .ppk 文件 点击左侧导航栏中的会话 在 Saved Sessions 文本框中输入此连接的名称,然后单击 Save(这样您就不必每次都设置 putty 连接,只需双击您保存的连接 - 对于那些不知道) 点击打开 当提示输入登录名时,您可能会使用“ec2-user”或“ubuntu”(提示:使用“root”,您可能会收到一条消息,告诉您应该改用哪个用户名!) 无需密码,.ppk 文件将验证您的身份 希望您现在已连接到 EC-2 实例并且一切顺利!

【讨论】:

"提示:使用 'root',您可能会收到一条消息,告诉您应该使用哪个用户名!" - 很有创意! 太好了,ec2-user 是用户。 从字面上看是互联网上最好的故障排除步骤。 你太客气了!很高兴它有帮助! 我认为您可以删除“如果您的网络上没有 NAT,只需使用 32 作为您的 CIDR(例如。?.?.?.?/32)”这不会感觉 - 无论您是否在 NAT 之后,重要的是您来自哪个公共 IP,其中只有一个

以上是关于从私有 EBS AMI 启动实例后“服务器拒绝我们的密钥”的主要内容,如果未能解决你的问题,请参考以下文章

AWS EC2 - 我从 AMI 映像克隆的实例上的 EBS 卷在哪里?

如何从我的 EBS 支持的 EC2 实例创建 AMI?

Amazon AMI 和 EBS 快照有啥区别?

如何保存修改后的 AMI?

如何创建没有 EBS 的预留实例的“实例存储”AMI 映像

AWS账户之间的克隆/传输EC2实例(AMI)