更改ec2实例的密钥对

时间:2011-10-24 20:19:06

标签: amazon-web-services amazon-s3 amazon-ec2 ssh key-pair

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

23 个答案:

答案 0 :(得分:425)

这样做: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair

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

  1. 停止正在运行的EC2实例
  2. 取消其/dev/xvda1卷(让我们称之为卷A) - see here
  3. 使用我的新密钥对启动新的t1.micro EC2实例。 确保在同一子网中创建,否则您必须终止实例并再次创建它。 - see here
  4. 将卷A附加到新的微实例,/dev/xvdf(或/dev/sdf
  5. SSH到新的微实例并将卷A安装到/mnt/tmp

    $ sudo mount / dev / xvdf1 / mnt / tmp

  6. ~/.ssh/authorized_keys复制到/mnt/tmp/home/ubuntu/.ssh/authorized_keys

  7. 注销
  8. 终止微型实例
  9. 从中分离卷A
  10. 将卷A作为/dev/xvda
  11. 附加回主实例
  12. 启动主实例
  13. 像以前一样使用新的.pem文件
  14. 登录

    那就是它。

答案 1 :(得分:166)

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

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

如果要更改用于访问实例的ssh密钥,您需要编辑实例本身的authorized_keys文件并转换为新的ssh公钥。

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

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

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

当您考虑在EC2上使用ssh密钥对时,我建议您将自己的个人ssh公钥上传到EC2,而不是让亚马逊为您生成密钥对。

这是我写的关于此的文章:

  

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

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

答案 2 :(得分:67)

下载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

答案 3 :(得分:49)

AWS EC2支持说明:

  1. 更改pem login
  2. 转到您的EC2控制台
  3. 在NETWORK&安全,单击密钥对单击创建密钥对
  4. 为新密钥对命名,保存.pem文件。的名字 密钥对将用于连接到您的实例
  5. 创建与您的实例的SSH连接并保持打开状态
  6. 在PuttyGen中,点击"加载"加载.pem文件
  7. 选中SSH-2 RSA单选按钮。点击"保存私钥" 您将弹出窗口警告,单击"是“
  8. 点击"保存公钥"同样,生成公钥也是如此。 这是我们要复制到您的公钥 当前实例
  9. 使用新密钥对名称和保存公钥 扩展名.pub
  10. 在记事本中打开公钥内容
  11. 复制以下内容"评论:" import-openssh-key"之前  " ----结束SSH2公钥----
    注意 - 您需要复制内容  作为一行 - 删除所有新行
  12. 在已连接的实例上,使用打开authorized_keys文件  工具vi。运行以下命令:vi .ssh / authorized_keys 您应该在文件中看到原始公钥
  13. 将光标移动到第一个公钥的末尾  内容:类型"我"用于插入
  14. 在新行上输入" ssh-rsa"并在粘贴之前添加空格  公钥的内容,空格和.pem的名称  文件(没有.pem) 注意 - 您应该获得与上一行格式相同的行
  15. 按Esc键,然后键入:wq!
  16. 这将保存更新的authorized_keys文件

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

    当您确认已经可以使用新密钥对通过SSH连接到实例时,您可以使用vi .ssh / authorized_key并删除旧密钥。

    回答Shaggie评论:

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

答案 4 :(得分:34)

我注意到,当由Elastic Beanstalk管理时,可以更改您的活动EC2密钥对。在Elastic Beanstalk下>配置>安全性,从 EC2密钥对下拉列表中选择新密钥。您会看到此消息询问您是否确定:

  

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

当我这样做时,我的实例已经终止了。然后它开始,终止,然后重新开始。显然,“替换”意味着终止和创建新实例。如果您已修改启动卷,请先创建AMI,然后在同一Elastic Beanstalk>中指定该AMI。配置>实例形成为自定义AMI ID 。这也警告要更换EC2实例。

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

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

答案 5 :(得分:28)

我经历了这种方法,过了一段时间,才能使它发挥作用。缺乏实际命令使其变得艰难,但我想出来了。然而 - 在以后不久发现并测试了更简单的方法:

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

答案 6 :(得分:15)

如果遵循以下步骤,将节省大量时间,并且无需停止正在运行的实例。

  1. 使用新密钥对启动新的t1.micro EC2实例。 确保您在同一子网中创建,否则您将不得不终止该实例并再次创建它。
  2. 通过SSH连接到新的微型实例,并在计算机上的某处复制〜/ .ssh / authorized_keys 的内容。
  3. 使用旧ssh密钥登录主实例。
  4. 复制&将文件内容从第2点替换为〜/ .ssh / authorized_keys
  5. 现在您只能使用新密钥重新登录。旧密钥将不再起作用。
  6. 就是这样。享受:)

答案 7 :(得分:11)

这个问题有两种情况:-

