更改ec2实例的密钥对

如何在AWSpipe理控制台中更改我的ec2实例的密钥对? 我可以停止实例,我可以创build新的密钥对,但是我没有看到任何链接来修改实例的密钥对。

这是我做的,感谢Eric Hammond的博客文章:

  1. 停止正在运行的EC2实例
  2. 分离它的/dev/sda1卷(我们称之为卷A)
  3. 启动新的t1.micro EC2实例,使用我的新密钥对。 确保你在同一个子网中创build它 ,否则你将不得不终止实例并重新创build它。
  4. 将卷A连接到新的微型实例,如/dev/xvdf (或/dev/sdf
  5. SSH到新的微型实例,并将卷A挂接到/mnt/tmp
  6. ~/.ssh/authorized_keys复制到/mnt/tmp/home/ubuntu/.ssh/authorized_keys
  7. 登出
  8. 终止微型实例
  9. 从它分离出卷A.
  10. 将卷A作为/dev/sda1附加到主实例
  11. 启动主实例
  12. 像以前一样login,使用新的.pem文件

而已。

一旦实例启动,就无法在元数据级别更改与实例关联的密钥对,但可以更改用于连接到实例的ssh密钥。

大多数AMI上都有一个启动进程,用于下载公共ssh密钥并将其安装在.ssh / authorized_keys文件中,以便您可以使用相应的私有ssh密钥作为该用户ssh进入。

如果你想改变你用来访问一个实例的ssh密钥,你需要编辑这个实例本身的authorized_keys文件并转换成新的ssh公钥。

authorized_keys文件位于您正在login的用户的主目录下的.ssh子目录下。 根据您正在运行的AMI,它可能在以下之一中:

 /home/ec2-user/.ssh/authorized_keys /home/ubuntu/.ssh/authorized_keys /root/.ssh/authorized_keys 

编辑authorized_keys文件后,始终使用不同的terminal来确认您能够在与用于编辑文件的会话断开连接之前,ssh进入实例。 你不想犯一个错误,把自己完全locking在实例之外。

在考虑EC2上的ssh密钥对时,我build议上传自己的个人ssh公钥到EC2,而不是让Amazon为你生成密钥对。

这是我写的关于这个的一篇文章:

将个人ssh密钥上传到Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys

这只适用于您运行的新实例。

下载您的AWS Pem后运行此命令。

 ssh-keygen -f YOURKEY.pem -y 

然后将输出转储到authorized_keys

或者将pem文件复制到您的AWS实例并执行以下命令

 chmod 600 YOURKEY.pem 

接着

 ssh-keygen -f YOURKEY.pem -y >> ~/.ssh/authorized_keys 

AWS EC2支持指令:

  1. 更改pemlogin
  2. 转到您的EC2控制台
  3. 在NETWORK&SECURITY下,点击密钥对点击创build密钥对
  4. 给你的新密钥对一个名字,保存.pem文件。 密钥对的名称将用于连接到您的实例
  5. 创build与您的实例的SSH连接并保持打开状态
  6. 在PuttyGen中,点击“Load”加载你的.pem文件
  7. 保持SSH-2 RSA单选button被选中。 点击“保存私钥”popup窗口警告,点击“是”
  8. 点击“保存公钥”,这样就可以生成公钥。 这是我们要复制到当前实例的公钥
  9. 使用新的密钥对名称和扩展名.pub保存公钥
  10. 在记事本中打开公钥内容
  11. 复制下面的内容“注释:”imported-openssh-key“和之前的”—-结束SSH2 PUBLIC KEY —-
    注意 – 您需要将内容复制为一行 – 删除所有新行
  12. 在连接的实例上,使用vi工具打开authorized_keys文件。 运行以下命令:vi .ssh / authorized_keys您也应该在文件中看到原始的公钥
  13. 将光标移动到第一个公钥内容的末尾:input“i”作为插入
  14. 在新行上键入“ssh-rsa”并在粘贴公钥,空格和.pem文件的名称之前添加一个空格(不带.pem)注意 – 您应该获得一行与上一行相同的格式
  15. 按Esc键,然后键入:wq!

这将保存更新的authorized_keys文件

现在尝试使用新的密钥pai打开一个新的SSH会话到您的实例

当你确认你能够使用新的密钥对SSH进入实例时,你可以vi .ssh / authorized_key并删除旧的密钥。

回答Shaggie的评论:

如果您无法连接到实例(例如,密钥已损坏),请使用AWS控制台分离卷( http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html )并将其重新附加到工作实例,而不是更改卷上的密钥并将其重新附加到以前的实例。

我经历了这种方法,过了一段时间,才使其工作。 缺乏实际的命令使得它变得困难,但是我明白了。 然而 – 更简单的方法被发现和testing后不久:

  1. 将你的实例保存为AMI(重启或不重启,我build议重启)。 这只有在EBS支持的情况下才有效。
  2. 然后,只需从这个AMI启动一个实例并分配新的密钥文件。
  3. 将弹性IP(如果适用)移至新实例,即可完成。

我注意到,当由Elastic Beanstalkpipe理时,您可以更改您的活动EC2密钥对。 在Elastic Beanstalk>configuration>实例下,从EC2密钥对下拉列表中select新密钥。 你会看到这个消息,问你是否确定:

EC2KeyName:对选项EC2KeyName设置的更改不会立即生效。 您现有的每个EC2实例都将被replace,您的新设置将会生效。

当我这样做时,我的实例已经被终止了。 然后开始,终止,然后重新开始。 显然“replace”意味着终止并创build一个新的实例。 如果您已经修改了引导卷,请先创buildAMI,然后在相同的Elastic Beanstalk> Configuration> Instances窗体中指定AMI作为自定义AMI ID 。 这也警告replaceEC2实例。

修改EC2密钥对和自定义AMI ID后,在看到有关两者的警告后,单击保存以继续。

请记住,在重新创build实例时,IP地址会发生变化,所以您需要从EC2控制台检索新的IP地址,以便在通过SSH连接时使用。

修改“ yegor256 ”的答案。 就像下面的步骤一样,它将节省大量的时间,并且不需要停止正在运行的实例。

  1. 使用新的密钥对启动新的t1.micro EC2实例。 确保你在同一个子网中创build它 ,否则你将不得不终止实例并重新创build它。
  2. SSH到新的微型实例,并将〜/ .ssh / authorized_keys的内容复制到您计算机上的某处。
  3. 旧的ssh密钥login到主实例。
  4. 将文件内容从点2复制并replace为〜/ .ssh / authorized_keys
  5. 现在只能用新的密钥重新login。 旧密钥将不再工作。

这就对了。 享受🙂

如果您正在使用ElasticBeanstalk平台,则可以通过执行以下操作更改密钥:

  • Elastic Beanstalk面板
  • 组态
  • 实例(cog右上angular)
  • EC2密钥对

这将终止当前实例,并用选定的键/设置创build新的实例。

我相信最简单的方法是:

  1. 创build原始实例的AMI图像。
  2. 使用新的密钥对,使用AMI映像(来自步骤1)启动新的EC2实例。
  3. 用新密钥login到新的EC2实例。

这只有在您有权访问要更改/添encryption钥的实例时才有效。您可以创build一个新的密钥对。 或者,如果您已经有密钥对,则可以将新对的公钥粘贴到实例的authorized_keys文件中。

vim .ssh / authorized_keys

现在您可以使用该对的私钥并login。

希望这可以帮助。

Yegor256的答案对我很有帮助,但我想我只是想补充一些意见来帮助那些不太擅长安装驱动器的人(比如我!):

亚马逊给你一个你想要命名的卷的附加select。 你已经在/ dev / sda – / dev / sdp中使用了一个名称。然后,较新版本的Ubuntu将会把你放在/ dev / xvd(x)中的东西重命名为这个。

所以对于我来说,我select/ dev / sdp作为AWS中的装载名称,然后login到服务器,并发现Ubuntu已将卷更名为/ dev / xvdp1)。 然后我必须装上驱动器 – 对我来说,我必须这样做:

 mount -t ext4 xvdp1 /mnt/tmp 

