更改ec2实例的密钥对

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

555841 次浏览

一旦启动了实例,就无法在元数据级别上更改与该实例关联的密钥对,但是可以更改用于连接该实例的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 < / p >

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

这个答案是有用的在您不再有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。microec2实例,使用我的新密钥对。确保您在同一个子网中创建它,否则你将不得不终止实例并重新创建它。——在这里看到的
  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文件

就是这样。

我尝试了这种方法,过了一段时间后,我能够让它工作。缺乏实际的命令让它很困难,但我想出了办法。然而,不久之后发现并测试了更简单的方法:

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

我注意到当由Elastic Beanstalk管理时,你可以改变了你的活动EC2密钥对。在“Elastic Beanstalk > Configuration > Security”下,从EC2密钥对下拉菜单中选择新密钥。你会看到这条消息询问你是否确定:

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

.

.

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

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

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

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

只有当你可以访问你想要更改/添加密钥的实例时,这才会起作用。 您可以创建新的密钥对。或者如果您已经拥有密钥对,那么您可以将新密钥对的公钥粘贴到实例上的authorized_keys文件中

vim . ssh / authorized_keys

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

希望这能有所帮助。

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

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

这将终止当前实例,并创建一个具有所选键/设置的新实例。

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

  1. 开始新的t1。microec2实例,使用新的密钥对。确保您在同一个子网中创建它,否则你将不得不终止实例并重新创建它。
  2. SSH到新的微实例并复制~ / . ssh / authorized_keys的内容到你计算机的某个地方。
  3. 使用旧SSH密钥登录到主实例。
  4. 及复印件;替换指向2到~/.ssh/authorized_keys中的文件内容
  5. 现在您只需使用新密钥即可再次登录。旧钥匙不能用了。

就是这样。享受:)

Yegor256的回答对我来说很有用,但我想我只是添加一些评论来帮助那些不太擅长挂载驱动器的人(比如我!):

Amazon在附加卷时让您选择要如何命名它。您必须使用从/dev/sda到/dev/sdp范围内的名称 新版本的Ubuntu会将你放入的内容重命名为/dev/xvd(x)或类似的名称。< / p >

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

mount -t ext4 xvdp1 /mnt/tmp

在跳过所有这些步骤之后,我可以在/mnt/tmp目录下访问我的文件

来自AWS EC2支持的指令:

  1. 更改pem登录
  2. 转到EC2控制台
  3. 网络&安全性,单击“密钥对”单击“创建密钥对”
  4. 给你的新密钥对一个名字,保存。pem文件。的名称 密钥对将用于连接到您的实例
  5. 创建到实例的SSH连接并保持打开状态
  6. 在PuttyGen中,点击“加载”来加载。pem文件
  7. 保持选中SSH-2 RSA单选按钮。点击“保存私钥” 你会得到弹出窗口警告,点击“是”
  8. 同时点击“Save public key”,生成公钥。 这是我们要复制到你的 当前实例李< / >
  9. 使用新的密钥对名称和 李扩展.pub < / >
  10. 在记事本中打开公钥内容
  11. 复制"Comment: "imported-openssh-key"及之前的内容 “---- END SSH2 PUBLIC KEY ----
    . sh” 注意-您需要复制内容 作为一行-删除所有新行
  12. 在您连接的实例,打开authorized_keys文件使用 vi.执行以下命令。vi. ssh/authorized_keys . sh 您应该还会在文件中看到原始公钥
  13. 将光标移到文件上的第一个公钥的末尾 内容:输入“i”插入
  14. 在新行,键入“ssh-rsa”,并在粘贴之前添加一个空格 公钥的内容、空格和pem文件的名称 文件(没有。pem) 注意-你应该得到一行与前一行
  15. 相同的格式
  16. 按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)并将其重新连接到工作实例,而不是更改卷上的键并将其重新连接到前一个实例。

我认为最简单的方法是:

  1. 创建现有实例的AMI映像。
  2. 使用AMI映像(由步骤1创建)和新的密钥对启动新的EC2实例。
  3. 使用新密钥登录到新的EC2实例。

我已经尝试了以下步骤,它在没有停止实例的情况下工作。我的需求是-因为我已经更改了客户端机器,旧的.pem文件不允许我登录到ec2实例。

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

