Le message d'erreur« Autorisation refusée (publickey) » ou « Échec de l'authentification, autorisation refusée » s'affiche lorsque je tente d'accéder à mon instance EC2. Comment puis-je résoudre ce problème ?

Date de la dernière mise à jour : 04/05/2021

Le message d'erreur« Autorisation refusée (publickey) » ou « Échec de l'authentification, autorisation refusée » s'affiche lors de l'accès à mon instance Amazon Elastic Compute Cloud (Amazon EC2). Comment puis-je résoudre ce problème ?

Brève description

Le message d'erreur« Autorisation refusée (publickey) » ou « Échec de l'authentification, autorisation refusée » peut s'afficher si :

  • vous tentez de vous connecter à l'aide d'un nom d'utilisateur incorrect pour votre AMI ;
  • Les autorisations applicables à l'instance sont incorrectes.
  • Le mauvais fichier de clé publique SSH (.pub) se trouve dans le fichier authorized_keys.

Résolution

Vérifiez que le nom d'utilisateur associé à votre AMI est correct

Vérifiez que les autorisations de l'instance sont correctes et que la bonne clé publique SSH se trouve dans le fichier authorized_keys

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

Méthode 1 : utilisation d'EC2 Serial Console

Si vous avez activé EC2 Serial Console pour Linux, vous pouvez l'utiliser pour dépanner les types d'instance Nitro pris en charge. EC2 Serial Console vous aide à résoudre les problèmes de démarrage, de configuration réseau et de configuration SSH. EC2 Serial Console se connecte à votre instance sans qu'aucune connexion réseau ne soit nécessaire. Vous pouvez accéder à EC2 Serial Console à l'aide de la console Amazon EC2 ou de l'interface de ligne de commande AWS (AWS CLI).

Avant d'utiliser EC2 Serial Console, 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 EC2 Serial Console 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 à EC2 Serial Console, 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 : en cas d'erreurs lors de l'exécution des commandes depuis AWS CLI, assurez-vous d'utiliser la version la plus récente.

Méthode 2 : utilisation de la fonctionnalité Session Manager d'AWS Systems Manager pour vous connecter à l'instance et effectuer les modifications

Cette méthode permet de mettre à jour les autorisations et d'ajouter votre clé publique SSH au fichier authorized_keys.

Remarque : 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 AWS Systems Manager console.

2.    Démarrez une session.

3.    Utilisez la commande ls -ld pour vous assurer que les autorisations des fichiers se trouvant dans le répertoire de base sont les bonnes. Les autorisations appropriées sont répertoriées ci-dessous :

  • Le répertoire de base Linux (/home, par exemple) doit correspondre à (0755/drwxr-xr-x).
  • Le répertoire de base de l'utilisateur (/home/ec2-user/, par exemple) doit correspondre à (0700/drwx------).
  • L'autorisation de répertoire .ssh, (/home/ec2-user/.ssh, par exemple), doit correspondre à (0700/drwx—).
  • L'autorisation de fichier authorized_keys (/home/ec2-user/.ssh/authorized_keys, par exemple) doit correspondre à (0600/-rw------).

Voici un exemple de la commande ls -ld et le résultat obtenu. Dans cet exemple, ec2-user est le nom d'utilisateur. Modifiez le nom d'utilisateur en fonction de votre AMI spécifique.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    Sur votre ordinateur local, vérifiez la clé publique SSH.

5.    Si la signature de la clé publique SSH n'est pas présente dans le résultat, mettez à jour le fichier authorized_keys pour autoriser votre clé SSH. Dans l'exemple suivant, remplacez l'exemple de clé par votre clé publique SSH.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    Pour modifier les autorisations, exécutez les commandes suivantes sur votre instance EC2.

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

7.    Terminer la session.

8.    Connectez-vous à l'instance à l'aide de SSH.

Méthode 3 : exécution de la procédure AWSSupport-TroubleshootSSH Automation

La procédure AWSSupport-TroubleshootSSH permet d'installer l'outil Amazon EC2Rescue. Après son installation, ce dernier identifie les problèmes qui provoquent des erreurs lors de la connexion à une machine Linux via SSH, puis y remédie. Pour plus d'informations, consultez la section 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 pour réparer les autorisations SSH et ajouter la bonne clé publique SSH au fichier authorized_keys

Important

  • 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 Déterminer le type de périphérique racine de votre instance.
  • Si votre instance fait partie d'un groupe Amazon EC2 Auto Scaling, l'arrêt de l'instance peut la résilier. Les instances lancées avec Amazon EMR, AWS CloudFormation ou AWS Elastic Beanstalk peuvent faire partie d'un groupe AWS AutoScaling. 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 de ce dernier avant de suivre 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.    Ouvrez la console Amazon EC2.

2.    Choisissez Instances dans le panneau de navigation, puis l'instance que vous tentez de lancer.

3.    Arrêtez l'instance.

4.    Choisissez Actions, Paramètres de l'instance, Modifier les données utilisateur.

5.    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
chown root:root /home
chmod 755 /home
chown ec2-user:ec2-user /home/ec2-user -R
chmod 700 /home/ec2-user /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
--//

6.    Sur votre ordinateur local, vérifiez la clé publique SSH.

7.    Si la signature de la clé publique SSH n'est pas présente dans la sortie, ajoutez la clé correcte au script de données utilisateur que vous avez créé à l'étape 5. Si la signature correspond, vous pouvez ignorer cette étape. Ajoutez la clé publique SSH au script de données utilisateur, comme illustré dans l'exemple suivant. Remplacez l'exemple de clé par votre clé publique SSH.

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
chown root:root /home
chmod 755 /home
chmod 700 /home/ec2-user /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys
chown ec2-user:ec2-user /home/ec2-user -R
--//

8.    Démarrez l'instance.

Remarque : le script de données utilisateur précédent s'exécute à chaque redémarrage de l'instance. Après avoir récupéré l'accès à votre instance, supprimez le script de données utilisateur.

Pour supprimer le script de données utilisateur :

  • Exécutez les étapes 1 à 4 de cette section.
  • Supprimez le script de données utilisateur dans la boîte de dialogue Modifier les données utilisateur.