跳过所有这些箍之后,我可以在/ mnt / tmp中访问我的文件

我已经尝试下面的步骤,它没有停止实例工作。 我的要求是 – 因为我改变了我的客户机,旧的.pem文件不允许我login到EC2实例。

  1. 使用旧的.pem文件从旧机器login到ec2实例。 打开〜/ .ssh / authorized_keys

您将在该文件中看到您的旧密钥。

  1. ssh-keygen -f YOUR_PEM_FILE.pem -y它会生成一个密钥。 追encryption钥到步骤1中打开的〜/ .ssh / authorized_keys。 不需要删除旧密钥。

  2. 从AWS控制台创build一个新的密钥对。 将其存储在新机器中。 将其重命名为旧的pem文件 – 原因是旧的pem文件仍然与AWS中的ec2实例关联。

全做完了。

我可以从我的新客户端计算机login到AWS ec2。

最简单的解决方法是复制内容

 ~/.ssh/id_rsa.pub 

到您的AWS实例的authorized_keys中

 ~/.ssh/authorized_keys 

这将允许你ssh进入EC2实例,而不用为ssh命令指定一个pem文件。 一旦您testing连接,您可以删除所有其他键。

如果你需要创build一个新的密钥与他人分享,你可以这样做:

 ssh-keygen -t rsa 

这将创build私钥key.pem文件,您可以通过以下方式获取该公钥:

 ssh-keygen -f private_key.pem -y > public_key.pub 

任何有public_key.pub的人都可以连接

 ssh user@host.com -i public_key.pub