Agregue Keypair a la instancia EC2 existente

240

Me dieron 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 Keypair y aplicarlo a las instancias para que pueda ingresar SSH? Obtener el archivo 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 entrar en las instancias?

Chris Wagner
fuente
¿Has probado la solución aquí: stackoverflow.com/questions/1454629/… ? ssh-addDebe hacer lo que necesita.
Marc Bollinger
Es bueno aprender la función ssh-add, pero esto no ayudará porque este usuario realmente creó la instancia usando el par de claves que creó. Las instancias a las que me refiero se crearon con otro par de claves al que no tengo acceso.
Chris Wagner
1
Tal
Claude Vedovini
44
No puede aplicar un par de claves a una instancia en ejecución.
Rodney Quillo

Respuestas:

172

No 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 un AMI de arranque de EBS, puede detenerlo y hacer una instantánea del volumen. Crea un nuevo volumen basado en él. Y poder usarlo nuevamente 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.

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

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

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

  • Perdió su clave ssh u olvidó su contraseña
  • Cometió un error al editar el archivo / etc / sudoers y ya no puede obtener acceso a la raíz con sudo para solucionarlo
  • Su instancia de larga ejecución está bloqueada por algún motivo, no se puede contactar y no se inicia correctamente
  • Necesita recuperar archivos fuera de la instancia pero no puede acceder a ella

En una computadora física ubicada en su escritorio, puede simplemente iniciar el sistema con un CD o una memoria USB, montar el disco duro, retirar y reparar los archivos, luego reiniciar la computadora para volver a estar en el negocio.

Sin embargo, una instancia remota de EC2 parece distante e inaccesible cuando se encuentra en una de estas situaciones. Afortunadamente, AWS nos proporciona la potencia y flexibilidad para poder recuperar un sistema como este, siempre que estemos ejecutando instancias de arranque de EBS y no almacenes 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 EBS raíz) a una instancia diferente, arreglarlo y luego volverlo a mover.

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

Preparar

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

instance_b=i-YYYYYYYY

Detenga la instancia rota A (esperando que se detenga por completo), desconecte el volumen raíz EBS de la instancia (esperando que se desconecte), 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, 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:

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

Nota: Los uid en las dos instancias pueden no ser idénticos, así que tenga cuidado si está creando, editando o copiando archivos que pertenecen a usuarios no 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 crea archivos con un nombre y luego mueve el volumen nuevamente a A.

Envolver

Una vez que haya terminado y esté satisfecho con los archivos en / vol-a, desmonte el sistema de archivos (todavía 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 nuevamente a su hogar en la instancia original A e inicie la instancia nuevamente:

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

Afortunadamente, solucionó el problema, la instancia A sale 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, deberá volver a asociarla después de iniciarla nuevamente.

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

Rodney Quillo
fuente
¿Puede contarnos una guía paso a paso para esto (o señalarlo)? En mi caso, tengo una instancia en ejecución existente y necesito iniciar sesión desde una ubicación remota, donde no tengo la clave privada.
Jus12
87

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 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á acceder 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 he hecho algunos pequeños cambios.

  1. Paso 1: ingrese por defecto el usuario "ubuntu" :

    $ 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 "juan" por:

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

    Agregue "john" a la lista de sudoers por:

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

    .. y agregue 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, salga y regrese 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ú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 como puedes hacerlo.

    Aún necesitará copiar el archivo usando el usuario ubuntu , ya que solo tiene la clave para ese nombre de usuario. Por lo tanto, deberá mover la clave a la carpeta ubuntu y cambiarla 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 el archivo my_orig_key.pem y haz esto:

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

    El comando anterior copiará la clave "juan" 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, uno su máquina local chmod john a 600.

    $ chmod 600 john
    
  5. Paso 5: hora de probar tu clave :

    $ ssh -i john [email protected]
    

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

Ojo
fuente
44
Esto es útil, pero como paso final, ¿no debería eliminar también la clave privada de la máquina remota? De esa manera a otras personas con acceso a la instancia tampoco pueden copiar y utilizar su clave para ingresar.
culix
Esto funciona para mi. Pero, ¿cómo navego al usuario de ubuntu desde aquí, ya que los archivos en los que trabajaré están en el directorio de usuarios de ubuntu? Esto me llevará al grupo de usuarios de John. Ubuntu 14.04.4 LTS
olyjosh
Esto no funcionó para mí. Le dio permisos no válidos. Tuve que crear un par de llaves desde la consola ec2 y luego comenzó a funcionar
caballero oscuro
11

En su máquina local, ejecute el comando:

ssh-keygen -t rsa -C "SomeAlias"

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

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

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

Dan
fuente
Entonces, como @Dan mencionó, es posible cambiar el acceso a su instancia editando este archivo, pero nunca podrá cambiar el par de claves asociado con la instancia a nivel de metadatos. No olvide agregar el nombre del archivo .pem al final de su clave pública, por ejemplo:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti
7

Esto me sucedió antes (no tenía acceso a una instancia de EC2 que otra persona creó pero tenía acceso a la consola web de AWS) y escribí la respuesta en el blog: 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 un EC2 al que tiene acceso. Agregue su clave de publicación SSH ~ec2-user/.ssh/authorized_keysen esta unidad adjunta. Luego, vuelva a colocarlo en la antigua instancia de EC2. paso a paso en el enlace usando Amazon AMI.

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

Mauvis Ledford
fuente
6

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 sus instancias de Amazon EC2 aprovisionadas por Elastic Beanstalk para usar el par de claves de Amazon EC2 antes de poder acceder a sus instancias de Amazon EC2 aprovisionadas por Elastic Beanstalk. Puede configurar sus pares de claves de Amazon EC2 con 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

Kamal Essajidi
fuente
1
Gracias, @ kamal-essajidi! Para otros que usan EB: una vez que tenga un par de claves, puede agregarlo a Elastic Beanstalk en Configuración> Instancias> Par de claves EC2.
Scott,
4

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 la configuración ~ / .ssh

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem
karser
fuente
4

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

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

ninja123
fuente
3

Para entornos Elasticbeanstalk, puede aplicar un par clave-valor a una instancia en ejecución como esta:

  • Cree un par clave-valor desde EC2 -> Pares clave (en la pestaña RED Y SEGURIDAD)
  • Vaya a Elasticbeanstalk y haga clic en su aplicación.
  • Ir a la página de configuración y modificar la configuración de seguridad
  • Elija su par de claves EC2 y haga clic en Aplicar
  • Haga clic en confirmar para confirmar la actualización. Terminará el entorno y aplicará el valor clave a su entorno.
Kerem
fuente
1

En realidad, puede agregar un par de claves a través de la página de configuración de beanstalk elástico. luego reinicia su instancia para usted y todo funciona.

Vishwas Vaishnav
fuente