Agregar Keypair a la instancia existente de EC2

Me dieron acceso a la consola de AWS a una cuenta con 2 instancias ejecutándose que no puedo apagar (en producción). Sin embargo, me gustaría obtener acceso SSH a estas instancias, ¿es posible crear un nuevo par de llaves y aplicarlo a las instancias para que pueda SSH? La obtención del archivo de pem existente para el par de claves en el que se crearon las instancias actualmente no es una opción.

Si esto no es posible, ¿hay alguna otra forma en que pueda acceder a las instancias?

No puede aplicar un par de llaves a una instancia en ejecución. Solo puedes usar el nuevo par de llaves para lanzar una nueva instancia.

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

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


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

El crédito va a Eric Hammond por esta información .

Reparar archivos en el volumen EBS de raíz de una instancia EC2

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

  • Perdiste tu clave ssh o olvidaste tu contraseña
  • Cometió un error al editar el archivo / etc / sudoers y ya no puede obtener acceso a la raíz con sudo para arreglarlo
  • Su instancia de larga ejecución se cuelga por algún motivo, no se puede contactar y no se inicia correctamente
  • Necesita recuperar archivos de la instancia pero no puede acceder a ella

En una computadora física que se encuentra en su escritorio, simplemente puede iniciar el sistema con un CD o un dispositivo USB, montar el disco duro, extraer y corregir los archivos, luego reiniciar la computadora para volver a funcionar.

Sin embargo, una instancia remota de EC2 parece distante e inaccesible cuando se encuentra en una de estas situaciones. Afortunadamente, AWS nos brinda la potencia y flexibilidad para poder recuperar un sistema como este, siempre que ejecutemos instancias de arranque de EBS y no tienda de instancias.

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, repararlo y luego volver a moverlo.

En algunas situaciones, simplemente podría ser más fácil comenzar una nueva instancia de EC2 y deshacerse de la mala, pero si realmente quiere arreglar sus archivos, este es el enfoque que ha funcionado para muchos:

Preparar

Identifique la instancia original (A) y el volumen que contiene el volumen de raíz EBS roto 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 corregir los archivos en el volumen original de EBS. Esta instancia debe estar ejecutándose en la misma zona de disponibilidad que la instancia A para que pueda tener el volumen de EBS adjunto. Si no tiene una instancia en ejecución, inicie una temporal.

 instance_b=i-YYYYYYYY 

Detenga la instancia R interrumpida A (esperando que se detenga por completo), separe el volumen raíz de EBS de la instancia (esperando que se separe) y luego conecte 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 monte el volumen para que pueda acceder a su sistema de archivos.

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

Arreglalo

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

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

Nota: Es posible que los nombres de las dos instancias no sean idénticos, así que tenga cuidado si está creando, editando o copiando archivos que pertenecen a usuarios que no son root. Por ejemplo, su usuario de mysql en la instancia A puede tener el mismo UID que su usuario de postfix en la instancia B, lo que podría causar problemas si selecciona los archivos con un nombre y luego mueve el volumen de nuevo a A.

Envolver

Cuando haya terminado y esté satisfecho con los archivos de / vol-a, desmonte el sistema de archivos (aún en la 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 a su casa en la instancia A original y vuelva a iniciar la instancia:

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

Con suerte, resolvió el problema, la instancia A aparece muy bien, y puede lograr lo que originalmente se propuso hacer. De lo contrario, es posible que deba continuar repitiendo estos pasos hasta que lo tenga funcionando.

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

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

Aunque no puede agregar un par de claves a una instancia de 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 lo creó) que haga lo siguiente. Por lo tanto, el propietario de la instancia no tiene que compartir sus propias claves con usted, pero aún así podrá ingresar a estas instancias. Estos pasos fueron publicados originalmente por Utkarsh Sengar (también conocido como @zengr ) en http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ . Solo hice algunos pequeños cambios.

  1. Paso 1: iniciar sesión por defecto con el usuario “ubuntu” :

     $ ssh -i my_orig_key.pem ubuntu@111.111.11.111 
  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 

    Agrega “john” a la lista de sudoer de la siguiente manera:

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

    .. y agrega lo siguiente al final del archivo:

     john ALL = (ALL) ALL 

    ¡Bien! Tenemos nuestro nuevo usuario creado, ahora necesita generar el archivo de clave que será necesario para iniciar sesión, como tenemos my_orin_key.pem en el Paso 1.

    Ahora, sal y vuelve a ubuntu, fuera de root.

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

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

    Ingrese la contraseña que creó para “john” en el Paso 2. Luego, cree un par de claves. Recuerde que la frase de contraseña para el par de claves debe tener al menos 4 caracteres.

     [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” . Utilizo scp para descargar / cargar archivos de EC2, así es cómo puedes hacerlo.

    Aún deberá copiar el archivo usando el usuario de ubuntu , ya que solo tiene la clave para ese nombre de usuario. Por lo tanto, deberá mover la clave a la carpeta ubuntu y modificarla 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 ve al terminal de la máquina local, donde tienes mi archivo my_orig_key.pem y haz esto:

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

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

    Ahora, una máquina local chmod john a 600.

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

     $ ssh -i john john@111.111.11.111 

¡De esta manera, puede configurar múltiples usuarios para usar una instancia de EC2!

En su máquina local, ejecute el comando:

 ssh-keygen -t rsa -C "SomeAlias" 

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

En la máquina de Amazon, edite ~ / .ssh / authorized_keys y pegue los contenidos del archivo * .pub (y elimine primero cualquier contenido existente).

A continuación, puede usar SSH con el otro archivo generado a partir del comando ssh-keygen (la clave privada).

Esto me sucedió antes (no tuve acceso a una instancia de EC2 creada por otra persona pero tenía acceso a la consola web de AWS) y publiqué la respuesta en la dirección de correo electrónico: 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, conectarla a una EC2 a la que tenga acceso. Agregue su clave de pub SSH a ~ec2-user/.ssh/authorized_keys en esta unidad adjunta. Luego vuélvalo a colocar en la vieja instancia de EC2. paso a paso en el enlace usando Amazon AMI.

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

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 

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 proporcionadas por Elastic Beanstalk para utilizar el par de claves de Amazon EC2 antes de poder acceder a las instancias de Amazon EC2 proporcionadas por Elastic Beanstalk. Puede configurar sus pares de claves de Amazon EC2 con AWS Management Console. Para obtener instrucciones sobre cómo crear un par de claves para Amazon EC2, consulte la Guía de introducción de Amazon Elastic Compute Cloud.

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

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

Simplemente ssh en su caja EC2 con el par de llaves existente. Luego edite ~ / .ssh / authorized_keys y agregue la nueva clave en una nueva línea. Salga y ssh a través de la nueva máquina. ¡Éxito!

Una vez que se ha iniciado una instancia, no hay forma de cambiar el par de claves asociado con la instancia en un 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