Saltar al contenido

¿Cómo puedo conectarme a mi instancia de Amazon EC2 si he perdido mi par de claves SSH tras el lanzamiento inicial?

7 minutos de lectura
0

Quiero conectarme a mi instancia de Amazon Elastic Compute Cloud (Amazon EC2), pero he perdido el par de claves SSH.

Descripción corta

Para conectarte a una instancia de EC2 cuando pierdes tu par de claves SSH, usa uno de los siguientes métodos:

  • Introduce los datos del usuario para crear un nuevo par de claves.
  • En el caso de las instancias que son nodos administrados, utiliza AWS Systems Manager para recuperar el par de claves.
  • Para las instancias que ejecutan Amazon Linux 2 (AL2) versión 2.0.20190618 y posteriores o Amazon Linux 2023 (AL2023), utiliza EC2 Instance Connect.
  • Si puedes acceder a tu instancia y tienes acceso a la consola serie de EC2, utiliza la consola serie.
    Nota: Este método no requiere que detengas e inicies la instancia.
  • Crea una instancia de rescate para crear una nueva clave pública.

Importante: Antes de detener e iniciar la instancia, lleva a cabo las siguientes acciones:

Nota: Al detener e iniciar una instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica para enrutar el tráfico externo hacia la instancia en lugar de una dirección IP pública.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Introducción de un script de datos de usuario

Importante: No almacenes datos confidenciales en los scripts de datos de usuario. En su lugar, utiliza métodos seguros como AWS Secrets Manager.

Si tu instancia no tiene acceso a cloud-init o tienes problemas con cloud-init, continúa con Uso de una instancia de rescate.

Creación del nuevo par de claves

Sigue estos pasos:

  1. Crea un nuevo par de claves.
  2. Si creas la clave privada en la consola de Amazon EC2, recupera la clave pública del par de claves.
  3. Abre la consola de Amazon EC2.
  4. Detén tu instancia.
  5. Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
  6. Selecciona Editar datos de usuario y, a continuación, introduce el siguiente script:
    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [users-groups, once]
    users:
    - name: username
    ssh-authorized-keys:
    - PublicKeypair
    Nota: Sustituye username por el nombre de usuario predeterminado o por un nombre de usuario personalizado creado anteriormente. Sustituye PublicKeypair por la clave pública. Cuando introduzcas la clave pública completa, comienza por ssh-rsa.
  7. Selecciona Guardar.
  8. Inicia la instancia.

Confirmación de que se ha completado la fase de cloud-init

En el resultado de la consola de instancias, comprueba los siguientes factores para asegurarte de que la fase de cloud-init esté completa:

  • No hay mensajes de error.
  • Todas las directivas de cloud-init aparecen como ejecutadas.
  • Aparece un mensaje de finalización para cloud-init similar al siguiente ejemplo: «Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v. A.B.C finished at ..».

Eliminación de los comandos de los datos de usuario de la instancia

Sigue estos pasos:

  1. Detén tu instancia.
  2. Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
  3. Selecciona Editar datos de usuario y, a continuación, borra todo el contenido del campo.
  4. Selecciona Guardar.
  5. Inicia la instancia.

Uso de Systems Manager

Para recuperar una instancia que sea un nodo administrado en Systems Manager, utiliza el runbook AWSSupport-ResetAccess para recuperar el par de claves. AWSSupport-ResetAccess usa EC2Rescue para generar y agregar automáticamente un nuevo par de claves SSH en la instancia.

Systems Manager cifra y guarda la nueva clave privada SSH de tu instancia en el Almacén de parámetros, una función de AWS Systems Manager como /ec2rl/openssh/instance_id/key.

Para obtener la clave SSH privada del almacén de parámetros, ejecuta el siguiente comando get-parameters de la AWS CLI:

aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query  "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' >  key-pair-name

Nota: Susituye instance_id por el ID de tu instancia y key-pair-name por el nombre de tu par de claves.

A continuación, crea un nuevo archivo .pem con el valor del parámetro como contenido. Usa el archivo .pem para volver a conectarte a tu instancia inaccesible.

Para convertir la clave privada en un archivo .pem, usa el siguiente comando:

ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem

Nota: Sustituye key-pair-name por el nombre de tu par de claves.

El runbook de automatización crea una copia de seguridad de imagen de máquina de Amazon (AMI) activada por contraseña. Amazon EC2 no elimina automáticamente la nueva AMI, por lo que permanece en tu cuenta de AWS.

Para localizar la AMI, sigue estos pasos:

  1. Abre la consola de Amazon EC2.
  2. Selecciona AMI.
  3. Introduce el ID de automatización en el cuadro de búsqueda.

Uso de EC2 Instance Connect

Para conectarte a una instancia de Amazon Linux, consulta Conexión a una instancia de Linux mediante EC2 Instance Connect.

Utilización de la consola serie de EC2

Si puedes acceder a la consola serie de EC2 para Linux, usa la consola para solucionar problemas de tipos de instancia basados en Nitro compatibles. Para obtener más información, consulta Configuración del acceso a la consola serie de EC2.

Uso de una instancia de rescate

Sigue estos pasos:

  1. Detén la instancia.

  2. Separa el volumen raíz de EBS de la instancia.

  3. Inicia una instancia de rescate en la misma zona de disponibilidad que la instancia original.

  4. Adjunta el volumen raíz de la instancia original a la instancia de rescate como volumen secundario.

  5. Detén la instancia de rescate.

  6. Para obtener el nombre del dispositivo del volumen raíz, ejecuta el siguiente comando:

    sudo lsblk -f

    Resultado de ejemplo:

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. Para montar el volumen adjunto en la instancia de rescate, ejecuta los siguientes comandos:

    sudo mkdir /mnt/target
    sudo mount /dev/xvdf1 /mnt/target

    Nota: Sustituye /dev/xvdf1 por el nombre del dispositivo de volumen raíz de la instancia original.

  8. Para crear una nueva clave pública, ejecuta el siguiente comando:

    sudo mkdir -p /mnt/target/home/USER/.ssh
    echo "your_new_public_key" | sudo tee -a /mnt/target/home/USER/.ssh/authorized_keys

    Nota: Sustituye USER por el nombre de usuario de la instancia original y your_new_public_key por tu clave pública. El nombre de la clave pública comienza por ssh-rsa.

  9. Para configurar el acceso a la clave en la instancia, ejecuta el siguiente comando:

    OS_USER=os-user
    sudo chown -R $OS_USER:$OS_USER /mnt/target/home/$OS_USER/.ssh
    sudo chmod 700 /mnt/target/home/$OS_USER/.ssh
    sudo chmod 600 /mnt/target/home/$OS_USER/.ssh/authorized_keys

    Nota: Sustituye os-user por el nombre de usuario asociado a la AMI que utilizaste para iniciar la instancia.

  10. Para desmontar el volumen, ejecuta el siguiente comando:

sudo umount /mnt/target
  1. Separa el volumen de la instancia de rescate y vuelve a conectarlo a la instancia original.
  2. Inicia la instancia original.