Le message d'erreur « Connexion refusée » ou « Délai de connexion expiré » s'affiche lorsque je tente de me connecter à mon instance EC2 via SSH. Comment puis-je résoudre ce problème?

Date de la dernière mise à jour : 22/10/2020

Le message d'erreur « Connexion refusée » ou « Délai de connexion expiré » s'affiche lorsque je tente de me connecter à mon instance Amazon Elastic Compute Cloud (Amazon EC2) via SSH. Comment puis-je résoudre ce problème ?

Brève description

Le message d'erreur « Erreur lors de la connexion à [instance]. Motif : délai de connexion expiré : connecter » fait référence à des problèmes de connectivité, la demande ne parvenant pas à atteindre l'instance et expirant. Cela peut se produire si le service SSH ne s'exécute pas sur l'instance, ou si un pare-feu bloque les accès.

Le message d'erreur « ssh : connexion à l'hôte ec2-X-X-X-X.compute-1.amazonaws.com port 22 : connexion refusée » indique que l'instance a refusé la connexion, ou que le démon du service SSH ne s'exécute pas. Il peut également s'afficher si un pare-feu rejette les accès à l'instance.

Résolution

Vérifiez qu'aucun pare-feu ne bloque la connexion, que le service SSH est en cours d'exécution sur l'instance et que le port SSH TCP 22 est en état d'écoute.

Vous pouvez effectuer ces opérations de trois façons :

Méthode 1 : Utilisation de la fonctionnalité Session Manager d'AWS Systems Manager

Remarque : l'installation de l'agent SSM est requise pour réaliser cette procédure. Pour obtenir des informations supplémentaires sur la fonctionnalité Session Manager et la liste complète des conditions préalables, consultez Configuration de Session Manager.

1.    Ouvrez AWS Systems Manager console.

2.    Démarrez une session.

3.    Pour désactiver les pare-feu et redémarrer le service SSH, exécutez les commandes suivantes.

$ sudo iptables -F
$ sudo service sshd restart

Remarque : la commande précédente permet de supprimer toutes les principales règles iptables, et pas seulement pour le port 22. Une fois que l'accès à votre instance a été rétabli, vérifiez la configuration de votre pare-feu (en vous concentrant, par exemple, sur les valeurs ufw, firewalld et iptables).

4.    Vérifiez que le port SSH TCP 22 est en état d'écoute.

$ 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.    Mettez fin à la session.

6.    Connectez-vous à l'instance à l'aide du service SSH.

Méthode 2 : Exécution du document d'automatisation AWSSupport-TroubleshootSSH

Le document d'automatisation AWSSupport-TroubleshootSSH permet d'installer l'outil Amazon EC2Rescue sur l'instance. Ce dernier identifie ensuite les problèmes qui provoquent des erreurs lors de la connexion à une machine Linux via SSH, puis y remédie. Pour obtenir des informations supplémentaires, consultez la section Comment puis-je utiliser le flux de travail d'automatisation AWSSupport-TroubleshootSSH pour résoudre les problèmes de connexion SSH ?.

Méthode 3 : Utilisation d'un script de données utilisateur

Important

  • Cette procédure nécessite d'arrêter et de redémarrer votre instance EC2. Sachez que si votre instance est basée sur un stockage d'instance ou possède des volumes de stockage d'instance contenant des données, les données sont perdues lorsque l'instance est arrêtée. Pour plus d'informations, consultez la section Identification du type de dispositif racine de votre instance.
  • Si votre instance fait partie d'un groupe Auto Scaling Amazon EC2, ou si elle est lancée par des services qui utilisent AWS Auto Scaling, tels qu'Amazon EMR, AWS CloudFormation ou encore AWS Elastic Beanstalk, l'arrêt de l'instance pourrait entraîner sa résiliation. Dans ce cas, la désactivation dépend des paramètres de protection définis pour votre groupe Auto Scaling. Si votre instance fait partie d'un groupe Auto Scaling, supprimez-la temporairement du groupe avant d'exécuter les étapes de résolution.
  • L'arrêt et le redémarrage de l'instance entraînent la modification de son adresse IP publique. Il est recommandé d'utiliser une adresse IP Elastic, et non une adresse IP publique, lors de l'acheminement du trafic externe vers votre instance.

1.    Consultez les journaux de la console de l'instance EC2. L'entrée suivante apparaît dans les journaux de la console si l'outil ufw est activé.

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

2.    Ouvrez la console Amazon EC2.

3.    Choisissez Instances dans le volet de navigation, puis l'instance à laquelle vous tentez de vous connecter.

4.    Arrêtez l'instance.

5.    Choisissez Actions, Paramètres de l'instance, puis Afficher/Modifier les données utilisateur.

6.    Copiez le script de données utilisateur suivant dans la boîte de dialogue Afficher/Modifier les données utilisateur, puis choisissez Enregistrer.

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

Remarque : la commande précédente permet de supprimer toutes les principales règles iptables, et pas seulement pour le port 22. Une fois que l'accès à votre instance a été rétabli, vérifiez la configuration de votre pare-feu (en vous concentrant, par exemple, sur les valeurs ufw, firewalld et iptables).

7.    Connectez-vous à l'instance à l'aide du service SSH.

8.    Le script de données utilisateur précédent s'exécute à chaque redémarrage de l'instance. Une fois que l'accès à votre instance a été rétabli, supprimez-le.

Pour supprimer le script de données utilisateur :

1.    Effectuez les étapes 1 à 4 de la section Méthode 3 : Utiliser un script de données utilisateur.

2.    Supprimez le script de données utilisateur dans la boîte de dialogue Afficher/Modifier les données utilisateur.