5

我有一个 ec2-ubuntu 实例。现在我忘记了用户的密码。不幸的是,我也丢失了我曾经与 putty 一起使用的 .pem 文件和 .ppk 文件。并且发现很难进入。我想升级我的一些代码。

我已经浏览了以下链接,就可以做什么提供了建议。

  1. aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to

  2. 将密钥对添加到现有 ec2 实例

  3. 锁定-myself-out-root-account-ec2-ubuntu-instance

  4. ec2-修复-ebs-root

我有额外的限制,系统的私有 i/p 地址不应更改。我正在使用的软件之一使用系统私有 i/p 地址作为许可证。目前我的实例只有一个卷并且是根卷。

根据上面提到的链接,我需要分离我的卷并附加到其他实例。进行必要的访问更改。并重新附加到原始实例。但是,由于我的卷是根卷,我需要停止实例然后将其分离。如果我的理解是正确的,这可能会导致实例的私有 i/p 地址发生变化。

想知道有没有什么可以做的?或者按照链接中提到的步骤是唯一的方法,然后在实例重启时更新软件许可证?

谢谢

4

3 回答 3

6

注意:EC2 实例的停止/启动将更改 IP 地址(只需读取 OP 需要 IP 保持不变)。

这适用于 AWS EC2 Ubuntu 18.04。

  • 生成新的密钥对(使用putty 密钥生成器或 - 如果赶时间 -在线生成器)。
  • 将生成的ssh-rsa ...公钥插入到下面的脚本中
  • 停止实例
  • 将实例用户数据设置为此云初始化脚本
#cloud-config
bootcmd:
 - echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys
  • 启动实例
  • 测试连接
  • 再次停止实例并删除用户数据(您可能会忘记这样做)

注意事项和警告

  • AWS 云初始化文档
  • 云初始化文档和示例
  • 空格在云初始化脚本中似乎很重要,抵制格式化的冲动,例如在哈希后插入一个空格#cloud-config
  • 我摆弄了一下cloud-init-per once,但从来没有成功过,只是浪费了很多时间
  • 您可以使用>>而不是>附加密钥而不是覆盖authorized_keys文件。但是如果你在之前的尝试中搞砸了内容,你永远不会知道它为什么不起作用。
  • 您可以更改脚本以推送任何用户的密钥,例如默认 EC2ubuntu用户:echo 'ssh-rsa ...' > /home/ubuntu/.ssh/authorized_keys
  • 请注意已安装的密钥轮换代理,例如JumpCloud,这可能会覆盖authorized_keys文件。对于 JumpCloud,您可以更改要写入的脚本echo 'ssh-rsa ...' > /home/ubuntu/.ssh/authorized_keys.jcorig(JumpCloud 包括该文件的内容)
  • 必须将 Ubuntu 配置为允许 SSH 连接(应该是默认设置)
  • SSH 端口需要打开(Ubuntu 防火墙)
  • 实例的安全组(AWS防火墙)需要允许SSH端口和你的IP
  • 整个过程可以自动化(停止、设置用户数据、启动、连接和修复、停止、清除用户数据、启动)。有趣的 AWS 命令​​是(Java 客户端):
m_ec2.modifyInstanceAttribute(new ModifyInstanceAttributeRequest().withInstanceId("<instance-id>").withUserData(userdataBase64));

ec2 用户数据

于 2019-12-19T10:18:40.973 回答
5

我的建议是:

  1. 拍摄实例的快照(创建 AMI)。
  2. 使用该 AMI 启动一个新实例并使用新的密钥/对。
  3. 使用弹性IP地址,这样下次就不会改变了。或者按照 user1050134 的建议使用 VPC。
于 2013-06-10T07:26:52.513 回答
2

我认为你有两个选择:

  1. 创建实例的 AMI,使用新密钥/对启动它并附加弹性 IP(推荐)。
  2. 或者,分离根卷,附加并挂载到另一个实例,然后创建一个 ssh 密钥/对并将公钥的内容复制到 /home/ubuntu/.ssh/authorized_keys 文件。最后,尝试使用新生成的私钥和 ubuntu 用户登录。
于 2013-06-11T09:43:10.640 回答