Recuperar acceso a una instancia EC2 con key pair perdida o desaparecida

Cuando creas una key-pair (Par de Claves) y la asignas a las instancias, lo primero que tienes que hacer es guardar esta key-pair en un lugar seguro y si lo guardas en dos mucho mejor. Amazon AWS no guarda tu clave privada, por lo que si la pierdes no la podrás recuperar y no podrás conectarte a o las instancias EC2.

El funcionamiento de una key-pair (conjunto de clave privada y clave publica) es el siguiente, lanzamos la instancia especificando el key-pair existente o uno nuevo que hemos creado, en el momento del arranque de la instancia, el contenido de la clave pública se coloca en una entrada dentro del archivo /home/user/.ssh/authorized_keys y la clave privada nos la guardamos en un lugar seguro porque es la que utilizaremos para conectarnos a una instancia.

En este post veremos como recuperar el acceso a una instancia EC2 de la que hemos perdido el key-pair, ya que este ultimo no se si se puede recuperar o sacar de algún sitio, lo desconozco. Nota: antes de tocar nada, recomendable Snapshot o Backup.

Si nos fijamos en la siguiente imagen, mis instancias utilizan el key-pair «KEY-IRISH», en honor a la región de Irlanda, que es la que estoy últimamente.

Vamos con el ejemplo, perdemos la clave privada y ya no podemos acceder.

Como no podemos conectarnos y no podemos recuperar la clave privada, habrá que crear una nueva instancia de «rescate» y una nueva key-pair que la llamaremos KEY-SOSDEIAK. Así que desplegamos una Instancia.

En el ultimo paso del asistente nos dirá de seleccionar una key-pair existente o crear una nueva, seleccionamos crear una nueva –> download Key pair –> Launch instances, esta llave nueva se llamara KEY-SOSDEIAK

Mientras que se despliega la nueva instancia, apagamos la instancia a la que no nos podemos conectar por la falta de la clave privada.

Una vez parada la instancia, vamos a volumes y seleccionamos el volumen de la instancia a la que no podemos conectar, botón derecho sobre esta y hacemos clic sobre Detach volume

Una vez quitado el volumen raíz de la instancia, nos mostrara el estado del volumen como «available». Ahora la idea es coger este volumen y añadirlo a la instancia de rescate que hemos creado. Para eso, daremos botón derecho sobre el volumen y Attach Volume.

En el siguiente paso seleccionamos la instancia de rescate y attach.

Iniciada la instancia, nos conectamos por SSH y con el comando lsblk -fm comprobamos que el volumen se ha añadido correctamente. Vemos que la añade como xvdf1.

Lo siguiente sera montar este disco en el sistema operativo, para eso crearemos un directorio donde montaremos el disco.

Si nos muestra el siguiente error al intentar montar el disco «mount: /mnt/DiskEC2STOR: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.», esto es debido a que las dos instancias se han creado con el mismo AMI y por lo tanto tienen el mismo UUID

Pero no pasa nada, porque este UUID lo podemos omitir añadiendo la opción nouuid en el momento del montaje del disco.

Ejecutamos el siguiente comando sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/DiskEC2STOR

Si realizamos un listado con ls -l de los directorios del disco montado, veremos su contenido.

Lo que haremos ahora es copiar todo el contenido del fichero authorized_keys de la instancia de rescate a la instancia que no tenemos acceso para poder utilizar la clave privada llamada KEY-SOSDEIAK

Utilizaremos el siguiente comando cat /mnt/ec2-user/.ssh/authorized_key > /mnt/DiskEC2STOR/home/ec2-user/.ssh/authorized_keys

Una vez copiado, si revisamos el contenido del fichero, veremos que dentro del contenido aparecerá el nombre la key-pair

Una vez terminado, tendremos que quitar el volumen de esta instancia y añadir a la instancia original.

Seleccionamos la instancia original y Attack.

Añadimos el disco y attach.

Una vez añadido el disco a la instancia, la iniciamos.

Una vez iniciada la instancia, comprobamos que nos podemos conectar y acceder a la instancia.

Cuando nos conectamos a la instancia, si hacemos un cat sobre el fichero authorized_keys, veremos el contenido de la cable publica .

Saludos y espero que os sirva.