Agregar par de claves a la instancia EC2 existente


Se me dio acceso a la consola de AWS a una cuenta con 2 instancias en ejecución que no puedo cerrar (en producción). Sin embargo, me gustaría obtener acceso SSH a estas instancias, ¿es posible crear un nuevo Par de claves y aplicarlo a las instancias para que pueda usar SSH? Obtener el archivo pem existente para el par de claves bajo el que se crearon las instancias no es actualmente una opción.

Si esto no es posible, ¿hay alguna otra forma de entrar en las instancias?

Author: gvasquez, 2010-07-16

8 answers

No se puede aplicar un par de claves a una instancia en ejecución. Solo puede usar el nuevo par de claves para iniciar una nueva instancia.

Para la recuperación, si se trata de una AMI de arranque de EBS, puede detenerla, hacer una instantánea del volumen. Cree un nuevo volumen basado en él. Y ser capaz de usarlo de nuevo para iniciar la instancia anterior, crear una nueva imagen o recuperar datos.

Aunque los datos en el almacenamiento efímero se perderán.


Debido a la popularidad de esta pregunta y respuesta, quería capturar la información en el enlace que Rodney publicó en su comentario.

De Crédito va a Eric Hammond para esta información.

Arreglar archivos en el volumen EBS Raíz de una Instancia EC2

Puede examinar y editar archivos en el volumen raíz de EBS en una instancia EC2 incluso si se encuentra en lo que considera una situación desastrosa como:

  • Perdiste tu clave ssh u olvidaste tu contraseña
  • Ha cometido un error al editar el archivo/etc / sudoers y ya no puede obtener acceso root con sudo para arreglarlo
  • Su instancia de larga ejecución está colgada por alguna razón, no puede ser contactado, y no arranca correctamente
  • Necesita recuperar archivos fuera de la instancia, pero no puede acceder a ella

En una computadora física sentada en su escritorio, simplemente puede arrancar el sistema con un CD o una memoria USB, montar el disco duro, revisar y arreglar los archivos, y luego reiniciar el equipo para volver al negocio.

Un EC2 remoto instancia, sin embargo, parece distante e inaccesible cuando se encuentra en una de estas situaciones. Afortunadamente, AWS nos proporciona la potencia y la flexibilidad para poder recuperar un sistema como este, siempre que ejecutemos instancias de arranque de EBS y no instance-store.

El enfoque en EC2 es algo similar a la solución física, pero vamos a mover y montar el "disco duro" defectuoso (volumen raíz de EBS) a una instancia diferente, arreglarlo, luego moverlo de nuevo.

En algunos situaciones, simplemente podría ser más fácil iniciar una nueva instancia de EC2 y desechar la mala, pero si realmente desea arreglar sus archivos, aquí está el enfoque que ha funcionado para muchos:

Setup

Identifique la instancia (A) original y el volumen que contiene el volumen raíz roto de EBS con los archivos que desea ver y editar.

instance_a=i-XXXXXXXX

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

Identifique la segunda instancia EC2 (B) que usará para arreglar los archivos en el volumen original de EBS. Esta instancia debe ser se ejecuta en la misma zona de disponibilidad que la instancia A para que pueda tener el volumen de EBS conectado a ella. Si aún no tiene una instancia en ejecución, inicie una temporal.

instance_b=i-YYYYYYYY

Detenga la instancia A rota (esperando que se detenga por completo), separe el volumen raíz de EBS de la instancia (esperando que se separe), luego adjunte el volumen a la instancia B en un dispositivo no utilizado.

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

Ssh a la instancia B y montar el volumen para que pueda acceder a su archivo sistema.

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

Fix It

