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

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

Brève description

Message d'erreur : « ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out ». Ce message d'erreur provient du client SSH. L'erreur indique que le serveur n'a pas répondu au client et que le programme client a abandonné (expiré). Les causes courantes de cette erreur sont les suivantes :

  • Le groupe de sécurité ou l'ACL réseau n'autorise pas l'accès.
  • Il existe un pare-feu sur le système d'exploitation de l'instance.
  • Il existe un pare-feu entre le client et le serveur.
  • L'hôte n'existe pas.

Message d'erreur : « ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused ». Ce message provient d'un hôte distant. Les causes courantes de cette erreur sont les suivantes :

  • L'hôte a atteint l'instance, mais aucun service n'était en écoute sur le port SSH.
  • Un pare-feu a été bloqué et a été configuré pour rejeter le package au lieu de le laisser tomber.

Solution

Vérifiez les points suivants :

Vous pouvez effectuer ces tâches de quatre façons :

Méthode 1 : utiliser EC2 Serial Console

Si vous avez installé EC2 Serial Console pour Linux, vous pouvez l'utiliser pour résoudre les problèmes liés aux types d'instance Nitro pris en charge. La console série permet de résoudre les problèmes de démarrage, ainsi que de configuration réseau et SSH. La console série se connecte à votre instance sans qu'aucune connexion réseau ne soit nécessaire. Vous pouvez accéder à la console série à l'aide de la console Amazon EC2 ou d'AWS Command Line Interface (AWS CLI).

Avant d'utiliser la console série, accordez-lui l'accès au niveau du compte. Créez ensuite des stratégies AWS Identity and Access Management (IAM) accordant l'accès à vos utilisateurs IAM. En outre, chaque instance qui utilise la console série doit inclure au moins un utilisateur avec mot de passe. Si votre instance n'est pas accessible et que vous n'avez pas configuré l'accès à la console série, suivez les instructions de la méthode 2, 3 ou 4. Pour plus d'informations sur la configuration d'EC2 Serial Console pour Linux, consultez Configurer l'accès à EC2 Serial Console.

Remarque : si vous recevez des erreurs pendant l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

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

Remarque : L'installation de l'agent SSM est nécessaire pour utiliser cette méthode. 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 la console AWS Systems Manager.

2.    Démarrez une session.

3.    Ajoutez la ligne supplémentaire suivante en haut de la table de règles, puis redémarrez le service SSH :

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

Vous pouvez également désactiver le pare-feu. Il est recommandé d'utiliser des groupes de sécurité plutôt qu'un pare-feu.

Pour désactiver le pare-feu, utilisez l'un des jeux de commandes suivants, en fonction de votre système d'exploitation :

Ubuntu qui utilise un pare-feu simple

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

Distributions qui utilisent firewalld (par exemple, Red Hat ou CentOS)

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

Remarque : la commande précédente permet de supprimer toutes les règles iptables principales et en ajoute une qui autorise les connexions SSH entrantes. Prenez cela en compte avant d'exécuter ces commandes, car d'autres règles peuvent être nécessaires à votre configuration. 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.    Assurez-vous que SSH est en cours d'exécution et vérifiez que le port TCP SSH (22) est à l’état d'écoute.

$ 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))

Remarque : si votre système ne dispose pas de la commande ss, vous pouvez utiliser la commande netstat héritée avec la même syntaxe que dans l'exemple précédent.

5.    Terminer la session.

6.    Connectez-vous à l'instance en utilisant SSH.

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

Le document d'automatisation AWSSupport-TroubleshootSSH installe l'outil Amazon EC2Rescue sur l'instance. Cet outil identifie les problèmes qui provoquent des erreurs lors de la connexion à une machine Linux via SSH, puis y remédie. Pour en savoir plus, consultez Je reçois des erreurs lorsque je tente de me connecter à mon instance EC2 à l'aide de SSH. Comment utiliser le flux de travail d'automatisation AWSSupport-TroubleshootSSH pour résoudre les problèmes de connexion SSH ?

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

Important

  • Cette procédure nécessite l'arrêt et le redémarrage de 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 Déterminer le type de périphérique racine de votre instance.
  • Si votre instance fait partie d'un groupe Amazon EC2 Auto Scaling 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 peut entraîner sa résiliation. Dans ce scénario, la résiliation de l'instance dépend des paramètres de protection contre la diminution de la taille d'instance pour votre groupe Auto Scaling. Si votre instance fait partie d'un groupe Auto Scaling, supprimez-la temporairement du groupe avant de démarrer 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 de l'instance EC2 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, Instance Settings (Paramètres de l'instance), Edit user data (Modifier les données utilisateur).

6.    Copiez le script de données utilisateur suivant dans la boîte de dialogue 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 règles iptables principales, 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 en utilisant 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 4 : Utilisation d'un script de données utilisateur.

2.    Supprimez le script de données utilisateur dans la boîte de dialogue Edit User Data (Modifier les données utilisateur).