AWS EC2忘记密码而无法使用SSH

时间:2013-06-08 14:19:45

标签: ubuntu amazon-web-services amazon-ec2

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

我已经通过以下链接提供了可以做什么的建议。

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

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

  3. locked-myself-out-root-account-ec2-ubuntu-instance

  4. ec2-fix-ebs-root

  5. 我还有一个额外的限制,即系统的私有i / p地址不应该改变。我正在使用的软件之一使用系统私有i / p地址进行许可。目前我的实例只有一个卷,而且是根卷。

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

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

    感谢

3 个答案:

答案 0 :(得分:2)

我的建议是:

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

答案 1 :(得分:1)

我认为你有两个选择:

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

答案 2 :(得分:0)

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

这对我适用于AWS EC2 Ubuntu 18.04。

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

注释和警告

  • AWS cloud init docs
  • cloud init docs & examples
  • 在云初始化脚本中,空格似乎很重要,可以抵制格式化的冲动,例如,在#cloud-config中的哈希之后插入空格
  • 我摆弄cloud-init-per once,但从来没有奏效,只是浪费了很多时间
  • 您可以使用>>而不是>来添加密钥,而不是覆盖authorized_keys文件。但是,如果您在之前的尝试中破坏了内容,那么您将永远不知道为什么它不起作用。
  • 您可以更改脚本以按任何用户的键,例如默认的EC2 ubuntu用户: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 user data