ChatGPT解决这个技术问题 Extra ChatGPT

将密钥对添加到现有 EC2 实例

我获得了 AWS 控制台访问一个帐户的权限,该帐户运行了 2 个我无法关闭的实例(在生产中)。但是,我想获得对这些实例的 SSH 访问权限,是否可以创建一个新的密钥对并将其应用于实例,以便我可以通过 SSH 访问?获取用于创建实例的密钥对的现有 pem 文件目前不是一种选择。

如果这是不可能的,还有其他方法可以让我进入实例吗?

您是否尝试过这里的解决方案:stackoverflow.com/questions/1454629/…ssh-add 应该做你需要的。
很高兴学习 ssh-add 功能,但这无济于事,因为该用户实际上使用他创建的密钥对创建了实例。我所指的实例是使用另一个我无权访问的密钥对创建的。
也许你最好在 serverfault.com 上问这个问题
您不能将密钥对应用于正在运行的实例。

C
Chris Wagner

您不能将密钥对应用于正在运行的实例。您只能使用新密钥对来启动新实例。

对于恢复,如果它是 EBS 启动 AMI,您可以停止它,制作卷的快照。基于它创建一个新卷。并且能够使用它来启动旧实例、创建新映像或恢复数据。

尽管临时存储中的数据会丢失。

由于这个问题和答案的受欢迎程度,我想在 Rodney 在他的评论中发布的链接中捕获信息。

this information 归功于 Eric Hammond

修复 EC2 实例的根 EBS 卷上的文件

您可以检查和编辑 EC2 实例上根 EBS 卷上的文件,即使您处于您认为的灾难性情况,例如:

您丢失了 ssh 密钥或忘记了密码

您在编辑 /etc/sudoers 文件时出错,无法再通过 sudo 获得 root 访问权限来修复它

您长时间运行的实例由于某种原因挂起,无法联系,并且无法正常启动

您需要从实例中恢复文件但无法访问它

在坐在办公桌前的物理计算机上,您可以简单地使用 CD 或 U 盘启动系统,安装硬盘驱动器,检查并修复文件,然后重新启动计算机以恢复工作。

但是,当您处于其中一种情况时,远程 EC2 实例似乎很遥远且无法访问。幸运的是,AWS 为我们提供了恢复此类系统的能力和灵活性,前提是我们运行的是 EBS 引导实例而不是实例存储。

EC2 上的方法有点类似于物理解决方案,但我们将移动并安装有故障的“硬盘驱动器”(根 EBS 卷)到不同的实例,修复它,然后将其移回。

在某些情况下,启动一个新的 EC2 实例并丢弃坏的实例可能更容易,但如果您真的想修复您的文件,以下是适用于许多人的方法:

设置

识别包含损坏的根 EBS 卷的原始实例 (A) 和卷以及您要查看和编辑的文件。

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

确定您将用于修复原始 EBS 卷上的文件的第二个 EC2 实例 (B)。此实例必须与实例 A 在同一可用区中运行,以便它可以附加 EBS 卷。如果您还没有正在运行的实例,请启动一个临时实例。

instance_b=i-YYYYYYYY

停止损坏的实例 A(等待它完全停止),从实例中分离根 EBS 卷(等待它被分离),然后将卷附加到未使用设备上的实例 B。

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

ssh 到实例 B 并挂载该卷,以便您可以访问其文件系统。

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

修理它

此时,您可以在实例 B 上的 /vol-a 下查看和编辑来自实例 A 的整个根文件系统。例如,您可能想要:

将正确的 ssh 密钥放入 /vol-a/home/ubuntu/.ssh/authorized_keys

编辑和修复 /vol-a/etc/sudoers

在 /vol-a/var/log/syslog 中查找错误消息

从 /vol-a/... 中复制重要文件

注意:两个实例上的 uid 可能不相同,因此在创建、编辑或复制属于非 root 用户的文件时要小心。例如,您在实例 A 上的 mysql 用户可能与您在实例 B 上的 postfix 用户具有相同的 UID,如果您使用一个名称 chown 文件然后将卷移回 A,这可能会导致问题。

