我获得了 AWS 控制台访问一个帐户的权限,该帐户运行了 2 个我无法关闭的实例(在生产中)。但是,我想获得对这些实例的 SSH 访问权限,是否可以创建一个新的密钥对并将其应用于实例,以便我可以通过 SSH 访问?获取用于创建实例的密钥对的现有 pem 文件目前不是一种选择。
如果这是不可能的,还有其他方法可以让我进入实例吗?
您不能将密钥对应用于正在运行的实例。您只能使用新密钥对来启动新实例。
对于恢复,如果它是 EBS 启动 AMI,您可以停止它,制作卷的快照。基于它创建一个新卷。并且能够使用它来启动旧实例、创建新映像或恢复数据。
尽管临时存储中的数据会丢失。
由于这个问题和答案的受欢迎程度,我想在 Rodney 在他的评论中发布的链接中捕获信息。
此信息归功于Eric Hammond。
您可以检查和编辑 EC2 实例上的根 EBS 卷上的文件,即使您处于您认为的灾难性情况,例如:
在坐在办公桌前的物理计算机上,您可以简单地使用 CD 或 USB 记忆棒启动系统,安装硬盘驱动器,检查并修复文件,然后重新启动计算机以恢复工作。
但是,当您处于其中一种情况时,远程 EC2 实例似乎很遥远且无法访问。幸运的是,AWS 为我们提供了恢复此类系统的能力和灵活性,前提是我们运行的是 EBS 引导实例而不是实例存储。
EC2 上的方法有点类似于物理解决方案,但我们将移动并安装有故障的“硬盘驱动器”(根 EBS 卷)到不同的实例,修复它,然后将其移回。
在某些情况下,启动一个新的 EC2 实例并丢弃坏的实例可能更容易,但如果您真的想修复您的文件,以下是适用于许多人的方法:
设置
识别原始实例 (A) 和包含损坏的根 EBS 卷的卷以及您要查看和编辑的文件。
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 的整个根文件系统。例如,您可能想要:
注意:两个实例上的 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 只是为此进程临时启动的,请不要忘记立即终止它。