如何在 AWS 管理控制台中更改我的 ec2 实例的密钥对?我可以停止实例,我可以创建新的密钥对,但我没有看到任何修改实例密钥对的链接。
23 回答
如果您不再拥有对现有服务器的 SSH 访问权限(即您丢失了私钥) ,此答案很有用。
如果您仍有 SSH 访问权限,请使用以下答案之一。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair
这就是我所做的,感谢 Eric Hammond 的博客文章:
- 停止正在运行的 EC2 实例
- 分离它的
/dev/xvda1
卷(我们称之为卷 A) -见这里 - 使用我的新密钥对启动新的 t1.micro EC2 实例。确保您在同一子网中创建它,否则您将不得不终止实例并重新创建它。-看这里
- 将卷 A 附加到新的微实例,如
/dev/xvdf
(或/dev/sdf
) - SSH 到新的微实例并将卷 A 挂载到
/mnt/tmp
$ sudo mkdir /mnt/tmp; sudo mount /dev/xvdf1 /mnt/tmp
- 复制
~/.ssh/authorized_keys
到/mnt/tmp/home/ubuntu/.ssh/authorized_keys
- 登出
- 终止微实例
- 从中分离卷 A
- 将卷 A 附加到主实例
/dev/xvda
- 启动主实例
- 像以前一样登录,使用你的新
.pem
文件
而已。
启动实例后,无法在元数据级别更改与实例关联的密钥对,但您可以更改用于连接到实例的 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
这仅适用于您运行的新实例。
下载 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 支持的说明:
- 更改 pem 登录
- 转到您的 EC2 控制台
- 在 NETWORK & SECURITY 下,点击 Key Pair 点击 Create Key Pair
- 为您的新密钥对命名,保存 .pem 文件。密钥对的名称将用于连接到您的实例
- 创建与您的实例的 SSH 连接并保持打开状态
- 在 PuttyGen 中,单击“加载”以加载您的 .pem 文件
- 保持选中 SSH-2 RSA 单选按钮。点击“保存私钥”会弹出警告窗口,点击“是”</li>
- 点击“保存公钥”,生成公钥。这是我们要复制到您当前实例的公钥
- 使用新的密钥对名称和扩展名 .pub 保存公钥
- 在记事本中打开公钥内容
- 复制“注释:“imported-openssh-key”下方和“之前的内容---- END SSH2 PUBLIC KEY ----
注意 - 您需要将内容复制为一行 - 删除所有新行 - 在您连接的实例上,使用工具 vi 打开您的 authorized_keys 文件。运行以下命令: vi .ssh/authorized_keys 您还应该在文件中看到原始公钥
- 将文件上的光标移动到第一个公钥内容的末尾:输入“i”进行插入
- 在新行上,键入“ssh-rsa”并在粘贴公钥、空格和 .pem 文件的名称(不带 .pem)的内容之前添加一个空格 注意 - 你应该得到一行与上一行相同的格式
- 按 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 ) 并将其重新附加到工作实例,而不是更改卷上的密钥并将其重新附加到前一个实例。
我注意到当由 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 连接时使用。
我经历了这种方法,过了一段时间,能够使它工作。缺乏实际命令使它变得困难,但我想通了。但是 - 不久之后发现并测试了更简单的方法:
- 将您的实例保存为 AMI(重启与否,我建议重启)。这仅在 EBS 支持时才有效。
- 然后,只需从此 AMI 启动一个实例并分配您的新密钥文件。
- 将弹性 IP(如果适用)移至新实例,就完成了。
这个问题有两种情况: -
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 文件的访问权限。
希望它会有所帮助!
如果遵循以下步骤,它将节省大量时间,并且无需停止正在运行的实例。
- 使用新的密钥对启动新的 t1.micro EC2 实例。确保您在同一子网中创建它,否则您将不得不终止实例并重新创建它。
- 通过 SSH 连接到新的微型实例并将~/.ssh/authorized_keys的内容复制到您计算机上的某个位置。
- 使用旧的 ssh key登录到主实例。
- 将第 2 点的文件内容复制并替换到 ~/.ssh/authorized_keys
- 现在您只能使用新密钥再次登录。旧钥匙将不再起作用。
这就对了。享受:)
我相信最简单的方法是:
- 创建现有实例的 AMI 映像。
- 使用带有新密钥对的 AMI 映像(由步骤 1 创建)启动新的 EC2 实例。
- 使用新密钥登录到新的 EC2 实例。
如果您使用的是 ElasticBeanstalk 平台,您可以通过以下方式更改密钥:
- 弹性豆茎面板
- 配置
- 实例(齿轮右上角)
- EC2 密钥对
这将终止当前实例并使用选定的键/设置创建新实例。
最简单的解决方法是复制
~/.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
您无需轮换根设备并更改 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 公钥。首次重启后删除用户数据。阅读更多关于启动时的用户数据。
您有多个选项来替换您的 EC2 实例的密钥。
- 您可以在 .ssh/authorized_keys 文件中手动替换密钥。但是,这需要您实际访问未加密的实例或卷。
- 您可以使用 AWS Systems Manager。这需要安装代理。
由于可以在答案或您选择的搜索引擎中轻松找到第一个选项,因此我想专注于 Systems Manager。
- 打开服务
Systems Manager
- 点击
Automation
左侧。 - 点击
Execute Automation
- 选择
AWSSupport-TroubleshootSSH
(通常在最后一页)
您可以在AWS 官方文档中找到更多信息
我已经尝试了以下步骤,并且它在不停止实例的情况下工作。我的要求是 - 由于我更改了客户端计算机,旧的 .pem 文件不允许我登录到 ec2 实例。
- 使用旧机器上的旧 .pem 文件登录到 ec2 实例。打开 ~/.ssh/authorized_keys
您将在该文件中看到您的旧密钥。
ssh-keygen -f YOUR_PEM_FILE.pem -y 它将生成一个密钥。将密钥附加到在步骤#1 中打开的 ~/.ssh/authorized_keys。无需删除旧密钥。
从 AWS 控制台,创建一个新的密钥对。将其存放在您的新机器中。将其重命名为旧 pem 文件 - 原因是旧 pem 文件仍与 AWS 中的 ec2 实例相关联。
全部完成。
我能够从我的新客户端机器登录到 AWS ec2。
谢谢提醒伙计。当我需要休息密钥对时,一定会记住它们。然而,为了效率和懒惰,我想出了别的办法:
- 创建新的密钥对并下载凭据
- 右键单击您的实例 > 创建 AMI 完成后
- 终止您的实例(或者在您确定可以从新的闪亮 AMI 创建另一个实例之前停止它)
- 从您刚刚创建的 AMI 启动一个新的 EC2 实例,并指定您在上面的步骤 (1) 中创建的新密钥对。
希望这对您有用,并为您节省一些时间,并最大限度地减少您从此类物品中获得的白发数量 :)
这适用于拥有两个不同 pem 文件并且出于任何安全目的想要丢弃两者之一的人。假设我们要丢弃 1.pem
- 连接服务器 2 并从 ~/.ssh/authorized_keys 复制 ssh 密钥
- 在另一个终端中连接服务器 1 并将密钥粘贴到 ~/.ssh/authorized_keys 中。您现在将在这里拥有两个公共 ssh 密钥
- 现在,为了您的信心,尝试使用 2.pem 连接服务器 1。您将能够使用 1.pem 和 2.pem 连接服务器 1
- 现在,注释 1.pem ssh 并使用ssh -i 2.pem user@server1连接
你可以做什么...
创建附加了 AmazonEC2RoleForSSM 策略的新实例配置文件/角色。
将此实例配置文件附加到实例。
- 使用 SSM 会话管理器登录实例。
- 使用本地计算机上的 keygen 创建密钥对。
- 使用您的 SSM 会话将该密钥的公共部分推送到实例上。
- 利润。
Yegor256 的回答对我有用,但我想我会添加一些评论来帮助那些不太擅长安装驱动器的人(比如我!):
附加卷时,Amazon 让您可以选择要为卷命名的名称。您使用了 /dev/sda - /dev/sdp 范围内的名称。然后,较新版本的 Ubuntu 会将您放入其中的内容重命名为 /dev/xvd(x) 或类似的名称。
所以对我来说,我选择 /dev/sdp 作为 AWS 中的挂载名称,然后我登录服务器,发现 Ubuntu 已将我的卷重命名为 /dev/xvdp1)。然后我必须安装驱动器 - 对我来说,我必须这样做:
mount -t ext4 xvdp1 /mnt/tmp
跳过所有这些障碍后,我可以在 /mnt/tmp 访问我的文件
如果您无法登录 VM 并删除了 ssh 密钥,您还可以使用以下步骤更改 ec2 的密钥对。一步一步去 1) 停止你的 ec2 实例。2)拍摄虚拟机和存储的快照。3)创建一个新的虚拟机,同时选择你的快照并从你的快照创建虚拟机。4) 在创建 VM 时下载您的密钥对。5)一旦你的VM UP,你可以用一个新的密钥对ssh,你的数据也会回来。
我的问题是,我尝试了IP
而不是 public DNS
。然后我尝试了public DNS
它并解决了
替代解决方案。如果您拥有服务器上的唯一访问权限。在这种情况下,不要从 AWS 控制台中删除 pem 文件。只需从中删除 pem 访问密钥sudo nano ~/.ssh/authroized_keys
并添加您的系统公共 ssh 密钥。现在您可以访问了ssh user@i.p
仅当您有权访问要更改/添加密钥的实例时,这才有效。您可以创建一个新的密钥对。或者,如果您已经拥有密钥对,则可以将新密钥对的公钥粘贴到实例上的 authorized_keys 文件中。
vim .ssh/authorized_keys
现在您可以使用该对的私钥并登录。
希望这可以帮助。