Recibo errores como “Connection refused” (Conexión rechazada) o “Connection timed out” (Conexión terminada) cuando intento conectar mi instancia EC2 con SSH. ¿Cómo se soluciona esto?

Última actualización: 27-04-2021

Recibo errores como “Connection refused” (Conexión rechazada) o “Connection timed out” (Conexión terminada) cuando intento conectar mi instancia Amazon Elastic Compute Cloud (Amazon EC2) con SSH. ¿Cómo se soluciona esto?

Descripción corta

El mensaje de error "Error connecting to [instance], reason: Connection timed out: connect" (Error de conexión a [instancia], motivo: caducó la conexión) hace referencia a problemas de conectividad a la instancia, lo que significa que la solicitud no llega a la instancia y caduca. Esto puede producirse si SSH no se está ejecutando en la instancia o si un firewall bloquea el acceso.

El mensaje de error "ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused" (ssh: conexión al anfitrión ec2-X-X-X-X.compute-1.amazonaws.com puerto 22: se rechazó la conexión) indica que la instancia rechazó la conexión o que el daemon del servicio SSH no se está ejecutando. Este error también puede producirse si un firewall está rechazando el acceso a la instancia.

Resolución

Compruebe lo siguiente:

  • No hay ningún firewall que bloquee la conexión.
  • El servicio SSH se está ejecutando en la instancia.
  • El puerto TCP 22 para SSH está a la escucha.

Hay cuatro métodos para llevar a cabo estas tareas:

Método 1: usar la consola de serie de EC2

Si ha habilitado la consola de serie de EC2 para Linux, puede utilizarla para resolver los problemas de los tipos de instancias basadas en Nitro compatibles. La consola de serie lo ayuda a resolver los problemas de arranque, configuración de red y configuración de SSH. La consola de serie se conecta a su instancia sin necesidad de una conexión de red funcional. Puede acceder a la consola de serie a través de la consola de Amazon EC2 o AWS Command Line Interface (AWS CLI).

Antes de usar la consola de serie, conceda acceso a ella por cuenta. A continuación, cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a sus usuarios de IAM. Además, cada instancia que utilice la consola de serie debe incluir como mínimo un usuario basado en contraseña. Si su instancia no está disponible y no ha configurado el acceso a la consola de serie, siga las instrucciones de los métodos 2, 3 o 4. Para obtener información sobre la configuración de la consola de serie de EC2 para Linux, consulte Configurar el acceso a la consola de serie de EC2.

Nota: si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que esté utilizando la versión más reciente de AWS CLI.

Método 2: usar el Administrador de sesiones de AWS Systems Manager

Nota: Es necesaria la instalación del agente de SSM para usar este método. Para obtener más información acerca del Administrador de sesiones y ver una lista completa de requisitos previos, consulte Configuración del Administrador de sesiones.

1.    Abra la consola de AWS Systems Manager.

2.    Inicie una sesión.

3.    Para desactivar los firewalls y reiniciar el servicio SSH, ejecute los comandos siguientes.

$ sudo iptables -F
$ sudo service sshd restart

Nota: El comando anterior vacía todas las reglas de iptables principales, no solo para el puerto 22. Después de recuperar el acceso a la instancia, revise la configuración del firewall (por ejemplo, ufq, firewalld, iptables).

4.    Compruebe que el puerto TCP para SSH (22) esté a la escucha.

$ sudo netstat -tnlp | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      849/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      849/sshd

5.    Finalice la sesión.

6.    Conéctese a la instancia a través de SSH.

Método 3: ejecute el documento de automatización AWSSupport-TroubleshootSSH

El documento de automatización AWSSupport-TroubleshootSSH instala la herramienta EC2Rescue de Amazon en la instancia. Esta herramienta busca y corrige algunos problemas que provocan errores de conexión remota al conectarse a una máquina con Linux a través de SSH. Para obtener más información, consulte ¿Cómo puedo usar el flujo de trabajo de automatización de AWSSupport-TroubleshootSSH para solucionar problemas de conexión de SSH?

Método 4: usar un script de datos

Importante

  • Este procedimiento requiere detener e iniciar su instancia EC2. Tenga en cuenta que, si su instancia está basada en un almacén de instancias o tiene volúmenes de almacén de instancias que contienen datos, los datos se pierden al detener la instancia. Para obtener más información, consulte Determinar el tipo de dispositivo raíz de la instancia.
  • Si la instancia forma parte de un grupo de Amazon EC2 Auto Scaling o si servicios que usan AWS Auto Scaling, como Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk (entre otros), la lanzan, es posible que se termine la instancia al detenerla. La terminación de la instancia, en este escenario, depende de la configuración de protección de escalado de instancias para el grupo de Auto Scaling. Si su instancia forma parte de un grupo de Auto Scaling, elimine temporalmente la instancia del grupo de Auto Scaling antes de iniciar los pasos de resolución.
  • Detener e iniciar la instancia cambia la dirección IP pública de la instancia. Es una práctica recomendada utilizar una dirección IP elástica en lugar de una dirección IP pública cuando se dirige el tráfico externo a su instancia.

1.    Consulte los registros de la consola de la instancia EC2. Aparece la siguiente entrada en los registros de la consola de la instancia EC2 si ufw está habilitado.

systemd[1] : starting Uncomplicated Firewall
Starting Uncomplicated firewall...

2.    Abra la consola de Amazon EC2.

3.    Elija Instances (Instancias) en el panel de navegación y elija la instancia a la que intenta conectarse.

4.    Detenga la instancia.

5.    Elija Actions (Acciones), Instance settings (Configuración de la instancia), Edit User Data (Editar datos de usuario).

6.    Copie el script de datos de usuario siguiente en el cuadro de diálogo Edit User Data (Editar datos de usuario) y elija Save (Guardar).

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:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
iptables -F
service sshd restart
--//

Nota: El comando anterior vacía todas las reglas de iptables principales, no solo para el puerto 22. Después de recuperar el acceso a la instancia, revise la configuración del firewall (por ejemplo, ufq, firewalld, iptables).

7.    Conéctese a la instancia a través de SSH.

8.    El script de datos de usuario anterior se ejecuta cada vez que se reinicia la instancia. Después de recuperar el acceso a la instancia, elimine el script de datos de usuario.

Para eliminar los datos de usuario:

1.    Siga los pasos del 1 al 4 de la sección Método 4: usar un script de datos de usuario.

2.    Elimine el script de datos de usuario siguiente en el cuadro de diálogo Edit User Data (Editar datos de usuario).