从私有 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,用户名是 fedora 或 ec2-user。 对于 SUSE Linux,用户名是 root 或 ec2-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 启动实例后“服务器拒绝我们的密钥”的主要内容,如果未能解决你的问题,请参考以下文章