包起来

完成并且对 /vol-a 下的文件感到满意后,卸载文件系统(仍在实例 B 上):

sudo umount /vol-a
sudo rmdir /vol-a

现在,使用 ec2-api-tools 回到您的系统,继续将 EBS 卷移回原始实例 A 上的主目录并再次启动该实例:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

希望您解决了问题,实例 A 出现得很好,并且您可以完成您最初打算做的事情。如果没有,您可能需要继续重复这些步骤,直到它正常工作。

注意:如果您在停止实例 A 时为其分配了弹性 IP 地址,则需要在重新启动后重新关联它。

记住!如果您的实例 B 只是为此进程临时启动的,请不要忘记现在将其终止。


你能告诉我们这个(或指向它)的分步指南吗?就我而言,我有一个现有的正在运行的实例,需要从远程位置登录,而我没有私钥。
S
Skatox

虽然您不能直接将密钥对添加到正在运行的 EC2 实例,但您可以创建一个 linux 用户并为他创建一个新的密钥对,然后像使用原始用户的密钥对一样使用它。

在您的情况下,您可以要求实例所有者(谁创建它)执行以下操作。因此,实例所有者不必与您共享他自己的密钥,但您仍然可以通过 ssh 访问这些实例。这些步骤最初由 Utkarsh Sengar(又名 @zengr)在 http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ 发布。我只做了一些小的改动。

第一步:默认登录“ubuntu”用户:$ ssh -i my_orig_key.pem ubuntu@111.111.11.111 第二步:创建一个新用户,我们称我们的新用户为“john”:[ubuntu@ip-11-111- 111-111 ~]$ sudo adduser john 为“john”设置密码:[ubuntu@ip-11-111-111-111 ~]$ sudo su - [root@ip-11-111-111-111 ubuntu]# passwd john 通过 [root@ip-11-111-111-111 ubuntu]# visudo 将“john”添加到 sudoer 的列表中,并在文件末尾添加以下内容: john ALL = (ALL) ALL 好的!我们已经创建了新用户,现在您需要生成登录所需的密钥文件,就像我们在第 1 步中有 my_orin_key.pem 一样。现在,退出并返回 ubuntu,退出 root。 [root@ip-11-111-111-111 ubuntu]# exit [ubuntu@ip-11-111-111-111 ~]$ 第三步:创建公钥和私钥:[ubuntu@ip-11-111- 111-111 ~]$ su john 输入您在步骤 2 中为“john”创建的密码。然后创建密钥对。请记住,密钥对的密码至少应为 4 个字符。 [john@ip-11-111-111-111 ubuntu]$ cd /home/john/ [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa [john @ip-11-111-111-111 ~]$ mkdir .ssh [john@ip-11-111-111-111 ~]$ chmod 700 .ssh [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh 在上面的步骤中,john 是我们创建的用户,ubuntu 是默认的用户组。 [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys 第四步:现在你只需要下载名为“john”的密钥。我使用 scp 从 EC2 下载/上传文件,您可以这样做。您仍然需要使用 ubuntu 用户复制文件,因为您只有该用户名的密钥。因此,您需要将密钥移动到 ubuntu 文件夹并将其更改为 777。 [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/ [john@ip-11-111- 111-111 ~]$ sudo chmod 777 /home/ubuntu/john 现在来到本地机器的终端,那里有 my_orig_key.pem 文件并执行以下操作: $ cd ~/.ssh $ scp -i my_orig_key.pem ubuntu@111.111。 11.111:/home/ubuntu/john john 上面的命令会将密钥“john”复制到本地机器上的当前工作目录。将密钥复制到本地计算机后,您应该删除“/home/ubuntu/john”,因为它是私钥。现在,将您的本地计算机 chmod john 设置为 600。 $ chmod 600 john 第 5 步:测试您的密钥的时间: $ ssh -i john john@111.111.11.111

