EC2 - 无法使用 ec2-user 登录

EC2 - Unable to login with ec2-user

我有一个 AWS 微型实例,使用 ec2-user 登录该实例直到现在都没有问题。我更改了 ec2-user 的一些权限(基本上删除了它添加到的 www 组并再次添加了该组)。现在我被锁定在实例之外。我得到的错误是:

断开连接:没有可用的受支持的身份验证方法(服务器 sent:publickey)

我检查了以下内容,一切似乎都已就绪:

  1. 我的 IP 在 AWS 安全组中更新
  2. 我的密钥 (.ppk) 与我使用了几个月的密钥相同
  3. 我的安全组启用了 80 和 442

请帮忙...这真的很困扰我!

不确定您是否在 9 个月后看到了这个 post,但看起来有人遇到过类似的问题。如果您使用的是 IAM,请确保您的内联策略允许 EC2 访问。

您收到来自 SSH 服务的错​​误,因此您可以确定这不是防火墙问题。

很难确切知道您做了什么,但您可能无意中破坏了对存储允许的 public 密钥的文件的访问 ~/.ssh/authorized_keys。此文件仅适用于非常有限的权限。

有一种方法可以从中恢复,但它涉及几个步骤。

  1. 启动一个新的实例,可以是微实例,它只会持续一段时间。
  2. 停止当前实例,分离根卷并将其附加到新实例。
  3. 安装卷,修复 authorized_keys 文件的权限。
  4. 卸载并分离卷,重新附加到原始实例。

如果一切设置正确,您的密钥应该可以在现有实例上再次使用。

如果 ec2-user 以某种方式损坏,您可以添加其他用户。此方法不需要挂载卷,而是依赖于在 EC2 控制台中修改 User Data

https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/

例如,您可以创建一个新密钥:

ssh-keygen -t rsa -C private.key -f private.key -q -N ""

然后使用下面的User Data:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
USER=additional-user  # 1
adduser $USER 
echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/cloud-init 
mkdir /home/$USER/.ssh 
echo "ssh-rsa AAAAB3NzaC1yc2EAAA....A38MHe0KAzY9Ob private.key" >> /home/$USER/.ssh/authorized_keys  # 2
--//
  1. 用您选择的用户名替换additional-user
  2. 将双引号内的内容替换为您刚刚生成的 private.key.pub 内容。

然后您应该能够通过 ssh 进入实例:

chmod 600 private.key
ssh -i private.key additional-user@<ec2 public ip>

记得清理你的 User Data,这样它就不会在后续启动时保留 运行。一旦 ec2-user 再次工作,也取消配置其他用户(或至少删除其 sudo 访问权限)。

更多详细说明,请参见:https://bitbucket.org/thorntechnologies/sftpgateway-public/wiki/Locked%20out%20of%20EC2%20instance