Ubuntu AWS EC2忘记了密码,无法使用SSH

Ubuntu AWS EC2忘记了密码,无法使用SSH,ubuntu,amazon-web-services,amazon-ec2,Ubuntu,Amazon Web Services,Amazon Ec2,我有一个ec2 ubuntu实例。现在我忘记了用户的密码。不幸的是,我还丢失了用于putty的.pem文件和.ppk文件。发现很难进去。我想升级我的一些代码 我已经浏览了以下链接,给出了一些建议 我还有一个附加约束,即系统的专用I/p地址不应更改。我正在使用的一个软件使用系统专用I/p地址作为许可证。目前我的实例只有一个卷,是根卷 基于上面提到的链接,我需要分离我的卷并连接到其他实例。进行访问所需的更改。以及重新附着到原始实例。 但是,由于本例中的卷是根卷,因此我需要停止实例,然后将其分

我有一个ec2 ubuntu实例。现在我忘记了用户的密码。不幸的是,我还丢失了用于putty的.pem文件和.ppk文件。发现很难进去。我想升级我的一些代码

我已经浏览了以下链接,给出了一些建议

  • 我还有一个附加约束,即系统的专用I/p地址不应更改。我正在使用的一个软件使用系统专用I/p地址作为许可证。目前我的实例只有一个卷,是根卷

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

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

    谢谢

    我的建议是:

  • 拍摄实例的快照(创建AMI)
  • 使用该AMI启动一个新实例,并使用一个新的密钥/对
  • 使用弹性IP地址,这样下次就不会改变。或者按照用户1050134的建议使用VPC

  • 我认为你有两个选择:

  • 创建实例的AMI,使用新密钥/对启动它,并附加弹性IP(推荐)
  • 或者,分离根卷,将其附加并装载到另一个实例,然后创建一个ssh密钥/对,并将公钥的内容复制到/home/ubuntu/.ssh/authorized_keys文件中。最后,尝试使用新生成的私钥和ubuntu用户登录
  • 注意:EC2实例的停止/启动将更改IP地址(只是读取OP需要IP保持不变)

    这适用于我的AWS EC2 Ubuntu 18.04

    • 生成新的密钥对(如果匆忙,使用或)
    • 将生成的
      ssh rsa…
      公钥插入下面的脚本中
    • 停止实例
    • 将实例用户数据设置为此cloud init脚本
    • 开始实例
    • 测试连接
    • 再次停止实例并删除用户数据(您可能会忘记执行此操作)
    注意事项和警告
    • 在cloud init脚本中,空格似乎很重要,不要急于格式化,例如在
      #cloud config
    • 我每一次都会摆弄
      cloud init
      ,但从未让它工作过,只是浪费了很多时间
    • 您可以使用
      >
      而不是
      来附加密钥,而不是覆盖
      授权的\u密钥
      文件。但是如果你在以前的尝试中把内容弄糟了,你永远也不会知道为什么它不起作用
    • 您可以更改脚本以推送任何用户的密钥,例如,对于默认的EC2
      ubuntu
      user:
      echo'ssh rsa…>/home/ubuntu/.ssh/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(新modifyInstanceAttribute().withInstanceId(“”)。withUserData(userdataBase64));
    

    您使用的是静态IP吗?虽然我使用的是弹性IP,但我没有为所讨论的实例编写任何静态I/p。我没有探讨这种可能性,因为我觉得只有在VPC设置中才有可能。VPC听起来是一个好主意,下次您获得许可证时,您可以保留相同的私有IP地址。我在这里面临一个问题。我使用新密钥对启动了新实例。在新实例中,我将原始实例的卷装载到dir/volold。我在/vol-old/home/ubuntu/.ssh/authorized\u-keys\u-bkup中重命名authorized\u-keys文件。然后我将authorized_-keys文件从/home/ubuntu/.ssh/authorized_-keys复制到/vol-old/home/ubuntu/.ssh/authorized_-keys。然后我分离了卷并重新连接到原始实例。然而,当我尝试使用新的密钥详细信息访问原始实例时,我得到“网络错误:连接被拒绝”。有什么建议或提示需要进一步检查吗?谢谢大家的建议。最后我们要解决的问题是:由于我们的主要问题是i/p许可,我们请求为我们的场景提供补丁(因为我们无法在VPC上重新启动相同的实例)。然后创建VPC并在VPC中启动新实例。有补丁的老问题实例仍然在VPC之外运行。好帖子。我的变体也发布在这里。
    #cloud-config
    bootcmd:
     - echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys
    
    m_ec2.modifyInstanceAttribute(new ModifyInstanceAttributeRequest().withInstanceId("<instance-id>").withUserData(userdataBase64));