因此,通过这种方式,您可以设置多个用户使用一个 EC2 实例!!


这很有用,但作为最后一步,您不应该同时从远程机器上删除私钥吗?这样其他有权访问该实例的人也无法复制它并使用您的密钥登录。
这对我有用。但是我如何从这里导航到 ubuntu 用户,因为我将处理的文件位于 ubuntu 用户目录中。这将带我到 john 用户组。 Ubuntu 14.04.4 LTS
这对我不起作用。它提供了无效的权限。我必须从 ec2 控制台创建密钥对然后它开始工作
K
Kerem

对于 Elasticbeanstalk 环境,您可以将键值对应用于正在运行的实例,如下所示:

从 EC2 -> Key Pairs 创建一个键值对(在 NETWORK & SECURITY 选项卡下)

转到 Elasticbeanstalk 并单击您的应用程序

转到配置页面并修改安全设置

选择您的 EC2 密钥对并单击应用

单击确认以确认更新。它将终止环境并将键值应用于您的环境。


这对我有用
D
Dan

在本地机器上,运行命令:

ssh-keygen -t rsa -C "SomeAlias"

该命令运行后,将生成一个以 *.pub 结尾的文件。复制该文件的内容。

在 Amazon 机器上,编辑 ~/.ssh/authorized_keys 并粘贴 *.pub 文件的内容(并首先删除任何现有内容)。

然后,您可以使用从 ssh-keygen 命令(私钥)生成的其他文件进行 SSH。


因此,就像@Dan 提到的那样,可以更改对编辑此文件的实例的访问权限,但您永远无法在元数据级别更改与实例关联的密钥对。不要忘记在您的公钥末尾添加 .pem 文件名,例如:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
M
Mauvis Ledford

这发生在我之前(无法访问其他人创建但可以访问 AWS Web 控制台的 EC2 实例),我在博客中给出了答案:http://readystate4.com/2013/04/09/aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to/

基本上,您可以分离 EBS 驱动器,将其连接到您有权访问的 EC2。将您的 SSH 发布密钥添加到此附加驱动器上的 ~ec2-user/.ssh/authorized_keys。然后将其放回旧的 EC2 实例上。使用 Amazon AMI 的链接中的分步说明。

无需制作快照或创建新的克隆实例。


n
ninja123

我没有找到通过控制台添加新密钥对的简单方法,但您可以手动完成。

只需使用现有密钥对 ssh 进入您的 EC2 框。然后编辑 ~/.ssh/authorized_keys 并在新行上添加新密钥。通过新机器退出并 ssh。成功!


C
Community

就我而言,我使用此文档将密钥对与我的 Elastic Beanstalk 实例相关联

重要 您必须创建一个 Amazon EC2 密钥对并将您的 Elastic Beanstalk 预配置的 Amazon EC2 实例配置为使用 Amazon EC2 密钥对,然后才能访问您的 Elastic Beanstalk 预配置的 Amazon EC2 实例。您可以使用 AWS 管理控制台设置您的 Amazon EC2 密钥对。有关为 Amazon EC2 创建密钥对的说明,请参阅 Amazon Elastic Compute Cloud 入门指南。

Configuring Amazon EC2 Server Instances with Elastic Beanstalk


谢谢,@kamal-essajidi!对于使用 EB 的其他人:拥有密钥对后,您可以在配置 > 实例 > EC2 密钥对中将其添加到您的 Elastic Beanstalk。
k
karser

您可以通过以下命令向实例添加新密钥:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

您可以在 ~/.ssh config 中配置 domain_alias

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem

C
Community

启动实例后,无法在元数据级别更改与实例关联的密钥对,但您可以更改用于连接到实例的 ssh 密钥。

stackoverflow.com/questions/7881469/change-key-pair-for-ec2-instance


V
Vishwas Vaishnav

您实际上可以通过弹性 beanstalk 配置页面添加密钥对。然后它会为您重新启动您的实例,一切正常。