500

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

4

23 回答 23

576

如果您不再拥有对现有服务器的 SSH 访问权限(即您丢失了私钥) ,此答案很有用。

如果您仍有 SSH 访问权限,请使用以下答案之一。

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

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

  1. 停止正在运行的 EC2 实例
  2. 分离它的/dev/xvda1卷(我们称之为卷 A) -见这里
  3. 使用我的新密钥对启动新的 t1.micro EC2 实例。确保您在同一子网中创建它,否则您将不得不终止实例并重新创建它。-看这里
  4. 将卷 A 附加到新的微实例,如/dev/xvdf(或/dev/sdf
  5. SSH 到新的微实例并将卷 A 挂载到/mnt/tmp
$ sudo mkdir /mnt/tmp; sudo mount /dev/xvdf1 /mnt/tmp
  1. 复制~/.ssh/authorized_keys/mnt/tmp/home/ubuntu/.ssh/authorized_keys
  2. 登出
  3. 终止微实例
  4. 从中分离卷 A
  5. 将卷 A 附加到主实例/dev/xvda
  6. 启动主实例
  7. 像以前一样登录,使用你的新.pem文件

而已。

于 2012-08-02T11:07:38.050 回答
207

启动实例后,无法在元数据级别更改与实例关联的密钥对,但您可以更改用于连接到实例的 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 文件后,请始终使用不同的终端确认您能够 ssh 进入实例,然后再断开用于编辑文件的会话。您不想犯错误并将自己完全锁定在实例之外。

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

这是我写的一篇文章:

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

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

于 2011-10-24T21:05:10.313 回答
92

下载 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
于 2014-09-17T16:25:31.083 回答
65

来自 AWS EC2 支持的说明:

  1. 更改 pem 登录
  2. 转到您的 EC2 控制台
  3. 在 NETWORK & SECURITY 下,点击 Key Pair 点击 Create Key Pair
  4. 为您的新密钥对命名,保存 .pem 文件。密钥对的名称将用于连接到您的实例
  5. 创建与您的实例的 SSH 连接并保持打开状态
  6. 在 PuttyGen 中,单击“加载”以加载您的 .pem 文件
  7. 保持选中 SSH-2 RSA 单选按钮。点击“保存私钥”会弹出警告窗口,点击“是”</li>
  8. 点击“保存公钥”,生成公钥。这是我们要复制到您当前实例的公钥
  9. 使用新的密钥对名称和扩展名 .pub 保存公钥
  10. 在记事本中打开公钥内容
  11. 复制“注释:“imported-openssh-key”下方和“之前的内容---- END SSH2 PUBLIC KEY ----
    注意 - 您需要将内容复制为一行 - 删除所有新行
  12. 在您连接的实例上,使用工具 vi 打开您的 authorized_keys 文件。运行以下命令: vi .ssh/authorized_keys 您还应该在文件中看到原始公钥
  13. 将文件上的光标移动到第一个公钥内容的末尾:输入“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 ) 并将其重新附加到工作实例,而不是更改卷上的密钥并将其重新附加到前一个实例。

于 2016-06-29T09:02:34.647 回答
46

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

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

当我这样做时,我的实例已经终止。然后它开始,终止,然后重新开始。显然“替换”意味着终止并创建一个新实例。如果您修改了引导卷,请先创建一个 AMI,然后在与自定义 AMI ID相同的 Elastic Beanstalk > Configuration > Instances 表单中指定该 AMI 。这也会警告更换 EC2 实例。

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

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

于 2014-05-29T22:26:36.820 回答
35

我经历了这种方法,过了一段时间,能够使它工作。缺乏实际命令使它变得困难,但我想通了。但是 - 不久之后发现并测试了更简单的方法:

  1. 将您的实例保存为 AMI(重启与否,我建议重启)。这仅在 EBS 支持时才有效。
  2. 然后,只需从此 AMI 启动一个实例并分配您的新密钥文件。
  3. 将弹性 IP(如果适用)移至新实例,就完成了。
于 2013-04-16T23:29:51.173 回答
18

这个问题有两种情况: -

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 文件的访问权限。

希望它会有所帮助!