1)您无权访问.pem文件,这就是您要创建一个新文件的原因。

2)您具有。 pem文件访问权限,但您只是出于某些漏洞或安全目的而要更改或创建新的.pem文件。 >

因此如果您丢失了按键,可以向上滚动并查看其他答案。但是如果出于安全目的仅更改.pem文件,请按照以下步骤操作:-

1)转到AWS控制台登录并从密钥对创建一个新的.pem文件 那边的部分。它将自动下载.pem文件到 您的电脑

2)如果您使用的是Linux / ubuntu,则将权限更改为400,请点击以下 命令

chmod 400 yournewfile.pem

3)在您的本地计算机上生成新下载文件的RSA

ssh-keygen -f yournewfile.pem -y

4)从此处复制RSA代码

5)现在通过先前的.pem文件将SSH传输到您的实例

ssh -i oldpemfileName.pem username@ipaddress

sudo vim  ~/.ssh/authorized_keys

6)给两行空格,然后在此处粘贴新文件的复制RSA 然后保存文件

7)现在,您的新.pem文件已与正在运行的实例链接

8)如果要禁用以前的.pem文件访问权限,则只需编辑

sudo vim ~/.ssh/authorized_keys

文件并从此处删除或更改以前的RSA。

注意:-小心删除,以免更改新创建的RSA。

通过这种方式,您可以将新的.pem文件更改/连接到正在运行的实例。

出于安全考虑,您可以撤消对以前生成的.pem文件的访问。

希望这会有所帮助!

答案 8 :(得分:8)

如果您使用的是ElasticBeanstalk平台,可以通过以下方式更改密钥:

  • Elastic Beanstalk面板
  • 配置
  • 实例(cog top-right)
  • EC2密钥对

这将终止当前实例并使用所选键/设置创建新实例。

答案 9 :(得分:6)

最简单的解决方案是复制

的内容
~/.ssh/id_rsa.pub

进入您的AWS实例的authorized_keys

~/.ssh/authorized_keys

这将允许您在不指定ssh命令的pem文件的情况下ssh进入EC2实例。一旦您测试了与其连接的密钥,您就可以删除所有其他密钥。

如果您需要创建新密钥以与其他人共享,您可以使用以下方式执行此操作:

ssh-keygen -t rsa

将创建私有key.pem文件,您可以使用以下命令获取该公钥:

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

拥有private_key.pem的任何人都可以与

联系
ssh user@host.com -i private_key.pem

答案 10 :(得分:6)

我认为最简单的方法是:

  1. 创建原始iinstance的AMI图像。
  2. 使用新的密钥对使用AMI映像(来自步骤1)启动新的EC2实例。
  3. 使用新密钥登录新的EC2实例。

答案 11 :(得分:2)

我已尝试过以下步骤,但无需停止实例即可运行。我的要求是 - 因为我更改了我的客户机,旧的.pem文件不允许我登录ec2实例。

  1. 使用旧计算机上的旧.pem文件登录ec2实例。打开〜/ .ssh / authorized_keys
  2. 您将在该文件中看到旧密钥。

    1. ssh-keygen -f YOUR_PEM_FILE.pem -y 它会生成一个密钥。将密钥附加到步骤#1中打开的〜/ .ssh / authorized_keys。无需删除旧密钥。

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

    3. 全部完成。

      我可以从新的客户端计算机登录AWS ec2。

答案 12 :(得分:1)

Yegor256的答案对我有用,但我想我会添加一些评论来帮助那些不太擅长安装驱动器的人(比如我!):

亚马逊让您可以选择在附加卷时为卷命名的内容。您使用了/ dev / sda - / dev / sdp范围内的名称 然后,较新版本的Ubuntu会将你放在那里的内容重命名为/ dev / xvd(x)或其他东西。

所以对我来说,我选择/ dev / sdp作为AWS中的挂载名称,然后我登录到服务器,发现Ubuntu已将我的卷重命名为/ dev / xvdp1)。然后我不得不安装驱动器 - 对我来说,我必须这样做:

https://github.com/CocoaPods/CocoaPods/issues/5232

跳过所有这些箍后,我可以在/ mnt / tmp

访问我的文件

答案 13 :(得分:1)

你能做什么...

  1. 创建一个附加了AmazonEC2RoleForSSM策略的新实例配置文件/角色。

  2. 将此实例配置文件附加到实例。

  3. 使用SSM会话管理器登录到实例。
  4. 在本地计算机上使用keygen创建密钥对。
  5. 使用您的SSM会话将该密钥的公共部分推送到实例上。
  6. 利润。

答案 14 :(得分:1)

