将密钥对添加到现有的EC2实例

我被授予AWS控制台访问权限的两个运行实例的帐户,我无法关闭(在生产中)。 我想要获得这些实例的SSH访问权限,是否可以创建一个新的密钥对并将其应用于实例,以便我可以通过SSH进入? 为当前创建的实例创建密钥对获取现有的pem文件目前不是一个选项。

如果这是不可能的,还有其他方式可以进入实例吗?


您无法将密钥对应用于正在运行的实例。 您只能使用新的密钥对来启动一个新的实例。

对于恢复,如果它是EBS启动AMI,则可以停止它,制作卷的快照。 根据它创建一个新卷。 并且能够使用它来启动旧实例,创建新映像或恢复数据。

尽管临时存储中的数据将丢失。


由于这个问题和答案的受欢迎程度,我想在Rodney发表评论的链接中捕获这些信息。

有关此信息,请访问Eric Hammond。

修复EC2实例的根EBS卷上的文件

您可以在EC2实例的根EBS卷上检查和编辑文件,即使您处于您认为是灾难性的情况,如:

  • 您丢失了ssh密钥或忘记了密码
  • 您编辑/ etc / sudoers文件时出错,无法再通过sudo获得root访问权限来修复它
  • 您的长时间运行的实例由于某种原因挂起,无法联系,并且无法正常引导
  • 您需要从实例中恢复文件,但无法访问它
  • 在坐在桌面上的物理计算机上,您可以简单地使用CD或U盘启动系统,安装硬盘驱动器,检查并修复文件,然后重新启动计算机以恢复业务。

    但是,当您处于这些情况之一时,远程EC2实例看起来很遥远,无法访问。 幸运的是,只要我们运行EBS启动实例而不是实例存储,AWS为我们提供了恢复系统的能力和灵活性。

    EC2上的方法与物理解决方案有些类似,但我们将移动并将出错的“硬盘驱动器”(根EBS卷)安装到不同的实例,然后修复它,然后将其移回。

    在某些情况下,启动一个新的EC2实例并抛弃不好的实例可能会更容易,但如果您确实想要修复文件,以下是适用于许多方法的方法:

    建立

    用您想要查看和编辑的文件标识包含已损坏的根EBS卷的原始实例(A)和卷。

    instance_a=i-XXXXXXXX
    
    volume=$(ec2-describe-instances $instance_a |
      egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)
    

    识别您将用于修复原始EBS卷上的文件的第二个EC2实例(B)。 此实例必须与实例A在相同的可用区中运行,以便它可以将EBS卷连接到它。 如果您没有运行实例,请启动一个临时实例。

    instance_b=i-YYYYYYYY
    

    停止破损的实例A(等待它完全停止),从实例中分离根EBS卷(等待它分离),然后将卷连接到实例B上的未使用设备。

    ec2-stop-instances $instance_a
    ec2-detach-volume $volume
    ec2-attach-volume --instance $instance_b --device /dev/sdj $volume
    

    ssh添加到实例B并安装该卷,以便可以访问其文件系统。

    ssh ...instance b...
    
    sudo mkdir -p 000 /vol-a
    sudo mount /dev/sdj /vol-a
    

    修理它

    此时,来自实例A的整个根文件系统可用于在实例B上的/ vol-a下查看和编辑。例如,您可能希望:

  • 将正确的ssh密钥放入/vol-a/home/ubuntu/.ssh/authorized_keys
  • 编辑并修复/ vol-a / etc / sudoers
  • 在/ vol-a / var / log / syslog中查找错误消息
  • 将重要文件复制出/ vol-a / ...
  • 注意:这两个实例上的uid可能不完全相同,因此请小心创建,编辑或复制属于非root用户的文件。 例如,实例A上的mysql用户可能与实例B上的postfix用户具有相同的UID,如果您使用一个名称对文件进行chown,然后将该卷移回A,则可能会导致问题。

    包起来

    完成之后,您对/ vol-a下的文件感到满意,请卸载文件系统(仍在实例B上):

    sudo umount /vol-a
    sudo rmdir /vol-a
    

    现在,使用ec2-api-tools返回到您的系统,继续将EBS卷移回原始实例A的原始位置,然后再次启动该实例:

    ec2-detach-volume $volume
    ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
    ec2-start-instances $instance_a
    

    希望你解决了这个问题,实例A出现的很好,你可以完成你最初设定的任务。 如果没有,您可能需要继续重复这些步骤,直到它有效。

    注意:如果在停止实例A时为实例A分配了弹性IP地址,则需要在重新启动后重新关联它。

    记得! 如果您的实例B只是为了这个过程而暂时启动,请不要忘记现在终止它。


    虽然您不能直接将密钥对添加到正在运行的EC2实例,但您可以创建一个Linux用户并为他创建一个新密钥对,然后像使用原始用户的密钥对那样使用它。

    就你而言,你可以要求实例所有者(谁创建它)执行以下操作。 因此,实例所有者不必与你分享他自己的密钥,但是你仍然可以进入这些实例。 这些步骤最初由Utkarsh Sengar(aka。@zengr)发布,网址为http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/。 我只做了一些小的改变。

  • 第一步:默认登录“ubuntu”用户

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  • 第2步:创建一个新用户,我们将调用我们的新用户“john”

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    通过以下方式设置“john”的密码:

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]$ passwd john
    

    通过以下方式将“john”添加到sudoer的列表中:

    [root@ip-11-111-111-111 ubuntu]$ visudo
    

    ..并将以下内容添加到文件的末尾:

    john   ALL = (ALL)    ALL
    

    好的! 我们创建了新用户,现在您需要生成登录所需的密钥文件,就像我们在步骤1中使用my_orin_key.pem一样。

    现在,退出并返回到Ubuntu,从根。

    [root@ip-11-111-111-111 ubuntu]$ exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  • 第3步:创建公钥和私钥

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    输入您在步骤2中为“john”创建的密码。然后创建密钥对。 请记住,密钥对的密码至少应为4个字符。

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

    在上面的步骤中,john是我们创建的用户,ubuntu是默认的用户组。

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  • 第4步:现在只需要下载名为“john”的密钥 。 我使用scp从EC2下载/上传文件,这里是你如何做到的。

    您仍然需要使用ubuntu用户复制文件,因为您只有该用户名的密钥。 所以,你需要将密钥移动到Ubuntu的文件夹,并将其修改为777。

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    现在来到本地机器的终端,在那里你有my_orig_key.pem文件,并执行此操作:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
    

    上述命令将把密钥“john”复制到本地机器上的当前工作目录中。 将密钥复制到本地计算机后,应删除“/ home / ubuntu / john”,因为它是私钥。

    现在,你的本地机器chmod约翰到600。

    $ chmod 600 john
    
  • 第五步:测试你的密钥的时间

    $ ssh -i john john@111.111.11.111
    
  • 所以,通过这种方式,您可以设置多个用户使用一个EC2实例!


    在本地机器上运行命令:

    ssh-keygen -t rsa -C "SomeAlias"
    

    该命令运行后,会生成以* .pub结尾的文件。 复制该文件的内容。

    在亚马逊机器上,编辑〜/ .ssh / authorized_keys并粘贴* .pub文件的内容(并先删除任何现有内容)。

    然后,您可以使用从ssh-keygen命令(私钥)生成的其他文件进行SSH。

    链接地址: http://www.djcxy.com/p/54095.html

    上一篇: Add Keypair to existing EC2 instance

    下一篇: Correctness of misaligned access in C++