¿Cómo soluciono los errores «Connection refused» o «Connection timed out» cuando uso SSH para conectarme a mi instancia de EC2?

8 minutos de lectura
0

Recibo errores de «Connection refused» o «Connection timed out» cuando uso SSH para conectarme a mi instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Descripción corta

Si se agota el tiempo de espera de la conexión, recibirás el siguiente mensaje de error del cliente SSH:

«ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out»

El error Connection timed out se produce cuando el servidor no responde al cliente y el programa cliente se da por vencido (se agota el tiempo de espera).

Si un host rechaza tu conexión de forma remota, recibirás el siguiente mensaje de error:

«ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused»

Resolución

Error «Connection timed out»

Si recibes el error Connection timed out, comprueba las siguientes configuraciones:

Nota: Para comprobar si hay problemas con el firewall o los TCP Wrappers, debes tener acceso al sistema operativo (SO) a la instancia.

Error «Connection refused»

Si recibes el error Connection refused, comprueba las siguientes configuraciones:

  • No hay ningún firewall en la instancia que bloquee la conexión SSH.
  • El daemon SSH (sshd) está ejecutándose y a la escucha en el puerto 22.

Nota: Para comprobar las configuraciones anteriores, debes tener acceso a la instancia a nivel de sistema operativo.

Solución de problemas con instancias que superen ambas comprobaciones de estado

Para solucionar problemas con las instancias que superan las comprobaciones de estado, usa uno de los siguientes métodos de solución de problemas.

Ejecución del runbook AWSSupport-TroubleshootSSH

Se recomienda ejecutar el manual de automatización de AWSSupport-TroubleshootSSH. El runbook instala la herramienta Amazon EC2Rescue en la instancia para identificar y solucionar los problemas que bloquean una conexión SSH remota a un host de Linux.

Utilización de la consola serie de EC2 para Linux

Utiliza la consola serie de EC2 para Linux para solucionar problemas a nivel del sistema operativo, como problemas de arranque, problemas de configuración de red y problemas de configuración de SSH en los tipos de instancia compatibles.

Requisitos previos:

  • Concede acceso a la consola a nivel de cuenta de AWS.
  • Crea políticas de AWS Identity and Access Management (IAM) que concedan acceso a la consola a tus usuarios de IAM.
    Nota: Cada instancia que utilice la consola serie de EC2 debe tener al menos un usuario de Linux basado en contraseña con acceso sudo.

Para obtener más información, consulta Configurar el acceso a la consola serie de EC2.

Si no hay una cuenta Linux con una contraseña de inicio de sesión configurada, debes ejecutar run ssm-user para restablecer la contraseña de una cuenta con acceso sudo.

Para comprobar que tu configuración no bloquea el acceso SSH, sigue estos pasos:

  1. Utiliza la consola serie de EC2 para conectarte a la instancia de EC2 como usuario de Linux configurado con contraseña.

  2. Si has configurado las reglas de iptables, ejecuta el siguiente comando para agregar una regla en iptables que acepte todas las conexiones SSH en el puerto 22:

    sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
  3. Si utilizas un firewall basado en el sistema operativo, desactívalo. Se recomienda utilizar grupos de seguridad en lugar de un firewall. Para desactivar el firewall basado en el sistema operativo, ejecuta los siguientes comandos en función de tu sistema operativo.
    Importante: Los siguientes comandos borran todas las reglas principales de iptables y eliminan las reglas existentes. Los comandos también agregan una regla que permite las conexiones SSH entrantes y cambian la política predeterminada de la cadena principal a ACCEPT. Esta configuración garantiza que no afectes a la conectividad de red de la instancia al borrar la regla de iptables.
    Distribuciones que usan UFW, como Ubuntu y Debian:

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

    Distribuciones que usan firewalld, como Red Hat Enterprise Linux (RHEL) y CentOS:

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

    Nota: Cuando recuperes el acceso a la instancia, comprueba la configuración del firewall.

  4. Para verificar que SSH se esté ejecutando y que el puerto TCP 22 de SSH esté en estado de escucha, ejecuta el siguiente comando:

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

    Nota: Si el sistema no tiene el comando ss, sustituye ss por el comando netstat heredado. Asegúrate de utilizar la misma sintaxis que el comando anterior.

  5. Para asegurarte de que el TCP Wrapper no bloquee una conexión SSH, ejecuta el siguiente comando:

    if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
    then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
  6. Usa SSH para conectarte a la instancia.

  7. Desconéctate de la sesión de la consola serie de EC2.

Uso de AWS Systems Manager

Requisitos previos: Para usar Session Manager, una capacidad de AWS Systems Manager, la instancia debe ser un nodo administrado. El estado de ping del agente de AWS Systems Manager Agent (SSM Agent) de la instancia debe estar en línea y el rol de IAM adjunto debe tener los permisos AmazonSSMManagedInstanceCore. Asegúrate de cumplir con todos los requisitos previos de Session Manager.

Usa Session Manager para iniciar una sesión y acceder a la instancia.

Uso de un script de datos de usuario

Si no puedes utilizar los métodos de solución de problemas anteriores, utiliza un script de datos de usuario para desactivar el firewall a nivel del sistema operativo y el TCP Wrapper. A continuación, reinicia el servicio sshd.

Importante: Antes de detener e iniciar la instancia, lleva a cabo las siguientes acciones:

Nota: Al detener e iniciar una instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica para enrutar el tráfico externo hacia la instancia en lugar de una dirección IP pública.

Para configurar los datos de usuario de la instancia, sigue estos pasos:

  1. Abre la consola de Amazon EC2.
  2. En el panel de navegación, elige Instancias y, a continuación, selecciona la instancia.
  3. Detén la instancia.
  4. Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
  5. Selecciona Editar datos de usuario y, a continuación, introduce el siguiente script de datos de usuario:
    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 -P INPUT ACCEPT
    iptables -F
    systemctl restart sshd.service || service sshd restart
    if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
    then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
    --//
    Nota: El script de datos de usuario anterior está configurado para ejecutarse en cada reinicio de la instancia. Este método elimina todas las reglas principales de iptables.
  6. Selecciona Guardar.
  7. Usa SSH para conectarte a la instancia.
  8. Cuando recuperes el acceso a la instancia, elimina el script de datos de usuario y, a continuación, comprueba que la configuración del firewall es correcta.

Información relacionada

Error connecting to your instance: Connection timed out

How do I troubleshoot Amazon EC2 instance connection timeout errors from the internet?

¿Cómo puedo solucionar los problemas de conexión a mi instancia de Linux de Amazon EC2 mediante SSH?

¿Por qué mi instancia de EC2 de Linux no es accesible y no supera una o ninguna de las comprobaciones de estado?