Creación de una conexión SSH con Amazon EC2 Instance Connect
Cuando se ejecutan instancias de Amazon EC2, es necesario gestionarlas. El método tradicional para la gestión de máquinas Linux remotas consiste en conectarse a Linux a través de SSH y ejecutar los comandos necesarios, editar archivos de configuración, etc. Los usuarios pueden iniciar sesión en Linux a través de SSH utilizando un nombre de usuario y una contraseña, o bien un nombre de usuario y una clave de seguridad. Sin embargo, para conectarse a Instancias de EC2 a través de SSH, los usuarios solo pueden utilizar un nombre de usuario y una clave de seguridad. Esta política está establecida en AWS EC2 para garantizar una mayor seguridad. En esta entrada del blog se explica cómo conectarse a Instancias de AWS que ejecutan Linux a través de SSH desde equipos que ejecutan Windows y Linux.
Descarga de una clave desde AWS
Cuando se crea una nueva Instancia de EC2 mediante el asistente de la Consola de gestión de AWS, se genera un par de claves al final del proceso de creación de la Instancia de EC2. Un par de claves consta de una clave privada y una clave pública. Secure Shell (SSH) es el protocolo de cifrado, y el par de claves se utiliza para cifrar la conexión de forma asimétrica. Se puede generar una clave pública a partir de la clave privada. Cuando se genera un par de claves para una instancia de Amazon EC2, la clave pública se guarda en la configuración de Linux instalada en la instancia de Amazon EC2, y el usuario descarga la clave privada.
Debes descargar la clave privada en el paso final del proceso de creación de la instancia de Amazon EC2 y guardarla en un lugar seguro. La instancia de Amazon EC2 no se creará hasta que descargues la clave privada. La clave privada se proporciona en un archivo PEM. Ten en cuenta que esta es tu única oportunidad de descargar la clave para la instancia actual de AWS EC2.
Descargo la clave privada y la guardo como el archivo blog01-key.pem .
C onectarse a la instancia de EC2 a través de SSH utilizando PuTTY
PuTTY es un cliente SSH gratuito que puedes instalar en Windows. Debes convertir el archivo PEM descargado al formato PPK, compatible con PuTTY, antes de poder conectarte a AWS a través de SSH. El motivo es que debes utilizar la utilidad PuTTY Key Generator (PuTTYgen), que se instala junto con PuTTY desde un único archivo de instalación. También puede descargar puttygen.exe manualmente. PuTTYgen se utiliza para generar claves RSA y DSA.
Como resultado, tengo tres archivos en el equipo Windows desde el que voy a conectarme a las Instancias de EC2:
blog01-key.pem
putty.exe
puttygen.exe
Estos archivos se encuentran en « C:AWS SSH » en este ejemplo.
Abre el generador de claves de PuTTY (PuTTYgen) haciendo clic en el archivo puttygen.exe o en un acceso directo a este archivo.
Haz clic en Load en la ventana de PuTTYgen.
Haz clic en «Seleccionar todo» (*.*) y explora el archivo PEM. Seleccionamos « C:AWS SSHblog01-key.pem ». A continuación, haz clic en Open.
Lee el aviso que aparece y pulsa OK.
Ahora podrás ver la cadena de tu clave pública en la ventana de PuTTYgen. Utiliza la configuración que se muestra en la captura de pantalla siguiente.
Tipo de clave a generar: RSA
Número de bits en la clave generada: 2048 bit
¿Estás seguro de que quieres guardar esta clave sin una frase de contraseña que la proteja?
Pulsa Yes si estás de acuerdo. Si no estás de acuerdo, vuelve atrás y protege la clave con una frase de contraseña.
Guarda la clave privada en una ubicación segura. Yo guardo la clave como « C:AWS SSHAWS EC2 SSH.ppk ». Pulsa Save.
H Cómo conectarse por SSH a una instancia de EC2 desde Windows
Comprueba la dirección IP pública de tu instancia de AWS EC2. La instancia debe estar en estado «en ejecución» para tener una dirección IP pública. En mi caso, la dirección IP pública es 52.55.222.44 . Utilizaré esta dirección IP para conectarme a AWS vía SSH.
Abre PuTTY en Windows. Ejecuta putty.exe o el acceso directo correspondiente.
Ve a SSH > Auth.
Haz clic en Browse y selecciona el archivo PPK (la clave privada). Selecciono el archivo « C:AWS SSHAWS EC2 SSH.ppk » generado anteriormente en PuTTYgen.
Vuelve a la pantalla Session de PuTTY e introduce la dirección IP pública de tu instancia de EC2 en el campo Nombre del host (o dirección IP) . Asegúrate de que el tipo de conexión sea SSH . Yo introduzco 52.55.222.44 , que es la dirección IP de mi instancia EC2 copiada de la consola de gestión de EC2. El puerto TCP 22 está seleccionado. Pulsa Open.
Se muestra la alerta de seguridad. Lee el mensaje y pulsa Accept para continuar y conectarte a la instancia EC2. Este cuadro de diálogo aparece cuando te conectas a una máquina remota concreta por primera vez. La huella digital que aparece en el mensaje debe coincidir con la huella digital de la instancia de Amazon EC2.
Introduce el nombre de usuario en la ventana de la consola. Como utilizo Ubuntu Linux en mi instancia de Amazon EC2, utilizo ubuntu, , que es el nombre de usuario predeterminado configurado para esta instancia instalada a partir de la AMI correspondiente.
Nombres de usuario predeterminados para diferentes tipos de AMI de Linux en AWS:
- Amazon Linux 2 o la AMI de Amazon Linux: ec2-user
- CentOS: centos o ec2-user
- Debian: ADMIN
- Fedora: fedora o ec2-user
- Red Hat Enterprise Linux (RHEL): ec2-user o root
- SUSE: ec2-user o root
- Ubuntu: ubuntu
- Oracle: ec2-user
- Bitnami: bitnami
Una vez que veas la línea de comandos de un shell de Linux (bash en este caso), podrás ejecutar comandos en la máquina Linux remota que se ejecuta en AWS. Esto significa que has configurado correctamente el acceso SSH a AWS EC2 en PuTTY.
Transferencia de archivos mediante SSH a instancias de Amazon EC2
He configurado el acceso remoto SSH de AWS a la instancia de Amazon EC2 y ahora puedo conectarme a las instancias de AWS mediante SSH, ejecutar comandos, editar la configuración, etc. Sin embargo, es posible que también necesites transferir archivos mediante SSH a instancias de AWS desde tu máquina Windows o en sentido contrario. Existen protocolos de transferencia de archivos que funcionan a través de SSH para transferir archivos de forma segura de un equipo a otro; por ejemplo, el Protocolo de transferencia segura de archivos (SFTP) y el Protocolo de copia segura (SCP).
Para transferir archivos vía SSH a instancias de AWS desde Windows, puede utilizar WinSCP, que es una herramienta gratuita para Windows. Tenga en cuenta que scp deben estar instalados en el equipo Linux remoto que se ejecuta en AWS.
Una vez instalado WinSCP en el equipo con Windows, ejecuta la aplicación.
Selecciona SFTP como protocolo de archivos y, en el campo Nombre del host , introduce la dirección IP pública de tu instancia de EC2 a la que deseas conectarte vía SSH para transferir archivos. Introduce un nombre de usuario para tu instancia de EC2. En mi ejemplo, utilizo 52.55.222.44 como dirección IP y ubuntu como nombre de usuario.
Haz clic en Advanced en la ventana principal de WinSCP.
Ve a SSH > Authentication en la ventana Configuración avanzada del sitio . Haz clic en … en la sección Parámetros de autenticación y selecciona la clave privada que generaste previamente en PuTTYgen. En mi caso, selecciono « C:AWS SSHAWS EC2 SSH.ppk ». Pulsa OK para guardar los ajustes y volver a la ventana principal de WinSCP.
Haga clic en « Login » en la ventana principal de WinSCP.
Aparecerá un mensaje de advertencia, igual que cuando se conectó por primera vez a las Instancias de EC2 desde PuTTY. Haga clic en « Yes » para continuar.
Si la configuración de SSH de AWS EC2 es correcta y ha configurado correctamente los parámetros de conexión SSH en WinSCP, verá una ventana con dos paneles al estilo «commander». La carpeta de usuario del equipo local con Windows se muestra en el panel izquierdo, y la carpeta de inicio del usuario de Linux que se ejecuta en AWS se muestra en el panel derecho. Puedes arrastrar y soltar archivos de un panel a otro, así como copiar, renombrar o eliminar archivos en los equipos local y remoto. 
Conexión a AWS mediante SSH desde Linux
A diferencia de Windows, Linux cuenta con un cliente SSH nativo. En la consola de tu equipo local con Linux, utiliza un comando como el siguiente para conectarte mediante SSH a Instancias de EC2 que ejecuten Linux:
ssh -i file_name.pem ubuntu@ip_address
Ve al directorio donde se encuentra tu clave privada .pem en un equipo con Linux. En este ejemplo, utilizo Ubuntu y he descargado el archivo blog01-key.pem en ~/Downloads/.
cd ~/Downloads/
ssh -i blog01-key.pem ubuntu@52.55.222.44
Donde ubuntu es el nombre de usuario en la máquina Linux remota, y 52.55.222.44 es la dirección IP de la máquina Linux remota.
Si ejecutas este comando ahora, obtendrás el error:
Advertencia: archivo de clave privada desprotegido.
Los permisos de «blog01-key.pem» son demasiado amplios.
Es necesario que tu clave privada no sea accesible para otros.
Esta clave privada se ignorará. Carga de clave: permiso pad.
Permiso denegado (clave pública).
Debes establecer permisos más bajos (más estrictos) por motivos de seguridad.
chmod 400 ./blog-key.pem
Utiliza 400 si las claves solo deben ser legibles para ti.
Utiliza 600 si necesitas que las claves sean legibles y modificables por ti.
Ahora puedes conectarte a instancias de Amazon EC2 a través de SSH desde tu máquina Linux con el comando:
ssh -i blog01-key.pem ubuntu@52.55.222.44
Ahora estoy conectado vía SSH a una instancia de Amazon EC2.
Transferencia de archivos vía SSH a Amazon EC2 en Linux
También puedes transferir archivos vía SSH a instancias de AWS utilizando SCP en Linux. Asegúrate de haber establecido ya una conexión SSH de AWS con la instancia remota de Linux desde tu máquina local de Linux. A continuación, abre una nueva consola en tu máquina local de Linux y conéctate a la instancia de EC2 utilizando un comando como este:
scp -i /path/key_name.pem /path/file_name.txt user_name@ec2_instance_IP_address:/path_to_file
En mi ejemplo, utilizo el comando:
scp -i ~/Downloads/blog01-key.pem ~/Downloads/file.txt ubuntu@52.55.222.44:/home/ubuntu
La transferencia de archivos a través de SSH a la instancia de AWS se ha completado con éxito.
Para copiar un archivo en sentido inverso (desde Linux en Amazon EC2 a tu máquina local con Linux), utiliza un comando como este:
scp -i /path/key_name.pem user_name@ec2_instance_IP_address:/path_to_file/my-file.txt path/my-file2.txt
En mi caso, utilizo el comando:
scp -i ~/Downloads/blog01-key.pem ubuntu@52.55.222.44:/home/ubuntu/file1.txt ~/Downloads/file1-copy.txt
Como puedes ver en la captura de pantalla, el archivo se ha copiado correctamente. Puedes copiar archivos importantes desde una instancia de Amazon EC2 al ordenador local que necesites y hacer backup de los mismos. Realiza Hacer backup de AWS EC2 con regularidad para evitar la pérdida de datos.
Cómo añadir una nueva clave a una instancia de AWS
Puedes crear un par de claves adicional para una instancia de EC2 ya existente después de crear la instancia de AWS EC2 con el fin de conectarte a instancias de AWS a través de SSH después de crear la instancia de AWS EC2. Es posible que tengas que hacerlo para proporcionar acceso SSH a la instancia EC2 a otros usuarios. Si consideras que el usuario no necesita conectarse mediante SSH a Instancias de EC2 de AWS, puedes eliminar la clave pública de la máquina Linux que se ejecuta en AWS EC2 sin necesidad de volver a crear una nueva clave en lugar de la generada en el momento de la creación de la instancia.
Abre la consola de gestión de EC2 en la consola de gestión de AWS.
Ve a Network & Security en el panel de navegación y haz clic en Key Pairs.
En esta página se muestran todos los pares de claves existentes. Puede escribir parte del nombre de un par de claves existente en el campo de búsqueda para encontrarlo.
Haga clic en el botón « Create key pair » situado en la esquina superior derecha de la interfaz web para crear un nuevo par de claves para una instancia de EC2 existente.
Seleccione « .pem » como formato de clave privada si necesita utilizar la clave en Linux con OpenSSH, o seleccione «.ppk» si necesita utilizarla en Windows con PuTTY. Como voy a utilizar un equipo local con Linux para conectarme a Instancias de EC2 a través de SSH con una nueva clave, selecciono la opción de clave « .pem ». Puede añadir etiquetas si es necesario. Haga clic en « Create key pair » cuando esté listo para continuar.
Guarde el archivo descargado en un lugar seguro. En mi caso, el nombre del archivo descargado es « » «blog02-temp.pem» « » y guarde este archivo en el directorio « » «Descargas» « » del directorio de inicio del usuario.
Obtención de una clave pública a partir del nuevo par de claves
Hemos generado un nuevo par de claves en la interfaz web de la Consola de gestión de AWS. Ahora tenemos que generar una clave pública utilizando la clave privada del archivo descargado .pem .
Utiliza el comando con este formato:
ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem
En mi caso, el comando es:
ssh-keygen -y -f ~/Downloads/blog02-temp.pem
Si aparece un error, configura los permisos correctos:
chmod 400 ~/Downloads/blog02-temp.pem
Si todo es correcto, la clave pública generada se muestra en la salida de la consola.
Copia la cadena de la clave generada y guarda esta información en un lugar seguro. En este ejemplo, guardo la cadena de la clave en un archivo de texto.
Copia la cadena de la clave al portapapeles.
Conéctate a las Instancias de EC2 a través de SSH desde tu máquina Linux local, tal y como se ha explicado anteriormente en esta entrada.
Ahora nos encontramos en /home/Ubuntu/
Abre con un editor de texto el archivo de configuración donde se almacenan las claves públicas para acceder a la instancia de EC2 a través de SSH: nano ~/.ssh/authorized_keys
La ruta completa a este archivo de configuración depende de la imagen de máquina de Amazon (AMI) de Linux y puede ser:
/home/ubuntu/.ssh/authorized_keys
/home/ec2-user/.ssh/authorized_keys
/root/.ssh/authorized_keys
Pega tu clave desde el portapapeles en la segunda línea de este archivo de configuración.
Guarda los cambios y cierra el archivo.
No cerres la consola (terminal) con la sesión SSH actual que utilizas para conectarte a las Instancias de EC2 hasta que te asegures de que la segunda clave que has añadido funciona. De lo contrario, podrías perder la conexión SSH si la configuración es incorrecta, sin poder conectarte a las Instancias de AWS a través de SSH. ¡No te quedes bloqueado fuera en caso de cometer un error!
Abre otra terminal en tu máquina Linux local e intenta conectarte a la instancia utilizando una nueva clave. Me dirijo al directorio donde se encuentran mis archivos de claves ( .pem ).
cd ~/Downloads/
Conéctate a la instancia de EC2 que ejecuta Linux en AWS desde tu máquina local con Linux en la nueva consola, definiendo la nueva clave privada ( blog02-temp.pem en este caso).
ssh -i blog02-temp.pem ubuntu@52.55.222.44
Se ha establecido correctamente la conexión SSH de AWS con la nueva clave. Ahora puedes enviar la nueva clave ( blog02-temp.pem ) a un usuario que necesite establecer la conexión SSH de AWS. Cuando necesite desactivar el acceso SSH a esta instancia de AWS EC2 para el usuario, elimine la segunda línea de .ssh/authorized_keys en su instancia remota de Linux que se ejecuta en AWS EC2. Dado que la configuración SSH de AWS con ambas claves (la primera clave que se generó al crear la instancia de EC2 y la segunda clave que creó anteriormente para que otro usuario se conectara a AWS EC2) funciona correctamente, puede cerrar las ventanas del terminal SSH.
Si elimina un par de claves en Network & Security > Key pairs desde la Consola de gestión de EC2 (el lugar donde creamos la segunda clave en la interfaz web de la Consola de gestión de AWS), las claves dentro de esa instancia concreta de EC2 no se eliminan.
Qué hacer si pierde la clave SSH de AWS EC2
Si pierde la clave privada para conectarse a una instancia de AWS EC2 (la que se generó al crear una nueva instancia de EC2), ya no podrá conectarse a dicha instancia. No es posible generar una nueva clave e insertarla en el archivo de configuración SSH de AWS de la instancia de EC2 actual. En esta situación, puede utilizar una instancia de EC2 temporal a la que tenga acceso SSH. Pruebe el siguiente procedimiento para restablecer el acceso SSH de AWS EC2 a la instancia.
- Detén la instancia de EC2 original, cuya clave privada SSH de AWS has perdido.
- Comprueba la información sobre los volúmenes EBS conectados a la instancia de EC2. Debes identificar el volumen EBS que contenga el directorio raíz «/» montado en Linux. Anota el ID de este volumen EBS.
- Inicia una instancia temporal en AWS EC2. Puedes utilizar una instancia que ejecute la misma distribución de Linux que la instalada en la máquina original (una AMI del mismo tipo).
- Genera un nuevo par de claves para conectarte a AWS en la Consola de gestión de AWS. Guarda la clave privada y prepara la clave pública. Debes generar la cadena de la clave pública para reparar la configuración SSH de AWS almacenada en el volumen raíz utilizado por la instancia original.
- Crea un directorio en el sistema Linux que se ejecuta en la instancia temporal de EC2 y monta el volumen EBS que contiene la partición raíz / de la instancia original de EC2 en la instancia temporal de EC2. Localiza el volumen EBS necesario mediante el ID de volumen que anotaste anteriormente.
- Abre el archivo de configuración de claves SSH de AWS (que se encontraba en un directorio como /home/Ubuntu/.ssh/authorized_keys). La ruta varía en función del directorio en el que hayas montado la partición raíz de la instancia de EC2 original. Añade la cadena de la nueva clave pública al archivo de configuración de claves SSH de AWS.
- Desmonta el volumen EBS utilizado por la instancia de EC2 original que está conectada a la instancia de EC2 temporal.
- Vuelve a montar el volumen EBS que contenga el archivo de configuración de claves SSH de AWS editado en la instancia de EC2 original.
- Encienda la instancia EC2 original y conéctese a ella utilizando un nuevo par de claves a través de SSH.
Uso de EC2 Instance Connect
La gestión de claves es una parte importante de la administración de AWS, ya que es necesario mantener en un lugar seguro las claves SSH de AWS EC2 para acceder a las Instancias de EC2 y evitar su pérdida. La creación y eliminación de claves necesarias para el acceso temporal de otros usuarios puede convertirse en una tarea rutinaria cuando hay un gran número de usuarios. Por este motivo, Amazon ofrece la posibilidad de conectarse a instancias de AWS EC2 a través de SSH utilizando EC2 Instance Connect. Esta función permite automatizar la gestión de claves SSH para conectarse a instancias de AWS.
La idea de utilizar EC2 Instance Connect es crear políticas de Gestión de Identidad y Acceso (IAM) para controlar de forma centralizada el acceso SSH de AWS a las instancias de EC2 sin necesidad de gestionar (crear, compartir o eliminar) las claves SSH manualmente. Por último, los usuarios pueden utilizar un cliente SSH, un cliente basado en navegador de la consola de AWS EC2 o la CLI de Amazon EC2 Instance Connect para conectarse a las instancias de Amazon EC2.
La API de Amazon Instance Connect envía una clave SSH pública de un solo uso a los metadatos de la instancia durante 60 segundos. La política de IAM asociada al usuario de IAM autoriza al usuario. El usuario debe conectarse a la instancia de EC2 utilizando esta clave en un plazo de 60 segundos. Después de que la clave expire, se debe utilizar una nueva.
Amazon Instance Connect es compatible con Instancias de EC2 en las que estén instalados Ubuntu 16 (o superior) y Amazon Linux 2. Amazon Instance Connect debe estar instalado en la instancia de EC2 con Linux. Otro requisito previo es la instalación de AWS CLI en la máquina Linux remota que se ejecuta en AWS.
Después de la instalación, Amazon Instance Connect ejecuta el script que escribe datos en estos parámetros del archivo de configuración (/etc/ssh/sshd_config) del demonio del servidor SSH:
AuthorizedKeysCommand
AuthorizedKeysCommandUser
La configuración actualizada AuthorizedKeysCommand se utiliza para leer las claves SSH públicas de AWS EC2 a partir de los metadatos de la instancia de EC2. Si ya se han introducido valores personalizados para estos parámetros, Instance Connect no los actualiza (ni los sobrescribe), pero en ese caso no podrás utilizar la función.
Debes crear un archivo de configuración en formato JSON. Abre Consola de IAM, ve a «Políticas» y haz clic en «Crear política». Como alternativa, puede utilizar la interfaz de línea de comandos en su máquina Linux con la AWS CLI instalada. A continuación se muestra un ejemplo de configuración. Esta política puede identificar las instancias por su ID para permitir el acceso.
{
"Version": "2021-10-17",
"Statcodeent": [
{
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": [
"arn:aws:ec2:region:account-id:instance/i-00000000000000000",
"arn:aws:ec2:region:account-id:instance/i-00000000000000001"
],
"Condition": {
"StringEquals": {
"ec2:osuser": "ami-username"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
}
A continuación, hay que activar la política. El comando de la AWS CLI para activar la política tendrá un aspecto similar al siguiente:
aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
Puede asignar la política activada al usuario correspondiente.
aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name
Para conectarse a la instancia de Amazon EC2 en Consola de EC2, seleccione la instancia de Amazon EC2 necesaria y haga clic en el botón Connect . En la página «Conectarse a la instancia» , selecciona EC2 Instance Connect tab y haz clic en Connect.
Conclusión
Conectarse a Instancias de EC2 a través de SSH es una parte importante del proceso de administración de EC2. En esta entrada del blog se ha explicado cómo realizar una configuración de SSH para EC2 y conectarse a Instancias de EC2 que ejecutan Linux desde máquinas locales con Linux y Windows. Para establecer la conexión SSH con las Instancias de EC2 es necesario utilizar pares de claves. La clave pública se almacena en la configuración del sistema Linux que se ejecuta en AWS EC2, mientras que la clave privada la utiliza un cliente SSH local instalado en el equipo del usuario. Guarda las claves en un lugar seguro y realiza backups periódicamente para evitar la pérdida de datos, tiempo y costes.





























