如何在AWS管理控制台中更改ec2实例的密钥对?我可以停止实例,我可以创建新的密钥对,但是我没有看到任何修改实例密钥对的链接。
答案 0 :(得分:425)
这样做: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair
这是我做的,感谢Eric Hammond的博客文章:
/dev/xvda1
卷(让我们称之为卷A) - see here /dev/xvdf
(或/dev/sdf
) SSH到新的微实例并将卷A安装到/mnt/tmp
$ sudo mount / dev / xvdf1 / mnt / tmp
将~/.ssh/authorized_keys
复制到/mnt/tmp/home/ubuntu/.ssh/authorized_keys
/dev/xvda
.pem
文件那就是它。
答案 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支持说明:
这将保存更新的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)
我经历了这种方法,过了一段时间,才能使它发挥作用。缺乏实际命令使其变得艰难,但我想出来了。然而 - 在以后不久发现并测试了更简单的方法:
答案 6 :(得分:15)
如果遵循以下步骤,将节省大量时间,并且无需停止正在运行的实例。
就是这样。享受:)
答案 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平台,可以通过以下方式更改密钥:
这将终止当前实例并使用所选键/设置创建新实例。
答案 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)
我认为最简单的方法是:
答案 11 :(得分:2)
我已尝试过以下步骤,但无需停止实例即可运行。我的要求是 - 因为我更改了我的客户机,旧的.pem文件不允许我登录ec2实例。
您将在该文件中看到旧密钥。
ssh-keygen -f YOUR_PEM_FILE.pem -y 它会生成一个密钥。将密钥附加到步骤#1中打开的〜/ .ssh / authorized_keys。无需删除旧密钥。
在AWS控制台中,创建一个新密钥对。将其存储在新机器中。将其重命名为旧的pem文件 - 原因是旧的pem文件仍与AWS中的ec2实例相关联。
全部完成。
我可以从新的客户端计算机登录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)
你能做什么...
创建一个附加了AmazonEC2RoleForSSM策略的新实例配置文件/角色。
将此实例配置文件附加到实例。
答案 14 :(得分:1)
感谢小伙伴们。当我需要休息密钥对时,一定会记住它们。 但是,出于效率和懒惰的考虑,我提出了其他建议:
希望这对您有用,并且可以节省您一些时间,并最大程度地减少您从这种东西中得到的白发数量:)
答案 15 :(得分:1)
这适用于拥有两个不同的 pem 文件并且出于任何安全目的想要丢弃两者之一的人。假设我们要丢弃 1.pem
答案 16 :(得分:0)
您有多种选择来替换EC2实例的密钥。
由于第一个选项可以在答案中轻松找到,也可以在您选择的搜索引擎中找到,因此我想着重于Systems Manager。
Systems Manager
Automation
。 Execute Automation
AWSSupport-TroubleshootSSH
(通常在最后一页)答案 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)
警告:不要忘记再次清除用户数据。否则,将在每次实例启动时按下此键。 Step-by-step instructions。
#cloud-config
bootcmd:
- echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys
答案 21 :(得分:0)
仅当您有权访问要更改/添加密钥的实例时,此功能才有效。 您可以创建新密钥对。或者,如果您已经拥有密钥对,则可以将新对的公钥粘贴到实例上的authorized_keys文件中。
vim .ssh / authorized_keys
现在您可以使用该对的私钥并登录。
希望这有帮助。
答案 22 :(得分:0)
替代解决方案。如果您只有服务器上的访问权限。在这种情况下,不要从 AWS 控制台中删除 pem 文件。只需从 sudo nano ~/.ssh/authroized_keys
中删除 pem 访问密钥并添加您的系统公共 ssh 密钥。现在您可以访问 ssh user@i.p