从私人EBS AMI发布实例后,“服务器拒绝了我们的密钥”

时间:2012-07-23 14:11:10

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

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

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

  1. 在我的个人帐户中配置新的CentOS 6.3服务器(使用我的个人密钥对)
  2. 创建该服务器的EBS AMI图像
  3. 与客户的帐户共享此图片
  4. 根据此共享图片+新密钥对
  5. 在我的客户帐户中启动了新实例
  6. 新推出的实例不想采用新的密钥对。经过一些测试后,我认为它接受了我的个人密钥对。
  7. 如何从我的图片中创建新实例以接受新的密钥对? 我甚至尝试删除原始图像中的“.ssh / authorized_keys”文件,在没有公钥的情况下基于此图像启动新实例,但仍然没有成功。

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

10 个答案:

答案 0 :(得分:34)

我遇到了与该错误消息类似的问题,以下是我修复它的方法。希望这可以帮助你,或其他困难的人,并在这里找到自己的方式:

  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,然后单击Launch Instance
  13. 在“请求实例向导”上,单击“继续”,直到您必须创建密钥对
  14. 选择一个密钥对并记下它 (注意:如果您还没有获得此密钥对的.pem文件,则需要通过选择左侧导航栏上的密钥对,创建密钥对等来获取.pem文件)
  15. 使用您为IP地址创建的规则选择安全组(并且CIDR为32 - 无子网掩码)
  16. 点击“继续”,然后在下一个屏幕上点击“启动”
  17. 返回Instances视图并等待您的Instance完全初始化且健康
  18. 打开PuttyGEN
  19. 点击工具栏中的转化和导入键
  20. 导航到文件浏览器中的.pem键并将其打开
  21. 从参数框
  22. 中选择SSH-1(RSA)
  23. 将您的密钥对名称放在密钥注释框中(仅用于保持良好的内容)
  24. 单击保存私钥并将.ppk文件保存在文件系统的某个位置
  25. Open Putty
  26. 在“主机名”框中输入EC2实例的公共DNS
  27. 输入端口22
  28. 从“连接类型”框中勾选SSH单选按钮
  29. 从左侧导航栏中的连接树中单击SSH
  30. 点击Auth
  31. 单击“身份验证参数”框中的“浏览”,然后打开.ppk文件
  32. 点击左侧导航栏中的会话
  33. 在“保存的会话”文本框中输入此连接的名称,然后单击“保存”(这样您就不必每次都进行putty连接设置,只需双击已保存的连接 - 对于那些不知道)
  34. 点击打开
  35. 当提示输入登录名时,你可能会使用'ec2-user'或'ubuntu'(提示:使用'root',你可能会收到一条消息,告诉你应该使用什么用户名!)
  36. 无需密码,.ppk文件将验证您
  37. 希望您现在已经连接到EC-2实例并且很高兴!

答案 1 :(得分:13)

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

答案 2 :(得分:11)

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

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

答案 3 :(得分:3)

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

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

AMI description page提到它已经“启用了云启动”,所以也许有办法通过CloudInit来实现。请参阅文档here

答案 4 :(得分:1)

我遇到了这个问题,原来我是ec2-user的时候才输入ec2_user

答案 5 :(得分:0)

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

即:服务器的密钥对用户名组合不正确,我已经多次面对过。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我也只是更新我的案例作为答案。我曾经使用主机名 find -L ./ -xdev -mindepth 15 (公共 IPv4 DNS)与腻子中的保存部分进行连接。昨天我停止了实例,并在今天早上启动实例(aws)后尝试连接时开始面临这个问题。

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

答案 9 :(得分:0)

就我而言,我使用的是 Elastic Beanstalk,并且在启动它之前没有将我的密钥对分配给我的配置。要解决此问题:

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