感谢小伙伴们。当我需要休息密钥对时,一定会记住它们。 但是,出于效率和懒惰的考虑,我提出了其他建议:

  1. 创建新的密钥对并下载凭据
  2. 右键单击您的实例>完成创建AMI
  3. 终止您的实例(或停止实例,直到您确定可以从新的闪亮AMI创建另一个实例为止)
  4. 从刚刚创建的AMI启动新的EC2实例,并指定在上面的步骤(1)中创建的新密钥对。

希望这对您有用,并且可以节省您一些时间,并最大程度地减少您从这种东西中得到的白发数量:)

答案 15 :(得分:1)

这适用于拥有两个不同的 pem 文件并且出于任何安全目的想要丢弃两者之一的人。假设我们要丢弃 1.pem

  1. 连接到服务器 2 并从 ~/.ssh/authorized_keys 复制 ssh 密钥
  2. 在另一个终端中连接服务器 1 并将密钥粘贴到 ~/.ssh/authorized_keys 中。您现在将在这里拥有两个公共 ssh 密钥
  3. 现在,为了您的信心,请尝试使用 2.pem 连接服务器 1。您将能够将服务器 1 与 1.pem 和 2.pem 连接
  4. 现在,注释 1.pem ssh 并使用 ssh -i 2.pem user@server1

答案 16 :(得分:0)

您有多种选择来替换EC2实例的密钥。

  1. 您可以在.ssh / authorized_keys文件中手动替换密钥。但是,这需要您实际访问实例或卷(如果未加密)。
  2. 您可以使用AWS Systems Manager。这需要安装一个代理。

由于第一个选项可以在答案中轻松找到,也可以在您选择的搜索引擎中找到,因此我想着重于Systems Manager。

  1. 打开服务Systems Manager
  2. 单击左侧的Automation
  3. 点击Execute Automation
  4. 选择AWSSupport-TroubleshootSSH(通常在最后一页)

您可以在Official AWS Documentation

上找到更多信息。

答案 17 :(得分:0)

您无需旋转根设备并更改authorized_keys中的SSH公钥。为此,可以利用userdata将ssh密钥添加到任何实例。为此,您首先需要使用AWS控制台或通过ssh-keygen创建一个新的KeyPair。

ssh-keygen -f YOURKEY.pem -y

这将为您的新SSH KeyPair生成公共密钥,复制此公共密钥并在以下脚本中使用它。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6xigPPA/BAjDPJFflqNuJt5QY5IBeBwkVoow/uBJ8Rorke/GT4KMHJ3Ap2HjsvjYrkQaKANFDfqrizCmb5PfAovUjojvU1M8jYcjkwPG6hIcAXrD5yXdNcZkE7hGK4qf2BRY57E3s25Ay3zKjvdMaTplbJ4yfM0UAccmhKw/SmH0osFhkvQp/wVDzo0PyLErnuLQ5UoMAIYI6TUpOjmTOX9OI/k/zUHOKjHNJ1cFBdpnLTLdsUbvIJbmJ6oxjSrOSTuc5mk7M8HHOJQ9JITGb5LvJgJ9Bcd8gayTXo58BukbkwAX7WsqCmac4OXMNoMOpZ1Cj6BVOOjhluOgYZbLr" >> /home/hardeep/.ssh/authorized_keys
--//

重新启动后,计算机将具有指定的SSH公开密钥。 第一次重新启动后,删除用户数据。进一步了解userdata on startup

答案 18 :(得分:0)

我的问题是,我尝试使用IP而不是公共DNS。然后我尝试使用public DNS及其解决方法

答案 19 :(得分:0)

如果您无法登录VM并删除了ssh密钥,还可以使用以下步骤更改ec2的密钥对。 一步一步走 1)停止您的ec2实例。 2)拍摄虚拟机和存储的快照。 3)在创建新VM的同时,选择快照并从Snapshot创建VM。 4)创建VM时会下载您的密钥对。 5)一旦您的虚拟机启动,您就可以使用新的密钥对ssh,您的数据也将恢复。

答案 20 :(得分:0)

  • 创建新密钥,例如使用PuTTY密钥生成器
  • 停止实例
  • 设置实例用户数据以将公钥推送到服务器
  • 启动实例

警告:不要忘记再次清除用户数据。否则,将在每次实例启动时按下此键。 Step-by-step instructions

#cloud-config
bootcmd:
 - echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys

enter image description here

答案 21 :(得分:0)

仅当您有权访问要更改/添加密钥的实例时,此功能才有效。 您可以创建新密钥对。或者,如果您已经拥有密钥对,则可以将新对的公钥粘贴到实例上的authorized_keys文件中。

vim .ssh / authorized_keys

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

希望这有帮助。

答案 22 :(得分:0)

替代解决方案。如果您只有服务器上的访问权限。在这种情况下,不要从 AWS 控制台中删除 pem 文件。只需从 sudo nano ~/.ssh/authroized_keys 中删除 pem 访问密钥并添加您的系统公共 ssh 密钥。现在您可以访问 ssh user@i.p