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: 08/10/2021

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

Descripción corta

Mensaje de error: “ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out” (ssh: conectarse al alojamiento ec2-X-X-X-X.compute-1.amazonaws.com puerto 22: tiempo de espera de conexión agotado). Este mensaje de error proviene del cliente de SSH. El error indica que el servidor no respondió al cliente y que el programa del cliente expiró (se agotó el tiempo de espera). A continuación se muestran las causas comunes de este error:

  • El grupo de seguridad o la ACL de red no permiten el acceso.
  • Hay un firewall en el sistema operativo de la instancia.
  • Hay un firewall entre el cliente y el servidor.
  • El alojamiento no existe.

Mensaje de error: “ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out” (ssh: conectarse al alojamiento ec2-X-X-X-X.compute-1.amazonaws.com puerto 22: conexión rechazada). Este mensaje proviene de un alojamiento de forma remota. A continuación se muestran las causas comunes de este error:

  • El alojamiento llegó a la instancia, pero no había ningún servicio escuchando en el puerto SSH.
  • Se bloqueó un firewall y se configuró para rechazar el paquete en lugar de eliminarlo.

Resolución

Compruebe lo siguiente:

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

Método 1: utilizar la consola serie de EC2

Si configura la consola serie de EC2 para Linux, puede utilizarla para solucionar problemas de tipos de instancias compatibles basadas en Nitro. La consola serie lo ayuda a solucionar 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 serie mediante la consola de Amazon EC2 o AWS Command Line Interface (AWS CLI).

Antes de utilizar la consola serie, conceda acceso a ella a nivel de 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 serie debe incluir como mínimo un usuario basado en contraseña. Si la instancia no está disponible y no ha configurado el acceso a la consola serie, siga las instrucciones de los métodos 2, 3 o 4. Para obtener información sobre cómo configurar la consola serie EC2 para Linux, consulte Configurar el acceso a la consola serie de EC2.

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

Método 2: utilizar Session Manager de AWS Systems Manager

Nota: Se requiere la instalación de SSM Agent para utilizar este método. Para obtener más información sobre el administrador de sesiones y obtener una lista completa de los requisitos previos, consulte Configuración de Session Manager.

1.    Abra la consola de AWS Systems Manager.

2.    Inicie una sesión.

3.    Agregue la siguiente línea adicional en la parte superior de la tabla de reglas y, a continuación, reinicie el servicio SSH:

$ sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
$ sudo service sshd restart

O bien, puede desactivar el firewall. Se recomienda utilizar grupos de seguridad en lugar de un firewall.

Para desactivar el firewall, utilice uno de los siguientes conjuntos de comandos, según su sistema operativo:

Ubuntu utiliza Uncomplicated Firewall

$ sudo iptables -F
$ sudo iptables -P INPUT ACCEPT
$ sudo ufw disable

Distribuciones que utilizan firewalld (por ejemplo, Red Hat o CentOS)

$ sudo iptables -F
$ sudo iptables -P INPUT ACCEPT
$ sudo systemctl disable firewalld

Nota: El comando anterior vacía todas las reglas principales de iptables y agrega una que permite conexiones SSH entrantes. Téngalo en cuenta antes de ejecutar estos comandos, ya que es posible que tenga otras reglas necesarias para la configuración. Después de recuperar el acceso a la instancia, revise la configuración del firewall (por ejemplo, UFW, firewalld, iptables).

4.    Asegúrese de que SSH se esté ejecutando y compruebe que el puerto TCP SSH (22) esté en estado de escucha.

$ sudo systemctl restart sshd
$ sudo ss -tpln | grep -E '22|ssh'
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1901,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1901,fd=4))

Nota: Si su sistema no tiene el comando ss, puede usar el comando netstat heredado con la misma sintaxis que se muestra en el ejemplo anterior.

5.    Termine la sesión.

6.    Conéctese a la instancia mediante SSH.

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

El documento de automatización AWSSupport-TroubleshootSSH instala la herramienta Amazon EC2Rescue 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 I'm receiving errors when trying to connect to my EC2 instance using SSH. (Recibo errores al intentar conectarme a mi instancia de EC2 mediante SSH) ¿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: utilizar un script de datos de usuario

Importante

  • Este procedimiento requiere detener y comenzar la 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 lanzan la instancia, como Amazon EMR, AWS CloudFormation, AWS Elastic Beanstalk, etc., detener la instancia podría terminarla. La terminación de la instancia en este caso depende de la configuración de la protección de escalado de la instancia para su grupo de Auto Scaling. Si la instancia forma parte de un grupo de Auto Scaling, elimine temporalmente la instancia del grupo de Auto Scaling antes de comenzar los pasos de resolución.
  • Detener y comenzar 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 instancias EC2. La siguiente entrada aparece en los registros de la consola de la instancia EC2 si UFW está activado.

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, a continuación, seleccione la instancia a la que intente conectarse.

4.    Detenga la instancia.

5.    Elija Actions (Acciones), Instance Settings (Configuración de 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 las reglas del puerto 22. Después de recuperar el acceso a la instancia, revise la configuración del firewall (por ejemplo, UFW, firewalld, iptables).

7.    Conéctese a la instancia mediante 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 datos de usuario:

1.    Tenga en cuenta los pasos del 1 al 4 de la sección Método 4: utilizar un script de datos de usuario.

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


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?