Se muestran errores de «Conexión rechazada» o «Tiempo de espera de conexión agotado» cuando intento conectarme a mi instancia de EC2 con SSH. ¿Cómo lo puedo solucionar?

10 minutos de lectura
0

Se muestran errores de «Conexión rechazada» o «Tiempo de espera de conexión agotado» al intentar conectarme a mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) mediante SSH.

Breve descripción

Mensaje de error: «ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out». Este mensaje de error proviene del cliente SSH. El error indica que el servidor no ha respondido al cliente y que el programa cliente ha desistido (se ha agotado el tiempo de espera). A continuación se enumeran las causas habituales de este error:

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

Mensaje de error: «ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused». Este mensaje procede remotamente de un host. A continuación se enumeran las causas habituales de este error:

  • El host ha llegado a la instancia, pero no había ningún servicio a la escucha en el puerto SSH.
  • Un firewall bloqueó el paquete y estaba configurado para rechazarlo en lugar de ignorarlo.

Solución

Error «Tiempo de espera de conexión agotado»

En el caso del error «Tiempo de espera de conexión agotado», compruebe lo siguiente:

Nota: Los dos últimos pasos de comprobación requieren acceso en el sistema operativo de la instancia.

Error «Conexión rechazada»

En el caso del error «Conexión rechazada», compruebe lo siguiente:

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

Nota: Ambos pasos de comprobación requieren acceso en el sistema operativo de la instancia.

Si la instancia supera ambas comprobaciones de estado, utilice uno de los cuatro métodos siguientes con su configuración

  • Método 1: Utilización de la consola serie de EC2 para Linux.
  • Método 2: Utilización del Administrador de sesiones de AWS Systems Manager.
  • Método 3: Ejecución del runbook de automatización AWSSupport-TroubleshootSSH.
  • Método 4: Utilización de un script de datos de usuario.

Método 1: Utilización de la consola serie de EC2 para Linux

Si se ha configurado la consola serie de EC2 para Linux, se puede utilizar para solucionar problemas en el nivel del sistema operativo de los tipos de instancia integradas en Nitro compatibles. La consola serie permite solucionar problemas de arranque, configuración de red y configuración de SSH. Se puede acceder a la consola serie mediante la consola de Amazon EC2 o la Interfaz de la línea de comandos de AWS (AWS CLI).

Antes de utilizar la consola serie, concédale acceso en el nivel de cuenta. A continuación, cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a sus usuarios de IAM.

Nota: Cada instancia que utilice la consola serie debe incluir al menos un usuario Linux con contraseña y acceso sudo.

Para más información sobre la configuración de la consola serie de EC2 para Linux, consulte Configuración del acceso a la consola serie de EC2. Si no hay una cuenta Linux con una contraseña de inicio de sesión configurada, debe ejecutar ssm-user para restablecer la contraseña de una cuenta con acceso sudo. Para obtener más información sobre la ejecución de comandos ssm-user, consulte Managing ssm-user sudo account permissions on Linux and macOS.

Tras la configuración, conéctese a la instancia de EC2 a través de la consola serie de EC2 mediante un usuario Linux configurado con contraseña.

A continuación, ejecute los siguientes comandos. Estos comandos comprueban que el firewall del sistema operativo o el TCP Wrapper no estén bloqueando las conexiones SSH. Los comandos también comprueban que el servicio sshd esté funcionando y a la escucha en el puerto 22.

1.    Si tiene reglas iptables configuradas, ejecute el siguiente comando para añadir una regla en iptables que acepte todas las conexiones SSH en el puerto 22 de forma predeterminada:

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

Dado que se recomienda utilizar grupos de seguridad en lugar de un firewall basado en el sistema operativo, el firewall puede desactivarse por completo. Para desactivar el firewall basado en el sistema operativo, utilice uno de los siguientes conjuntos de comandos, en función de su sistema operativo:

Importante: Los siguientes comandos eliminan todas las reglas principales de iptables. También añaden una regla que permite las conexiones SSH de entrada. Además, cambian la política predeterminada de la cadena principal a ACCEPT para que la eliminación de la regla iptables no afecte a la conectividad de red de la instancia. Como estos comandos eliminan todas las reglas iptables principales, también eliminan cualquier regla existente.

Distribuciones que utilizan UFW (Ubuntu, Debian)

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

Distribuciones que utilizan firewalld (Red Hat, CentOS)

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

Nota: Una vez que haya recuperado el acceso a su instancia, revise la configuración de su firewall (UFW, firewalld, iptables).