于 2020-03-03T06:55:03.633 回答
16

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

  1. 使用新的密钥对启动新的 t1.micro EC2 实例。确保您在同一子网中创建它,否则您将不得不终止实例并重新创建它。
  2. 通过 SSH 连接到新的微型实例并将~/.ssh/authorized_keys的内容复制到您计算机上的某个位置。
  3. 使用旧的 ssh key登录到主实例。
  4. 将第 2 点的文件内容复制并替换到 ~/.ssh/authorized_keys
  5. 现在您只能使用新密钥再次登录。旧钥匙将不再起作用。

这就对了。享受:)

于 2016-04-16T17:19:20.070 回答
16

我相信最简单的方法是:

  1. 创建现有实例的 AMI 映像。
  2. 使用带有新密钥对的 AMI 映像(由步骤 1 创建)启动新的 EC2 实例。
  3. 使用新密钥登录到新的 EC2 实例。
于 2016-07-04T08:43:23.640 回答
14

脚步:

  1. 创建新密钥,例如使用 AWS 控制台、PuTTY 密钥生成器或 ssh-keygen
  2. 停止实例
  3. 设置实例用户数据以将公钥推送到服务器
  4. 启动实例

在此处输入图像描述

#cloud-config
cloud_final_modules:
- [once]
bootcmd:
 - echo 'ssh-rsa AAAAB3Nz...' > /home/USERNAME/.ssh/authorized_keys

USERNAME机器的预期用户名在哪里。AWS 提供了一系列默认用户名。

AWS 的分步说明

于 2019-12-27T14:23:00.247 回答
10

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

  • 弹性豆茎面板
  • 配置
  • 实例(齿轮右上角)
  • EC2 密钥对

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

于 2015-11-02T21:37:21.937 回答
9

最简单的解决方法是复制

~/.ssh/id_rsa.pub

进入您的 AWS 实例的授权密钥

~/.ssh/authorized_keys

这将允许您在不为 ssh 命令指定 pem 文件的情况下通过 ssh 进入 EC2 实例。测试连接到它后,您可以删除所有其他密钥。

如果您需要创建一个新密钥以与其他人共享,您可以这样做:

ssh-keygen -t rsa

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

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

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

ssh user@host.com -i private_key.pem
于 2017-01-27T15:21:57.397 回答
6

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

ssh-keygen -f YOURKEY.pem -y

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

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 公钥。首次重启后删除用户数据。阅读更多关于启动时的用户数据。

于 2019-06-17T07:48:14.937 回答
3

您有多个选项来替换您的 EC2 实例的密钥。

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

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

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

您可以在AWS 官方文档中找到更多信息

于 2019-02-06T09:47:47.460 回答
3

我已经尝试了以下步骤,并且它在不停止实例的情况下工作。我的要求是 - 由于我更改了客户端计算机,旧的 .pem 文件不允许我登录到 ec2 实例。

  1. 使用旧机器上的旧 .pem 文件登录到 ec2 实例。打开 ~/.ssh/authorized_keys

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

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

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

全部完成。

我能够从我的新客户端机器登录到 AWS ec2。

于 2016-11-22T06:17:00.143 回答
3

谢谢提醒伙计。当我需要休息密钥对时,一定会记住它们。然而,为了效率和懒惰,我想出了别的办法:

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

希望这对您有用,并为您节省一些时间,并最大限度地减少您从此类物品中获得的白发数量 :)

于 2020-05-11T23:28:34.240 回答
2

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

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

你可以做什么...

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

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

  3. 使用 SSM 会话管理器登录实例。
  4. 使用本地计算机上的 keygen 创建密钥对。
  5. 使用您的 SSM 会话将该密钥的公共部分推送到实例上。
  6. 利润。
于 2020-02-04T09:50:27.320 回答
1

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

附加卷时,Amazon 让您可以选择要为卷命名的名称。您使用了 /dev/sda - /dev/sdp 范围内的名称。然后,较新版本的 Ubuntu 会将您放入其中的内容重命名为 /dev/xvd(x) 或类似的名称。

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

mount -t ext4 xvdp1 /mnt/tmp

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

于 2016-05-01T21:46:07.853 回答
0

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

于 2019-08-09T12:34:36.703 回答
0

我的问题是,我尝试了IP而不是 public DNS。然后我尝试了public DNS它并解决了

于 2019-07-10T05:20:13.167 回答
0

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

于 2021-02-25T12:52:39.193 回答
0

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

vim .ssh/authorized_keys

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

希望这可以帮助。

于 2015-10-05T19:59:33.830 回答