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 ?

Dernière mise à jour : 15/04/2020

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 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 fichier .pub comportant la clé publique SSH, et se trouvant dans le fichier authorized_keys, est incorrect.

Solution

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

Pour obtenir la liste des noms d'utilisateur valides, consultez la section Résolution des problèmes de connexion à votre instance – Affichage du message d'erreur : « Clé refusée par le serveur » ou « Aucune méthode d'authentification prise en charge n'est disponible ».

Vérifiez que les autorisations applicables à l'instance sont correctes et que la clé publique SSH appropriée se trouve dans le fichier authorized_keys

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

Méthode 1 : 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'installation de l'agent SSM est requise pour réaliser cette procédure. Pour plus d'informations sur Session Manager et la liste complète des prérequis, consultez la section Mise en route avec Session Manager.

1.    Ouvrez la console AWS Systems Manager.

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 correctes. 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 du répertoire .ssh (/home/ec2-user/.ssh, par exemple) doit correspondre à (0700/drwx------).
  • L'autorisation du fichier authorized_keys (/home/ec2-user/.ssh/authorized_keys, par exemple) doit correspondre à (0600/-rw------).

Un exemple de la commande ls -ld et du résultat obtenu est illustré ci-dessous. Ici, ec2-user correspond au 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.    Mettez fin à la session.

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

Méthode 2 : 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 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 pour modifier les autorisations SSH et ajouter la clé publique SSH correcte au fichier authorized_keys

Important

  • Cette procédure nécessite l'arrêt et le redémarrage de votre instance EC2. Les données stockées sur cette dernière sont perdues dans une telle situation. Si votre instance en comporte, vous ne pourrez plus y avoir accès. Pour obtenir des informations supplémentaires, consultez la section Identification du type de périphérique racine de votre instance.
  • Si votre instance fait partie d'un groupe Auto Scaling Amazon EC2, ou si votre instance est lancée par des services qui utilisent AWS Auto Scaling, tels qu'Amazon EMR, AWS CloudFormation, AWS Elastic Beanstalk, etc., l'arrêt de l'instance pourrait résilier l'instance. 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 volet de navigation, puis l'instance que vous tentez de lancer.

3.    Arrêtez l'instance.

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

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

--//
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 le résultat, ajoutez la clé appropriée 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: 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
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys
--//

9.    Démarrez l'instance.

Remarque : 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 :

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