2.    Compruebe que SSH se esté ejecutando y que el puerto TCP SSH (22) esté a la escucha:

$ 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 su sistema no dispone del comando ss, puede utilizar el comando netstat heredado con la misma sintaxis que se muestra en el ejemplo anterior.

3.    Asegúrese de que el TCP Wrapper no esté bloqueando una conexión SSH:

$ 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

4.    A continuación, conéctese a la instancia mediante SSH.

5.    Desconecte la sesión de la consola serie de EC2 si ya no es necesaria.

Método 2: Utilización del Administrador de sesiones de AWS Systems Manager

Nota: Para usar este método, la instancia debe ser una instancia administrada por SSM y el estado de ping de su agente SSM debe ser En línea. Para obtener más información sobre el Administrador de sesiones y una lista completa de requisitos previos, consulte Setting up Session Manager.

Para confirmar que el firewall o el TCP Wrapper no estén bloqueando las conexiones SSH y que el servicio sshd esté funcionando y a la escucha en el puerto 22:

1.    Abra AWS Systems Manager.

2.    Inicie una sesión para la instancia mediante el Administrador de sesiones.

3.    Siga los pasos 1 a 4 del Método 1: Utilice la consola serie de EC2 para Linux.

4.    Cierre la sesión del Administrador de sesiones si ya no es necesaria.

Método 3: Ejecución del runbook AWSSupport-TroubleshootSSH

El runbook de automatización AWSSupport-TroubleshootSSH instala la herramienta Amazon EC2Rescue para Linux en la instancia. Esta herramienta comprueba e intenta solucionar los problemas que impiden la conexión remota de un host Linux a través de SSH.

Para ejecutar el runbook AWSSupport-TroubleshootSSH:

1.    Abra la página AWSSupport-TroubleshootSSH.

2.    Seleccione Run this Automation (consola).

Para obtener más información, consulte Cuando intento conectarme a mi instancia de EC2 mediante SSH, se muestran mensajes de error. ¿Cómo puedo utilizar el flujo de trabajo de automatización AWSSupport-TroubleshootSSH para solucionar problemas de conexión de SSH?

Método 4: Utilización de un script de datos de usuario

Si ninguno de los métodos descritos es el adecuado para su entorno, utilice un script de datos de usuario de EC2. El script de datos de usuario de EC2 desactiva el firewall en el sistema operativo y el TCP Wrapper y, a continuación, reinicia el servicio sshd.

Importante:

  • Este procedimiento requiere detener e iniciar la instancia de EC2. Si la instancia tiene algún dato almacenado en los volúmenes de almacén de instancias, esos datos se eliminarán tras detener la instancia.
  • Si la instancia forma parte de un grupo de Amazon EC2 Auto Scaling, la terminación de la instancia también podría detener las instancias dentro del grupo de escalamiento automático.
  • Si la instancia la han iniciado servicios que utilizan AWS Auto Scaling, la terminación de la instancia también podría detener las instancias dentro del grupo de escalamiento automático.
  • La terminación de la instancia depende de la configuración de la protección del escalamiento de instancias del grupo de escalamiento automático. Si la instancia forma parte de un grupo de escalamiento automático, elimine temporalmente la instancia del grupo de escalamiento automático antes de iniciar los pasos para solucionar el problema.
  • Al detener e iniciar la instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica en lugar de una dirección IP pública para enrutar el tráfico externo hacia la instancia.

Siga estos pasos para configurar los datos de usuario para la instancia:

1.    Abra la consola de Amazon EC2.

2.    Elija Instancias en el panel de navegación y, a continuación, seleccione la instancia a la que desea conectarse.

3.    Detenga la instancia.

4.    Elija Acciones, Configuración de la instancia, Editar datos de usuario.

5.    Copie el siguiente script de datos de usuario en el cuadro de diálogo Editar datos de usuario y, a continuación, seleccione 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 -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
--//

6.    Conéctese a la instancia mediante SSH.

7.    El script de datos de usuario anterior está configurado para ejecutarse cada vez que se reinicie la instancia. Tras recuperar el acceso a la instancia, elimine el script de datos de usuario.

Nota: El comando anterior elimina todas las reglas iptables principales. Tras recuperar el acceso a la instancia, revise la configuración del firewall para comprobar que sea correcta (por ejemplo, UFW, firewalld, iptables).

Para eliminar los datos del usuario:

1.    Complete los pasos 1 a 4 de la sección Método 4: Utilización de un script de datos de usuario.

2.    Elimine el script de datos de usuario del cuadro de diálogo Editar datos de usuario.

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 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?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año