AWS EC2 忘记密码并且无法使用 SSH

use*_*134 5 ubuntu amazon-ec2 amazon-web-services

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

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

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

  2. add-keypair-to-existing-ec2-instance

  3. 锁定我自己的 root-account-ec2-ubuntu-instance

  4. ec2-fix-ebs-root

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

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

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

谢谢

Ret*_*ner 7

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

这适用于 AWS EC2 Ubuntu 18.04。

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

注意事项和警告

  • 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));
Run Code Online (Sandbox Code Playgroud)

EC2 用户数据


Pac*_*nSV 6

我的建议是:

  1. 拍摄实例快照(创建 AMI)。
  2. 使用该 AMI 启动新实例并使用新密钥/对。
  3. 使用弹性IP地址,这样下次就不会改变。或者按照 user1050134 建议使用 VPC。