¿Cómo descargar la clave pública de Amazon AWS?

25

Tengo una instancia de Linux ec2 en ejecución asociada con un par de claves (p1) y he descargado la clave privada en el escritorio de mi casa. Ahora en el trabajo, creé un par de claves (p2) en mi escritorio de trabajo e importé la clave pública a Amazon a través de la consola de AWS.

En casa, quiero agregar la clave pública de keypair p2 que se agregará a authorized_keysmi instancia de AMI (a la que actualmente solo puedo acceder desde mi casa). Sin embargo, olvidé traer la clave pública de p2 conmigo, por lo que es posible exportar de alguna manera esta clave pública desde Amazon.

Jus12
fuente

Respuestas:

6

Bonito rompecabezas, gracias! Aquí hay una respuesta:

  1. Inicie una nueva instancia temporal de arranque EBS t1.micro A, especificando el par de claves p2. Especifique una zona de disponibilidad donde ya tenga otra instancia B en ejecución y a la que tenga acceso. (Comience uno temporal si es necesario).

  2. Detenga (no finalice) la instancia A después de que haya estado en estado de ejecución durante unos minutos, de modo que tenga la posibilidad de guardar la clave pública en su archivo autorizado_claves.

  3. Separe el volumen EBS raíz de la instancia detenida A. Adjúntelo y móntelo en su instancia en ejecución B.

  4. Copie la clave pública del sistema de archivos montado.

  5. Separe y elimine el volumen EBS. Terminar la instancia temporal A.

Eric Hammond
fuente
1
No estoy seguro de cómo esto realmente resuelve la pregunta original ... definitivamente es una forma de lidiar con instancias de AWS EC2 si y solo si está utilizando instancias respaldadas por EBS.
Jeremy Bouse
No tiene que usar instancias de arranque de EBS, excepto la única vez que ejecuta la instancia temporal para quitarle la clave pública. Todo lo que quiere hacer es obtener la clave pública que hace este enfoque.
Eric Hammond
1
Si tiene la clave privada, puede regenerar la clave pública sin pasar por tales medidas.
Jeremy Bouse
2
Jeremy: Basado en la pregunta original, la clave privada está de vuelta en su oficina donde no puede obtenerla. Y una vez que regresa a la oficina, no puede ingresar a la instancia EC2 porque no tiene la clave pública para esa clave privada de la oficina. Es por eso que quiere obtener la clave pública de Amazon, y la única forma de hacerlo es comenzar una instancia con esa clave pública. Luego debe quitar la clave pública de esa instancia, que es la parte difícil.
Eric Hammond
1
¡Guauu! mucho trabajo para obtener la clave pública. Hubiera sido más fácil para Amazon poner la opción "Exportar clave pública".
Jus12
37

Sin embargo, el comando ssh-keygen correcto es:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
rsmoorthy
fuente
Esto debería ser un comentario o una edición propuesta en la respuesta anterior. Sin embargo, tienes razón.
JCotton
Tienes razón, esto debería haber sido un comentario. Desafortunadamente, todavía no me he ganado los privilegios para comentar :-(
rsmoorthy
jaja, bueno ahí tienes. Gracias por tocar con la corrección.
JCotton
Esta respuesta funcionaría si tuviera acceso a la clave privada, pero en la pregunta original, esa clave privada está en una ubicación diferente y no es accesible.
Eric Hammond
1
ejecutar chmod 400 your_private_key.pemsi obtiene "Error de permisos demasiado abiertos"
crizCraig
7

Ya proporcioné una respuesta que usa volúmenes EBS para obtener la clave pública ssh, pero aquí hay otra forma de obtenerla iniciando una instancia EC2 temporal con un script de datos de usuario que envía la clave pública a la salida de la consola. Aquí están los pasos:

Guarde el siguiente código en un archivo nombrado output-ssh-key.userdataen su computadora local. ¡NO EJECUTE ESTOS MANDOS LOCALMENTE!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Ejecute una instancia de Ubuntu 10.04 LTS con el archivo anterior como un script de datos de usuario. Especifique el par de claves para el que desea recuperar la clave ssh pública:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Siga solicitando la salida de la consola de la instancia hasta que muestre su clave ssh pública. Especifique el id de instancia devuelto por el comando run-Instances:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

Dentro de 2-10 minutos obtendrá una salida como esta:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

La instancia temporal terminará automáticamente en menos de una hora, pero puede terminarla usted mismo si desea asegurarse de que no se le cobre más de los dos centavos que costará ejecutarla.

Eric Hammond
fuente
Intenté esto con una instalación moderna de awscli, y funcionó con su script de datos de usuario. Sin embargo, tuve que adaptar los comandos ligeramente. Esto funcionó para la región eu-west-1: instancias de ejecución de aws ec2 --keykey name mykey --instance-type t1.micro --instance -icieted-shutdown-behaviour termine --user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 terminate-instancia --instance-id i-0ce56c0e02086160d
holmb
(Editado) Ok, el formato es horrible aquí, publicaré una respuesta diferente.
Bernhard
5

Si tiene la clave SSH privada, puede volver a generar el componente de clave pública simplemente ejecutando el siguiente comando ssh-keygen :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

Esa es la parte simple ... La consola y la API de AWS no admiten empujar 2 pares de teclas al iniciar una instancia de EC2. Este es un ejercicio que el administrador del sistema debe realizar por otros medios.

Si tiene acceso a la clave de identidad ya autorizada, simplemente puede ejecutar el siguiente comando ssh-copy-id :

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Esto copiará la clave pública dada al servidor y al ~user/.ssh/authorized_keysarchivo automáticamente para usted y garantizará los permisos adecuados en el archivo.

La forma más elegante sería incluir las claves de identidad adicionales en sus procesos de gestión de configuración. En mi caso, esto implica agregar las teclas adicionales a la marioneta configuración de para el nodo.

Como nota al margen, la preferencia personal, pero utilizaría un mejor método de administración de claves SSH que simplemente tener que incluir claves separadas para el trabajo y la ubicación del hogar. Como mencioné en una pregunta anterior , mantengo mis llaves en una unidad USB que guardo conmigo en lugar de en cualquier computadora que utilizo.

Jeremy Bouse
fuente
0

Otra opción sería agregar un script corto en user_data que simplemente agregue otra clave ssh a la raíz:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Luego, puede iniciar sesión en la máquina como root ssh -l root -i <KEYFILE> URLy simplemente leer la clave de las claves autorizadas del usuario ec2_user, ubuntu o como se llame.

Lo único es que debe hacer que la máquina sea públicamente accesible y asegurarse de que el acceso al puerto 22 sea posible desde el exterior.

Bernhard
fuente