首页 文章

更改ec2实例的密钥对

提问于
浏览
312

如何在AWS管理控制台中更改ec2实例的密钥对?我可以停止实例,我可以创建新的密钥对,但是我没有看到任何修改实例密钥对的链接 .

13 回答

  • 390

    我尝试了以下步骤,它没有停止实例 . 我的要求是 - 因为我已经更改了我的客户端机器,旧的.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 .

  • 163

    一旦实例启动,就无法在元数据级别更改与实例关联的密钥对,但您可以更改用于连接到实例的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

    这仅适用于您运行的新实例 .

  • 41

    如果您使用的是ElasticBeanstalk平台,可以通过以下方式更改密钥:

    • Elastic Beanstalk面板

    • 配置

    • 实例(cog top-right)

    • EC2密钥对

    这将终止当前实例并创建具有所选键/设置的新实例 .

  • 67

    Yegor256的答案对我有用,但我想我会添加一些评论来帮助那些不太擅长安装驱动器的人(比如我!):

    亚马逊为您提供了在附加卷时为卷命名的选项 . 您使用了/ dev / sda - / dev / sdp范围内的名称 . 然后,较新版本的Ubuntu会将您放入/ dev / xvd(x)的内容重命名为该效果 .

    所以对我来说,我选择/ dev / sdp作为AWS中的挂载名称,然后我登录到服务器,发现Ubuntu已将我的卷重命名为/ dev / xvdp1) . 然后我必须安装驱动器 - 对我来说,我必须这样做:

    mount -t ext4 xvdp1 /mnt/tmp
    

    跳过所有这些箍后,我可以在/ mnt / tmp访问我的文件

  • 12

    下载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
    
  • 8

    我注意到,当由Elastic Beanstalk管理时,您可以更改活动的EC2密钥对 . 在Elastic Beanstalk> Configuration> Security下,从 EC2 key pair 下拉列表中选择新密钥 . 你'll see this message asking if you'确定:

    EC2KeyName:对选项EC2KeyName设置的更改不会立即生效 . 您的每个现有EC2实例都将被替换,您的新设置将生效 .

    当我这样做时,我的实例已经终止了 . 然后它开始,终止,然后重新开始 . 显然"replacing"表示终止并创建一个新实例 . 如果您已修改启动卷,请先创建AMI,然后在 Custom AMI ID 的同一Elastic Beanstalk> Configuration> Instances表单中指定该AMI . 这也警告要更换EC2实例 .

    修改了EC2密钥对和自定义AMI ID后,在看到有关两者的警告后,单击 Save 继续 .

    请记住,重新创建实例时IP地址会发生变化,因此您需要从EC2控制台检索新IP地址,以便在通过SSH连接时使用 .

  • 0

    最简单的解决方案是复制内容

    ~/.ssh/id_rsa.pub
    

    进入您的AWS实例的authorized_keys

    ~/.ssh/authorized_keys
    

    这将允许您ssh到EC2实例,而无需为ssh命令指定pem文件 . 测试连接后,您可以删除所有其他密钥 .

    如果您需要创建一个新密钥才能与其他人共享,您可以通过以下方式实现:

    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
    
  • 4

    仅当您有权访问要更改/添加密钥的实例时,此选项才有效 . 您可以创建新密钥对 . 或者,如果您已经拥有密钥对,则可以将新对的公钥粘贴到实例上的authorized_keys文件中 .

    vim .ssh / authorized_keys

    现在,您可以使用该对的私钥并登录 .

    希望这可以帮助 .

  • 27

    我相信最简单的方法是:

    • 创建原始iinstance的AMI图像 .

    • 使用新密钥对使用AMI映像(来自步骤1)启动新的EC2实例 .

    • 使用新密钥登录新的EC2实例 .

  • 1

    我经历了这种方法,过了一段时间,才能使它发挥作用 . 缺乏实际命令使其变得艰难,但我明白了 . 然而 - 在以后不久发现并测试了更简单的方法:

    • 将您的实例保存为AMI(重启或不重启,我建议重启) . 这只有在EBS支持的情况下才有效 .

    • 然后,只需从此AMI启动一个实例并分配新的密钥文件 .

    • 将您的弹性IP(如果适用)移动到新实例,您就完成了 .

  • 1

    AWS EC2支持的说明:

    • 更改pem登录

    • 转到您的EC2控制台

    • 在网络和安全下,单击密钥对单击创建密钥对

    • 为新密钥对命名,保存.pem文件 . 密钥对的名称将用于连接到您的实例

    • 创建与实例的SSH连接并保持打开状态
      在PuttyGen中

    • ,单击"Load"以加载.pem文件

    • 选中SSH-2 RSA单选按钮 . 点击"Save private key"你会弹出窗口警告,点击“是”

    • 也点击"Save public key",以生成公钥 . 这是我们要复制到您当前实例的公钥

    • 使用新密钥对名称和扩展名.pub保存公钥

    • 在记事本中打开公钥内容

    • 复制以下内容"Comment: " imported-openssh-key " and before " ---- 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)并将其重新连接到工作实例,那么请更改卷上的密钥并将其重新连接回上一个实例 .

  • 33

    就这样做:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair

    这是我做的,感谢Eric Hammond的博客文章:

    • 停止正在运行的EC2实例

    • 分离其 /dev/xvda1 卷(让我们称之为卷A) - see here

    • 使用我的新密钥对启动新的t1.micro EC2实例 . Make sure you create it in the same subnet ,否则您将不得不终止实例并再次创建它 . - see here

    • 将卷A附加到新的微实例,如 /dev/xvdf (或 /dev/sdf

    • SSH到新的微实例并将卷A挂载到 /mnt/tmp

    $ sudo mount / dev / xvdf1 / mnt / tmp

    • 复制 ~/.ssh/authorized_keys/mnt/tmp/home/ubuntu/.ssh/authorized_keys

    • 退出

    • 终止微实例

    • 从中分离卷A.

    • 将卷A附加回主实例 /dev/xvda

    • 启动主实例

    • 像以前一样使用新的 .pem 文件登录

    而已 .

  • 5

    修改“ yegor256 ”的答案 . 如果遵循以下步骤,它将 save lot of time and there will be no need to stop the running instance.

    • 使用新密钥对启动新的t1.micro EC2实例 . Make sure you create it in the same subnet ,否则您将不得不终止实例并再次创建它 .

    • SSH到新的微实例并在计算机上的某处复制 ~/.ssh/authorized_keys 的内容 .

    • 使用 old ssh key 登录主实例 .

    • point 2 to ~/.ssh/authorized_keys 复制并替换文件内容

    • 现在您只能使用新密钥重新登录 . 旧密钥将不再起作用 .

    这就对了 . 享受 :)

相关问题