你会在那个文件里看到你的旧钥匙。

  1. ssh-keygen -f YOUR_PEM_FILE。pem - y 它会生成一个密钥。将键附加到~/。Ssh /authorized_keys在步骤#1中打开。

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

全部完成。

我可以从我的新客户端机器上登录到AWS ec2。

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

~/.ssh/id_rsa.pub

到您的AWS实例的authorized_keys at

~/.ssh/authorized_keys

这将允许您ssh进入EC2实例,而无需为ssh命令指定pem文件。测试连接后,可以删除所有其他键。

如果你需要创建一个新的密钥来与其他人共享,你可以通过:

ssh-keygen -t rsa

这将创建私钥。Pem文件,你可以通过以下方式获取该文件的公钥:

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

任何拥有private_key的人。Pem能够连接到

ssh user@host.com -i private_key.pem

您有几个选项可以替换EC2实例的密钥。

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

由于第一个选项可以很容易地在答案中或在您选择的搜索引擎中找到,所以我想重点介绍系统管理器。

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

你可以在AWS官方文档上找到更多信息

你不需要旋转根设备和改变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公钥。 请在第一次重启后删除用户数据。

.阅读更多关于启动时的用户数据

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

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

步骤:

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

enter image description here

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

其中USERNAME是机器的预期用户名。默认用户名列表是可从AWS获得

AWS的分步说明 . cn

你能做什么…

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

  2. 将此实例概要文件附加到实例。

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

这个问题有两种情况:-

1)你无法访问.pem文件,这就是为什么你想要创建一个新的。

2)你有. __abc0,但你只想为一些漏洞或安全目的更改或创建一个新的.pem文件。

所以如果你的钥匙丢了,你可以向上滚动查看其他答案。但如果您只是为了安全目的而更改您的.pem文件,请遵循以下步骤

1)进入AWS控制台登录,从密钥对创建一个新的.pem文件 那边的区域。它会自动下载。pem文件到 你的电脑< / p > 2)如果你使用的是Linux/ubuntu,修改权限为400 命令< / p >

chmod 400 yournewfile.pem

3)在本地生成新下载文件的RSA

ssh-keygen -f yournewfile.pem -y

4)从这里复制RSA代码

5)现在SSH到您的实例通过之前的。pem文件

ssh -i oldpemfileName.pem username@ipaddress


sudo vim  ~/.ssh/authorized_keys
给1 - 2行空间,并粘贴复制的新文件的RSA在这里 然后保存文件

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

8)如果你想禁止之前的。pem文件访问,那么只需编辑 < / p >

sudo vim ~/.ssh/authorized_keys

文件,并从这里删除或更改之前的RSA。

注意:-小心删除,以便新创建的RSA不会被更改。

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

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

希望对大家有所帮助!

谢谢你们的提示。当我需要休息钥匙对时,我一定会把它们记在心里。 然而,出于效率和懒惰的考虑,我想出了一些其他的东西:

  1. 创建新的密钥对并下载凭证
  2. 右键单击实例>创建AMI一旦完成
  3. 终止实例(或者只是停止它,直到您确定可以从新的闪亮AMI创建另一个实例)
  4. 从刚才创建的AMI启动一个新的EC2实例,并指定在上面步骤(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。使用SSH -i 2。pem user@server1连接

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

如果有人在这里,因为他们不能访问EC2实例,因为他们没有密钥对,但他们有IAM访问,你可以运行以下命令,允许临时访问(60秒)你的EC2实例使用你已经拥有的密钥,只要你知道用户名(通常是'ubuntu' ubuntu实例或' EC2 -user'亚马逊linux实例):

aws ec2-instance-connect send-ssh-public-key --region ${your-aws-region} --instance-id ${your-instance-id} --availability-zone ${your-instance-az} --instance-os-user ${username} --ssh-public-key file://path/to/public/key

(如果您的~/。Aws /凭据文件,您还可以通过在此命令中添加'——profile your-profile'标志来指定)

如果成功,输出将如下所示:

{
"RequestId": "3537268d-c161-41bb-a4ac-977b79b2bdc0",
"Success": true
}

然后你有60秒的时间用那把钥匙登录。