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

24
我已经创建了自己的EBS AMI,与另一个AWS账户共享,并基于此镜像启动了新实例和新密钥对,但现在我尝试连接这个新实例时,出现错误:“服务器拒绝了我们的密钥”。
以下是我的步骤:
1.在我的个人账户中配置了新的CentOS 6.3服务器(使用我的个人密钥对) 2. 创建该服务器的EBS AMI映像 3.将此映像与客户端的账户共享 4.基于此共享映像+新密钥对在我的客户端账户中启动新实例 5.新启动的实例不想接受新的密钥对。经过一些测试后,我发现它接受我的个人密钥对。
如何使从我的镜像创建的新实例接受新的密钥对?我甚至尝试删除原始镜像中的“.ssh / authorized_keys”文件,在没有公钥的情况下基于此镜像启动新实例,仍然没有成功。
请建议如何创建不附加旧密钥对的镜像。

1
你是如何创建新的密钥对的?是让AWS创建还是使用其他工具创建的? - David Levesque
你好,David。我在启动新实例时使用了AWS来创建它。没有手动操作。 - Kelvin
你使用的是哪个SSH客户端? - David Levesque
当您查看 /home/ec2-user/.ssh/authorized_keys 时,您会看到新的公钥、旧的个人密钥还是两者都有? - David Levesque
我遇到了同样的问题。我们得出结论了吗? - ciphor
显示剩余3条评论
13个回答

43

我曾经遇到过类似的问题,下面是我如何解决它的。希望这能帮助你或者其他人,也遇到了这个问题并找到了这里:

  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. 返回实例视图,并等待实例完全初始化和正常
  18. 打开PuttyGEN
  19. 从工具栏中单击转换,然后导入密钥
  20. 在文件浏览器中导航到您的.pem密钥,并打开它
  21. 从参数框中选择SSH-1(RSA)
  22. 将密钥对名称放入密钥评论框中(仅用于良好的管理)
  • 点击保存私钥并将.ppk文件保存在文件系统中的某个位置
  • 打开Putty
  • 在“主机名称”框中输入您的EC2实例的公共DNS
  • 输入端口22
  • 从“连接类型”框中选择SSH单选按钮
  • 单击左侧导航栏中的连接树中的SSH
  • 单击“Auth”
  • 在身份验证参数框中单击“浏览”,然后打开您的.ppk文件
  • 单击左侧导航栏中的“会话”
  • 在“已保存的会话”文本框中输入此连接的名称,然后单击“保存”(这样您就不必每次都进行putty连接设置,只需双击保存的连接即可 - 适用于那些不熟悉该过程的用户)
  • 单击“打开”
  • 当提示输入登录名时,您可能会使用“ec2-user”或“ubuntu”(提示:使用“root”,您可能会收到一条消息,告诉您应该使用哪个用户名!)
  • 无需密码,.ppk文件将对您进行身份验证
  • 希望您现在已连接到EC-2实例并准备就绪!

  • 7
    提示:使用“root”,您可能会收到一条消息,告诉您应该使用哪个用户名!非常有创意! - culix
    1
    很好,ec2-user是用户。 - s_h
    1
    互联网上最好的故障排除步骤。 - Joseph Casey
    1
    你太客气了!很高兴能帮到你! - Darius
    创建这个图像只是为了谨慎起见吗?它与SSH没有任何关系,对吧?不然,谢谢! - markmnl
    显示剩余2条评论

    15

    我在新的SUSE实例上遇到了这个问题。最终我能够使用'root'用户连接成功,但无法使用ec2-user用户。


    6
    我发现这个答案很有帮助。我选择了Ubuntu 12.04的映像,并且需要使用ubuntu用户登录,而不是ec2-user。 - detour

    13
    这意味着您在登录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”。 - James

    12
    在AWS服务器上使用不同工具时,ssh密钥无法正常工作。
    通常遇到的错误是:
    Server refused our key
    No supported authentication methods available (server sent: publickey)
    

    打开/etc/ssh/sshd_config文件并添加以下代码
    PubkeyAcceptedAlgorithms +ssh-rsa
    

    保存文件并使用systemctl restart sshd重启sshd服务,或者在某些情况下,如现在的Ubuntu 23或其他情况下,我们可以重启服务systemctl restart ssh。 希望您的密钥能够完美运行。

    1
    这是在Ubuntu AMI上为我解决问题的方法。 - James Gardner
    1
    也适用于我。 - Yash Tomar -Aeologic
    使用Ubuntu AMI(ubuntu-jammy-22.04-amd64-server-20230115)为我解决了问题。 - binaryguy
    Rocky Linux 上无法重新启动 sshd (systemctl restart ssdhd)。报错信息为 '4119 ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY (code=exited, status=255)'。 - Tom Stambaugh
    真是太好了!非常感谢。 - Anuj

    11

    在按照这里和其他文章中给出的步骤后,我还需要将Putty更新到最新版本。之后一切都正常了。


    1
    我使用了 PuTTY 0.74,出现了“没有支持的身份验证方法可用(服务器发送:公钥)”的问题。升级到 PuTTY 0.77 后,问题解决了。 - Qin Heyang
    1
    这实际上在AWS故障排除页面中提到,并且(事实证明)比所示的更重要。 - apokryfos
    {"v0.73": "失败", "v0.78": "正常"} - 只需更新Putty,无需进行任何其他操作。无需配置,无需其他任何事项。 - Xavi Montero
    哇,确实。需要更新Putty才能连接。v0.73 - 没有运气,v78 - 如预期般工作。 - Didzis

    3

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

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

    AMI描述页面提到它已经“启用了CloudInit”,因此可能可以通过CloudInit来完成。请参见此处的文档。


    好的,非常感谢你的帮助 David。我会尝试找出还能做什么。 - Kelvin

    2

    我遇到了这个问题,后来发现我打错了ec2_user,实际上应该是ec2-user。


    1
    我总是忘记有时候用户是“centos”,而不是“ec2-user”。不过这让我想起来了。 - James

    1
    在我的情况下,我正在使用弹性 Beanstalk,但在启动之前没有将我的密钥对分配给配置。要解决此问题:
    1. 转到弹性 Beanstalk 中的应用程序
    2. 导航到配置
    3. 滚动到安全性并选择编辑
    4. 将您的密钥对添加到实例中
    5. 单击保存,在应用配置后再次尝试连接

    0

    0

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


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