En este punto, todo el sistema de archivos raíz de la instancia A está disponible para ver y editar en /vol-a en la instancia B. Por ejemplo, es posible que desee:

  • Ponga las claves ssh correctas en /vol-a/home/ubuntu/.ssh / authorized_keys
  • Editar y arreglar /vol-a/etc/sudoers
  • Busque mensajes de error en/vol-a/var/log / syslog
  • Copie archivos importantes de /vol-a/{

Nota: Los uids en el dos instancias pueden no ser idénticas, así que tenga cuidado si está creando, editando o copiando archivos que pertenecen a usuarios no root. Por ejemplo, su usuario mysql en la instancia A puede tener el mismo UID que su usuario postfix en la instancia B, lo que podría causar problemas si chown archivos con un nombre y luego mover el volumen de nuevo a A.

Wrap Up

Después de que haya terminado y esté satisfecho con los archivos bajo / vol-a, desmonte el sistema de archivos (aún encendido instancia-B):

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

Ahora, de vuelta en su sistema con ec2-api-tools, continúe moviendo el volumen de EBS de nuevo a su hogar en la instancia A original e inicie la instancia de nuevo:

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

Con suerte, se solucionó el problema, la instancia A aparece muy bien, y se puede lograr lo que originalmente se propuso hacer. Si no es así, es posible que tenga que seguir repitiendo estos pasos hasta que lo tenga funcionando.

Nota: Si tenía una dirección IP elástica asignada a la instancia A cuando lo detuviste, tendrás que volver a asociarlo después de volver a iniciarlo.

Recuerde! Si su instancia B se inició temporalmente solo para este proceso, no olvide terminarla ahora.

 160
Author: Rodney Quillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 05:58:24

Aunque no puede agregar un par de claves a una instancia EC2 en ejecución directamente, puede crear un usuario de Linux y crear un nuevo par de claves para él, luego usarlo como lo haría con el par de claves del usuario original.

En su caso, puede pedirle al propietario de la instancia (que la creó) que haga lo siguiente. Por lo tanto, el propietario de la instancia no tiene que compartir sus propias claves con usted, pero usted todavía sería capaz de ssh en estas instancias. Estos pasos fueron publicados originalmente por Utkarsh Sengar (aka. @zengr ) at http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance / . Solo he hecho algunos pequeños cambios.

  1. Paso 1: iniciar sesión por defecto" ubuntu " usuario :

    $ ssh -i my_orig_key.pem [email protected]
    
  2. Paso 2: crea un nuevo usuario, llamaremos a nuestro nuevo usuario "john":

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

    Establecer contraseña para "john" por:

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

    Añadir "john" a la lista de sudoer por:

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

    .. y añadir lo siguiente al final del archivo:

    john   ALL = (ALL)    ALL
    

    ¡Muy bien! Tenemos nuestro nuevo usuario creado, ahora necesita generar el archivo de clave que se necesitará para iniciar sesión, como tenemos my_orin_key.pem en el paso 1.

    Ahora, salir y volver a ubuntu, fuera de la raíz.

    [root@ip-11-111-111-111 ubuntu]$ exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Paso 3: crear las claves pública y privada :

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

    Introduzca la contraseña que creó para "john" en el paso 2. Luego crea un par de claves. Recuerde que la frase de contraseña para el par de claves debe ser al menos 4 caracter.

    [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
    

    En el paso anterior, John es el usuario que creamos y ubuntu es el grupo de usuarios predeterminado.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Paso 4: ahora solo necesita descargar la clave llamada "john". Yo uso scp para descargar / subir archivos desde EC2, así es como puedes hacerlo.

    Todavía necesitará copiar el archivo usando ubuntu user, ya que solo tiene la clave para ese nombre de usuario. Por lo tanto, tendrá que mover la clave a la carpeta de ubuntu y chmod a 777.

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

    Ahora ven al terminal de la máquina local, donde tienes my_orig_key.pem archivo y hacer esto:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem [email protected]:/home/ubuntu/john john
    

    El comando anterior copiará la clave "john" al directorio de trabajo actual en su máquina local. Una vez que haya copiado la clave a su máquina local, debe eliminar "/home/ubuntu/john", ya que es una clave privada.

    Ahora, uno de su máquina local chmod john a 600.

    $ chmod 600 john
    
  5. Paso 5: tiempo para probar su clave :

    $ ssh -i john [email protected]
    

Así que, de esta manera, puede configurar varios usuarios para usar una instancia EC2!!

 85
Author: Eye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:02

En su máquina local, ejecute el comando:

ssh-keygen -t rsa -C "SomeAlias"

Después de ejecutar ese comando, un archivo que termina en *.pub se generará. Copie el contenido de ese archivo.

En la máquina de Amazon, edite ~/.ssh / authorized_keys y pegar el contenido del *.archivo pub (y eliminar cualquier contenido existente primero).

Luego puede usar SSH usando el otro archivo que se generó a partir del comando ssh-keygen (la clave privada).

 10
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-10 03:03:31

Esto me pasó antes (no tenía acceso a una instancia de EC2 creada por otra persona, pero tenía acceso a AWS web console) y escribí la respuesta: http://readystate4.com/2013/04/09/aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to/

Básicamente, puede desconectar la unidad EBS y conectarla a una EC2 a la que tenga acceso. Agregue su clave SSH pub a ~ec2-user/.ssh/authorized_keys en esta unidad conectada. Luego póngalo de nuevo en la antigua instancia EC2. paso a paso en el enlace usando Amazon AMI.

No es necesario hacer instantáneas o crear una nueva instancia clonada.

 7
Author: Mauvis Ledford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-09 21:44:46

Simplemente puede agregar una nueva clave a la instancia con el siguiente comando:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

Puede configurar domain_alias en ~/.ssh config

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem
 4
Author: karser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-09 17:16:22

En mi caso utilicé esta documentación para asociar un par de claves con mi instancia de Elastic Beanstalk

Importante

Debe crear un par de claves de Amazon EC2 y configurar las instancias de Amazon EC2 aprovisionadas con Elastic Beanstalk para que usen el par de claves de Amazon EC2 antes de poder acceder a las instancias de Amazon EC2 aprovisionadas con Elastic Beanstalk. Puede configurar los pares de claves de Amazon EC2 mediante la consola de administración de AWS. Para obtener instrucciones sobre cómo crear un par de claves para Amazon EC2, consulte la Guía de inicio de Amazon Elastic Compute Cloud.

Configuración de instancias de servidor Amazon EC2 con Elastic Beanstalk

 4
Author: Kamal Essajidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-21 20:58:07

No encontré una manera fácil de agregar un nuevo par de claves a través de la consola, pero puedes hacerlo manualmente.

Solo ssh en su caja EC2 con el par de claves existente. A continuación, edite ~/.ssh / authorized_keys y añadir la nueva clave en una nueva línea. Salir y ssh a través de la nueva máquina. ¡Éxito!

 3
Author: ninja123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-28 14:05:16

Una vez que se ha iniciado una instancia, no hay forma de cambiar par de claves asociado con la instancia a nivel de metadatos, pero puede cambiar la clave ssh que usa para conectarse a la instancia.

Stackoverflow.com/questions/7881469/change-key-pair-for-ec2-instance

 2
Author: YetAnotherMatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:11