如何在 AWS 管理控制台中更改我的 ec2 实例的密钥对?我可以停止实例,我可以创建新的密钥对,但我没有看到任何修改实例密钥对的链接。
如果您不再拥有对现有服务器的 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
这仅适用于您运行的新实例。
.pem
文件,但是 ssh -i key.pem
没有进行身份验证(权限被拒绝(公钥))。在密钥对名称下的 EC2 管理控制台中,它没有列出任何内容。这让我很震惊。我该如何设置?根据管理控制台,我配置的密钥对似乎没有分配给实例!
下载 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 单选按钮。点击“Save private key” 会弹出警告窗口,点击“Yes” 点击“Save public key”,生成公钥。这是我们要复制的公钥跨到当前实例 使用新的密钥对名称和扩展名 .pub 保存公钥 在记事本中打开公钥内容 将内容复制到“注释:”imported-openssh-key“和之前”---- END SSH2 PUBLIC KEY ---- 注意 - 您需要将内容复制为一行 - 删除已连接实例上的所有新行,使用工具 vi 打开您的 authorized_keys 文件。运行以下命令: vi .ssh/authorized_keys 你应该查看文件中的原始公钥还将文件上的光标移动到第一个公钥内容的末尾:键入“i”以插入新行,键入“ssh-rsa”并在粘贴之前添加一个空格公钥的内容、空格和 .pem 文件的名称(不带 .pem)注意 - 您应该得到与 previ 格式相同的行ous line 按 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 > 配置 > 实例表单中指定该 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 文件的访问权限。
希望它会有所帮助!
我相信最简单的方法是:
创建现有实例的 AMI 映像。使用带有新密钥对的 AMI 映像(由步骤 1 创建)启动新的 EC2 实例。使用新密钥登录到新的 EC2 实例。
脚步:
创建新密钥,例如使用 AWS 控制台、PuTTY 密钥生成器或 ssh-keygen 停止实例 设置实例用户数据以将公钥推送到服务器 启动实例
https://i.stack.imgur.com/1nRVg.png
#cloud-config
cloud_final_modules:
- [once]
bootcmd:
- echo 'ssh-rsa AAAAB3Nz...' > /home/USERNAME/.ssh/authorized_keys
其中 USERNAME
是机器的预期用户名。默认用户名列表为 available from AWS。
Step-by-step instructions from AWS
如果遵循以下步骤,它将节省大量时间,并且无需停止正在运行的实例。
使用新的密钥对启动新的 t1.micro EC2 实例。确保在同一子网中创建它,否则您将不得不终止实例并重新创建它。通过 SSH 连接到新的微型实例并将 ~/.ssh/authorized_keys 的内容复制到您计算机上的某个位置。使用旧的 ssh 密钥登录到主实例。将文件内容从第 2 点复制并替换到 ~/.ssh/authorized_keys 现在您只能使用新密钥再次登录。旧钥匙将不再起作用。
这就对了。享受 :)
如果您使用的是 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
?
您无需轮换根设备并更改 authorized_keys
中的 SSH 公钥。为此,可以利用 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 公钥。首次重启后删除用户数据。阅读有关 userdata on startup 的更多信息。
我已经尝试了以下步骤,并且它在不停止实例的情况下工作。我的要求是 - 由于我更改了客户端计算机,旧的 .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。
您有多个选项来替换您的 EC2 实例的密钥。
您可以在 .ssh/authorized_keys 文件中手动替换密钥。但是,这需要您实际访问未加密的实例或卷。您可以使用 AWS Systems Manager。这需要安装代理。
由于可以在答案或您选择的搜索引擎中轻松找到第一个选项,因此我想专注于 Systems Manager。
打开服务系统管理器单击左侧的自动化。点击 Execute Automation 选择 AWSSupport-TroubleshootSSH(通常在最后一页)
您可以在 Official AWS Documentation 上找到更多信息
谢谢提醒伙计。当我需要休息密钥对时,一定会记住它们。然而,为了效率和懒惰,我想出了别的办法:
创建您的新密钥对并下载凭证 右键单击您的实例 > 创建 AMI 完成后终止您的实例(或停止它,直到您确定可以从新的闪亮 AMI 创建另一个) 启动一个新的 EC2 实例您刚刚创建的 AMI 并指定您在上面的步骤 (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 进行连接
Yegor256 的回答对我有用,但我想我会添加一些评论来帮助那些不太擅长安装驱动器的人(比如我!):
附加卷时,Amazon 让您可以选择要为卷命名的名称。您使用了 /dev/sda - /dev/sdp 范围内的名称。然后,较新版本的 Ubuntu 会将您放入其中的内容重命名为 /dev/xvd(x) 或类似的名称。
所以对我来说,我选择 /dev/sdp 作为 AWS 中的挂载名称,然后我登录服务器,发现 Ubuntu 已将我的卷重命名为 /dev/xvdp1)。然后我必须安装驱动器 - 对我来说,我必须这样做:
mount -t ext4 xvdp1 /mnt/tmp
跳过所有这些障碍后,我可以在 /mnt/tmp 访问我的文件
你可以做什么...
创建附加了 AmazonEC2RoleForSSM 策略的新实例配置文件/角色。将此实例配置文件附加到实例。使用 SSM 会话管理器登录实例。使用本地计算机上的 keygen 创建密钥对。使用您的 SSM 会话将该密钥的公共部分推送到实例上。利润。
仅当您有权访问要更改/添加密钥的实例时,这才有效。您可以创建一个新的密钥对。或者,如果您已经拥有密钥对,则可以将新密钥对的公钥粘贴到实例上的 authorized_keys 文件中。
vim .ssh/authorized_keys
现在您可以使用该对的私钥并登录。
希望这可以帮助。
我的问题是,我尝试使用 IP
而不是公开的 DNS
。然后我尝试使用 public DNS
并解决了
如果您无法登录 VM 并删除了 ssh 密钥,您还可以使用以下步骤更改 ec2 的密钥对。一步一步去 1) 停止你的 ec2 实例。 2)拍摄虚拟机和存储的快照。 3)创建一个新的虚拟机,同时选择你的快照并从你的快照创建虚拟机。 4) 在创建 VM 时下载您的密钥对。 5)一旦你的VM UP,你可以用一个新的密钥对ssh,你的数据也会回来。
替代解决方案。如果您拥有服务器上的唯一访问权限。在这种情况下,不要从 AWS 控制台中删除 pem 文件。只需从 sudo nano ~/.ssh/authroized_keys
中删除 pem 访问密钥并添加您的系统公共 ssh 密钥。现在您可以访问 ssh user@i.p
如果有人因为没有密钥对而无法访问 EC2 实例而在这里,但他们确实具有 IAM 访问权限,您可以运行以下命令以允许使用密钥临时访问(60 秒)您的 EC2 实例只要您知道用户名(对于 ubuntu 实例通常是“ubuntu”,对于 amazon linux 实例通常是“ec2-user”),您就已经拥有了:
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/credentials 文件中有多个凭据配置文件,您还可以通过在此命令中添加标志“--profile your-profile”来指定)
如果成功,输出将如下所示:
{
"RequestId": "3537268d-c161-41bb-a4ac-977b79b2bdc0",
"Success": true
}
然后您有 60 秒的时间使用该密钥进行 ssh。
不定期副业成功案例分享
mkdir /mnt/tmp
然后mount /dev/xvdf /mnt/tmp
应该可以解决 #5 的问题。并且不要忘记第 13 步。在您连接的盒子上可能是rm ~/.ssh/known_hosts
。.ssh/authorized_keys
文件了。