如何在AWS管理控制台中更改ec2实例的密钥对?我可以停止实例,我可以创建新的密钥对,但我没有看到任何链接来修改实例的密钥对。
一旦启动了实例,就无法在元数据级别上更改与该实例关联的密钥对,但是可以更改用于连接该实例的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的博客文章:
/dev/xvda1
/dev/xvdf
/dev/sdf
/mnt/tmp
$ sudo mkdir /mnt/tmp; sudo mount /dev/xvdf1 /mnt/tmp
~/.ssh/authorized_keys
/mnt/tmp/home/ubuntu/.ssh/authorized_keys
/dev/xvda
.pem
就是这样。
我尝试了这种方法,过了一段时间后,我能够让它工作。缺乏实际的命令让它很困难,但我想出了办法。然而,不久之后发现并测试了更简单的方法:
我注意到当由Elastic Beanstalk管理时,你可以改变了你的活动EC2密钥对。在“Elastic Beanstalk > Configuration > Security”下,从EC2密钥对下拉菜单中选择新密钥。你会看到这条消息询问你是否确定:
EC2KeyName:对选项EC2KeyName设置的更改将不生效 立即。您现有的每个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。
authorized_keys
或将pem文件复制到AWS实例并执行以下命令
chmod 600 YOURKEY.pem
然后
ssh-keygen -f YOURKEY.pem -y >> ~/.ssh/authorized_keys
只有当你可以访问你想要更改/添加密钥的实例时,这才会起作用。 您可以创建新的密钥对。或者如果您已经拥有密钥对,那么您可以将新密钥对的公钥粘贴到实例上的authorized_keys文件中
vim . ssh / authorized_keys
现在您可以使用该对的私钥并登录。
希望这能有所帮助。
如果您正在使用ElasticBeanstalk平台,您可以通过执行以下命令更改密钥:
这将终止当前实例,并创建一个具有所选键/设置的新实例。
如果遵循以下步骤,它将节省大量时间,并且不需要停止正在运行的实例。
就是这样。享受:)
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支持的指令:
这将保存更新后的authorized_keys文件
现在尝试使用新的密钥pai打开一个新的SSH会话到您的实例
当您确认能够使用新的密钥对SSH进入实例时,您可以vi . SSH /authorized_key并删除旧的密钥。
对Shaggie评论的回答:
如果您无法连接到实例(例如键损坏),请使用AWS控制台分离卷(http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html)并将其重新连接到工作实例,而不是更改卷上的键并将其重新连接到前一个实例。
我认为最简单的方法是:
我已经尝试了以下步骤,它在没有停止实例的情况下工作。我的需求是-因为我已经更改了客户端机器,旧的.pem文件不允许我登录到ec2实例。
你会在那个文件里看到你的旧钥匙。
ssh-keygen -f YOUR_PEM_FILE。pem - y 它会生成一个密钥。将键附加到~/。Ssh /authorized_keys在步骤#1中打开。
从AWS控制台创建一个新的密钥对。把它存储在你的新机器里。将其重命名为旧的pem文件-原因是旧的pem文件仍然与AWS中的ec2实例相关联。
全部完成。
我可以从我的新客户端机器上登录到AWS ec2。
最简单的解决方法是复制的内容
~/.ssh/id_rsa.pub
到您的AWS实例的authorized_keys at
这将允许您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实例的密钥。
由于第一个选项可以很容易地在答案中或在您选择的搜索引擎中找到,所以我想重点介绍系统管理器。
Systems Manager
Automation
Execute Automation
AWSSupport-TroubleshootSSH
你可以在AWS官方文档上找到更多信息
你不需要旋转根设备和改变authorized_keys中的SSH公钥。为此,可以利用userdata将ssh密钥添加到任何实例。为此,首先需要使用AWS控制台或ssh-keygen创建一个新的KeyPair。
这将为您的新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和它的解决
IP
DNS
public DNS
如果您无法登录VM并删除您的ssh密钥,您也可以使用以下步骤更改ec2的密钥对。 一步一步来 1)停止你的ec2实例。 2)对虚拟机和存储进行快照。 3)创建一个新的虚拟机,同时创建它选择您的快照,并从您的快照创建虚拟机。 4)在创建虚拟机时下载您的密码对。 5)一旦你的虚拟机UP,你可以ssh一个新的密钥对,你的数据也会回来。< / p >
步骤:
#cloud-config cloud_final_modules: - [once] bootcmd: - echo 'ssh-rsa AAAAB3Nz...' > /home/USERNAME/.ssh/authorized_keys
其中USERNAME是机器的预期用户名。默认用户名列表是可从AWS获得。
USERNAME
AWS的分步说明 . cn
你能做什么…
创建一个新的实例配置文件/角色,其中附加AmazonEC2RoleForSSM策略。
将此实例概要文件附加到实例。
这个问题有两种情况:-
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文件
4)从这里复制RSA代码
5)现在SSH到您的实例通过之前的。pem文件
ssh -i oldpemfileName.pem username@ipaddress sudo vim ~/.ssh/authorized_keys
给1 - 2行空间,并粘贴复制的新文件的RSA在这里 然后保存文件 7)现在您的新.pem文件与正在运行的实例链接 8)如果你想禁止之前的。pem文件访问,那么只需编辑 < / p >
7)现在您的新.pem文件与正在运行的实例链接
8)如果你想禁止之前的。pem文件访问,那么只需编辑 < / p >
sudo vim ~/.ssh/authorized_keys
文件,并从这里删除或更改之前的RSA。
注意:-小心删除,以便新创建的RSA不会被更改。
通过这种方式,您可以将新的.pem文件与正在运行的实例更改/连接。
出于安全考虑,您可以撤销对先前生成的.pem文件的访问权。
希望对大家有所帮助!
希望这能对你有用,为你节省一些时间,并尽量减少你从这样的东西得到的白发数量:)
这是为他们谁有两个不同的pem文件,并出于任何安全目的想要丢弃其中一个。假设我们想要丢弃1。pem
替代解决方案。如果你有唯一的访问服务器。在这种情况下,不要从AWS控制台删除pem文件。只需从sudo nano ~/.ssh/authroized_keys中删除pem访问密钥,并添加您的系统公共ssh密钥。现在你有了ssh user@i.p
sudo nano ~/.ssh/authroized_keys
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秒的时间用那把钥匙登录。