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

2024-05-14

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

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


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

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

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


由于这个问题和答案很受欢迎,我想捕获罗德尼在其评论中发布的链接中的信息。

信用去往埃里克·哈蒙德 https://plus.google.com/111045584683584396225/about for 此信息 http://alestic.com/2011/02/ec2-fix-ebs-root.

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

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

  • 您丢失了 ssh 密钥或忘记了密码
  • 您在编辑 /etc/sudoers 文件时犯了一个错误,并且无法再 使用 sudo 获得 root 访问权限来修复它
  • 您长时间运行的实例因某种原因挂起,无法 已联系,但无法正常启动
  • 您需要从实例恢复文件但无法访问它

在办公桌上的物理计算机上,您只需使用 CD 或 USB 记忆棒启动系统,安装硬盘驱动器,检查并修复文件,然后重新启动计算机即可恢复正常工作。

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

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

在某些情况下,启动一个新的 EC2 实例并扔掉坏的实例可能会更容易,但如果您确实想修复文件,以下是对许多人有效的方法:

Setup

识别包含损坏的根 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

Fix It

此时,实例 A 中的整个根文件系统可在实例 B 上的 /vol-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,则可能会导致问题。

Wrap Up

完成后并且您对 /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 地址,则需要在再次启动实例 A 后重新关联它。

记住!如果您的实例 B 只是为了此过程而临时启动的,请不要忘记立即终止它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将密钥对添加到现有 EC2 实例 的相关文章

随机推荐

  • Google Sheets API v4 和 valueInputOption

    我的电子表格中有三列 第一个是日期 第二个和第三个是简单字符串 当我批量上传数据时valueInputOption RAW 我的日期列得到错误的结果 所有日期前面都有一个看不见的撇号 字符串列没问题 当我使用valueInputOption
  • GWT、Maven、Spring - 在 Maven 构建上获取 com.thoughtworks.qdox.parser.ParseException:语法错误

    我正在尝试集成此演示中的代码 http code google com p gwt spring starter app http code google com p gwt spring starter app 进入我的主要 Spring
  • Pandas如何按时间段过滤DataFrame

    我有一个包含下表的文件 Name AvailableDate totalRemaining 0 X3321 2018 03 14 13 00 00 200 1 X3321 2018 03 14 14 00 00 200 2 X3321 20
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • mod_rewrite GUI?

    任何人都有用于开发 mod rewrite 规则的图形工具 理想情况下 它会显示重写管道 然后当给定 uri 实例时 会显示应用时的转换 让它们正确设置总是很痛苦 因此任何使其变得更容易的方法都会有所帮助 对于 htaccess 阅读 mo
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 每个搜索词显示一行,如果未找到则替换默认值

    Query SELECT product id name FROM product WHERE barcode in 681027 8901030349379 679046 679047 679082 679228 679230 67923
  • iostream 对象 cin、cout、cerr 和 clog 是如何实现的?

    iostream 对象 cin cout cerr 和 clog 是在 iostream 标头中声明的对象 我知道在某些编译器中可能会在构造这些 iostream 对象之前尝试使用它们 因此在某些情况下它们必须受到 静态初始化顺序失败 的影
  • 查找 postgres 提供的列表中不存在的值

    我试图找到一个查询来告诉我数据库中没有的值 例如 select seqID segment from flu where seqID IN 1 2 3 4 5 6 7 8 9 现在 如果我的数据库没有 seqID 3 8 9 我将如何查找
  • LINQ:从类型 T 的列表中,仅检索某个子类 S 的对象

    给定一个简单的继承层次结构 人 gt 学生 教师 职员 假设我有一个人员列表 L 该列表中有一些学生 教师和工作人员 使用 LINQ 和 C 有没有办法编写一个只能检索特定类型人员的方法 我知道我可以做类似的事情 var peopleIWa
  • 如何使 Rails 3 资源预编译速度更快?

    我有一个正在运行的 Rails 3 2 1 应用程序 我正在通过 Capistrano 进行部署deploy assets它运行deploy assets precompile task 一切工作都很好 除了编译本身非常慢 我没有那么多 C
  • 发布到 npm 时出现问题

    所以我尝试使用 React 构建一个开源项目并将其推送到 npm 问题是 我的组件虽然在测试环境中运行良好 安装到其他组件 但当我将其发布到 npm 并下载包并尝试访问它时 它给了我一个错误 这是代码的一个小示例 import React
  • 在 C# 中生成随机浮点数的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 C 中生成随机浮点数的最佳方法是什么 更新 我想要从 float Minvalue 到 float Maxvalue 的随机浮点数 我在一些
  • 发布数据时维护 ViewBag 值

    我有一个逻辑问题需要回答 这是一个场景 在控制器中 ViewBag Name aaaa 在视野中 ViewBag Name 在我的控制器中 我为 ViewBag 设置了值 并从 VIew 中的 ViewBag 检索了值 现在在 View 中
  • ASP.NET Core 过滤器内的 ViewBag

    基于这篇文章制作一个全局ViewBag https stackoverflow com questions 23381295 make a global viewbag 我正在尝试在 ASP NET Core 2 2 中实现以下内容 我意识
  • 为什么在 10.5 上我必须在 NSWindowController 上调用 showWindow 两次?

    我有一个 NSWindowController 的子类 我用它从笔尖加载窗口并将其显示在屏幕上 下面是当我想显示窗口时调用的代码 在 10 6 上 当调用 showCustomWindow 时 会显示窗口 但在 10 5 上 必须调用此方法
  • 以编程方式在指令内添加指令

    我想将指令的另一个实例附加到父指令中 但我无法使用 apply 重新编译我的指令 我想我在某个地方错过了一些东西 我的 HTML 代码 div div div div
  • 关闭文件后未保存展开/折叠状态

    在 Visual Studio 中 您可以在不使用区域的情况下展开和折叠代码 例如在代码隐藏页面中您可以折叠方法等 而在 ASPX 页面中您可以折叠标签 标签等 当您的页面很长并且您希望将开发重点放在特定部分时 它非常有用 它的一个很酷的地
  • 如何在 Angular 单元测试中模拟/触发 $routeChangeSuccess?

    给定一个附加到 routeChangeSuccess 事件的处理程序来更新 rootScope 上的 title 属性 rootScope on routeChangeSuccess function event current previ
  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密