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

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

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

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

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

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

【问题讨论】:

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

标签: amazon-ec2 amazon-web-services centos amazon-ami key-pair


【解决方案1】:

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

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

【讨论】:

    【解决方案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】:

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

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

          【讨论】:

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