Answers:
如果您不再具有对现有服务器的SSH访问权限(即,丢失了私钥),则此答案很有用。
如果您仍然具有SSH访问权限,请使用以下答案之一。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair
感谢Eric Hammond的博客文章,这是我的工作:
/dev/xvda1
音量(我们称其为音量A)- 参见此处/dev/xvdf
(或/dev/sdf
)SSH到新的微型实例并将卷A挂载到 /mnt/tmp
$ sudo安装/ dev / xvdf1 / mnt / tmp
复制~/.ssh/authorized_keys
到/mnt/tmp/home/ubuntu/.ssh/authorized_keys
/dev/xvda
.pem
文件像以前一样登录而已。
mkdir /mnt/tmp
然后mount /dev/xvdf /mnt/tmp
应该为#5做点技巧。而且请不要忘记步骤13可能rm ~/.ssh/known_hosts
在您一直在连接的盒子上。
.ssh/authorized_keys
文件了。
启动实例后,无法在元数据级别上更改与该实例关联的密钥对,但是您可以更改用于连接到该实例的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,而不要让Amazon为您生成密钥对。
这是我写的一篇文章:
将个人ssh密钥上传到Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys
这仅适用于您运行的新实例。
.pem
在Mac上收到了私钥文件,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支持的说明:
这将保存更新的authorized_keys文件
现在尝试使用新的密钥pai向您的实例打开一个新的SSH会话
确认可以使用新密钥对SSH进入实例后,您可以使用.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,然后以与Custom AMI ID相同的Elastic Beanstalk>配置>实例形式指定该AMI。这也警告要更换EC2实例。
修改完EC2密钥对和“定制AMI ID”之后,并在看到有关二者的警告后,请单击“ 保存”以继续。
请记住,重新创建实例时IP地址会更改,因此您需要从EC2控制台检索新的IP地址,以便在通过SSH连接时使用。
我经历了这种方法,经过一段时间后,它才得以发挥作用。缺乏实际的命令使操作变得很困难,但我发现了。但是-在此之后不久发现并测试了一种更为简便的方法:
我认为最简单的方法是:
如果您使用的是ElasticBeanstalk平台,则可以通过以下步骤更改密钥:
这将终止当前实例并创建具有选定键/设置的新实例。
这个问题有两种情况:
1)您无权访问.pem文件,因此您要创建一个新文件。
2)你有。您可以访问pem文件,但是出于某些漏洞或安全目的,您只想更改或创建一个新的.pem文件。
因此,如果您丢失了按键,则可以向上滚动并查看其他答案。但是,如果出于安全目的仅更改.pem文件,请按照以下步骤操作:-
1)转到AWS控制台登录并从那里的密钥对部分创建一个新的.pem文件。它将自动将.pem文件下载到您的PC中
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文件的访问。
希望对您有所帮助!
最简单的解决方案是复制
~/.ssh/id_rsa.pub
进入您的AWS实例的authorized_keys
~/.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
什至没有SSH AWS实例时如何访问?
您无需旋转根设备并在中更改SSH公钥authorized_keys
。为此,可以利用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公开密钥。第一次重新启动后,删除用户数据。阅读有关启动时用户数据的更多信息。
警告:不要忘记再次清除用户数据。否则,将在每次实例启动时按下此键。分步说明。
#cloud-config
bootcmd:
- echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys
我尝试了以下步骤,但没有停止实例就可以工作。我的要求是-由于我已更改客户端计算机,所以旧的.pem文件不允许我登录ec2实例。
您将在该文件中看到旧密钥。
ssh-keygen -f YOUR_PEM_FILE.pem -y它将生成一个密钥。将密钥附加到在步骤1中打开的〜/ .ssh / authorized_keys。无需删除旧密钥。
在AWS控制台中,创建一个新的密钥对。将其存储在新计算机中。将其重命名为旧的pem文件-原因是旧的pem文件仍与AWS中的ec2实例相关联。
全做完了。
我可以从新的客户端计算机登录到AWS ec2。
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)在创建新VM的同时,选择快照并从Snapshot创建VM。4)创建VM时会下载您的密钥对。5)一旦您的VM启动,您就可以使用新的密钥对ssh了,您的数据也将恢复。