Résoudre les erreurs liées à SSH


Ce document décrit les erreurs courantes que vous pouvez rencontrer lorsque vous vous connectez à des instances de machines virtuelles (VM) à l'aide de SSH, les solutions pour y remédier et les méthodes de diagnostic des échecs de connexions SSH.

Outil de dépannage SSH

Utilisez l'outil de dépannage SSH pour déterminer la raison de l'échec de la connexion SSH. L'outil de dépannage effectue les tests suivants pour rechercher la cause des échecs de connexion SSH :

  • Tests des autorisations des utilisateurs : vérifient si vous disposez des autorisations IAM requises pour vous connecter à la VM à l'aide de SSH.
  • Tests de connectivité réseau : vérifient si la VM est connectée au réseau.
  • Tests de l'état de l'instance de VM : vérifient l'état du processeur de la VM pour savoir si la VM est en cours d'exécution.
  • Tests des paramètres VPC : vérifient le port SSH par défaut.

Exécuter l'outil de dépannage

Vous pouvez utiliser la console Google Cloud ou Google Cloud CLI pour identifier les problèmes de mise en réseau et les erreurs d'autorisation utilisateur pouvant entraîner l'échec des connexions SSH.

Console

Après une connexion SSH, vous avez la possibilité de relancer la connexion ou de résoudre les problèmes avec l'outil de dépannage SSH dans le navigateur.

Pour exécuter l'outil de dépannage, cliquez sur Résoudre les problèmes.

Lancement de l'outil de dépannage SSH.

gcloud

Exécutez l'outil de dépannage à l'aide de la commande gcloud compute ssh :

gcloud compute ssh VM_NAME \
    --troubleshoot

Remplacez VM_NAME par le nom de la VM à laquelle vous ne parvenez pas à vous connecter.

L'outil vous invite à fournir l'autorisation permettant d'effectuer les tests de dépannage.

Étudier les résultats

Après avoir exécuté l'outil de dépannage, procédez comme suit :

  1. Examinez les résultats du test pour comprendre pourquoi la connexion SSH de la VM ne fonctionne pas.
  2. Résolvez les connexions SSH en réalisant les mesures correctives fournies par l'outil.
  3. Essayez de vous reconnecter à la VM.

    Si la connexion échoue, essayez de résoudre les problèmes manuellement en suivant les étapes ci-après :

Erreurs courantes liées à SSH

Voici des exemples d'erreurs courantes que vous pouvez rencontrer lorsque vous utilisez SSH pour vous connecter à des VM Compute Engine.

Erreurs liées à SSH dans le navigateur

Erreur d'autorisation 401

L'erreur suivante peut se produire lorsque vous vous connectez à votre VM à l'aide de la fonctionnalité SSH dans le navigateur depuis la console Google Cloud:

Unauthorized
Error 401

Cette erreur se produit si votre utilisateur fait partie d'une organisation gérée à partir de Google Workspace et qu'une restriction active dans la règle d'espace de travail empêche les utilisateurs d'accéder à SSH dans le navigateur et à la console série dans Google Cloud.

Pour résoudre ce problème, demandez à un administrateur Google Workspace d'effectuer les opérations suivantes:

  1. Vérifiez que Google Cloud est activé pour l'organisation.

    Si Google Cloud est désactivé, activez-le, puis réessayez d'établir la connexion.

  2. Vérifiez que les services qui ne sont pas contrôlés individuellement sont activés.

    Si ces services sont désactivés, activez-les et réessayez d'établir la connexion.

Si le problème persiste après l'activation des paramètres Google Cloud dans Google Workspace, procédez comme suit:

  1. Capturez le trafic réseau dans un fichier HAR (HTTP Archive Format) à partir du démarrage de la connexion SSH "SSH dans le navigateur".

  2. Créez une demande Cloud Customer Care et joignez le fichier HAR.

Connexion au serveur impossible. Nouvelle tentative...

L'erreur suivante peut se produire lorsque vous démarrez une session SSH :

Could not connect, retrying ...

Impossible de se connecter au serveur. Nouvelle tentative en cours…

Pour résoudre ce problème, procédez comme suit :

  1. Une fois le démarrage de la VM terminé, réessayez la connexion. Si la connexion échoue, vérifiez que la VM n'a pas démarré en mode d'urgence en exécutant la commande suivante :

    gcloud compute instances get-serial-port-output VM_NAME \
    | grep "emergency mode"
    

    Si la VM démarre en mode d'urgence, résolvez les problèmes liés au processus de démarrage de la VM pour identifier le point de défaillance dans le processus de démarrage.

  2. Vérifiez que le service google-guest-agent.service est en cours d'exécution en exécutant la commande suivante dans la console série.

    systemctl status google-guest-agent.service
    

    Si le service est désactivé, activez-le et démarrez-le en exécutant les commandes suivantes :

    systemctl enable google-guest-agent.service
    systemctl start google-guest-agent.service
    
  3. Vérifiez que les scripts de l'agent Google Linux sont installés et en cours d'exécution. Pour en savoir plus, consultez la section Déterminer l'état de l'agent Google. Si l'agent Google Linux n'est pas installé, réinstallez-le.

  4. Vérifiez que vous disposez des rôles requis pour vous connecter à la VM. Si votre VM utilise OS Login, consultez la section Attribuer un rôle IAM OS Login. Si la VM n'utilise pas OS Login, vous devez disposer du rôle d'administrateur d'instances Compute ou du rôle d'utilisateur du compte de service (si la VM est configurée pour s'exécuter en tant que compte de service). Les rôles sont nécessaires pour mettre à jour les métadonnées de clés SSH de l'instance ou du projet.

  5. Vérifiez qu'une règle de pare-feu autorise l'accès SSH en exécutant la commande suivante :

    gcloud compute firewall-rules list | grep "tcp:22"
    
  6. Vérifiez qu'il existe une route par défaut vers Internet (ou vers l'hôte bastion). Pour en savoir plus, consultez la section Vérifier les routes.

  7. Assurez-vous que le volume racine ne manque pas d'espace disque. Pour en savoir plus, consultez la section Résoudre les problèmes liés aux disques saturés et au redimensionnement des disques.

  8. Assurez-vous que la VM ne manque pas de mémoire en exécutant la commande suivante :

    gcloud compute instances get-serial-port-output instance-name \
    | grep "Out of memory: Kill process" - e "Kill process" -e "Memory cgroup out of memory" -e "oom"
    

    Si la VM est à court de mémoire, connectez-vous à la console série pour résoudre le problème.

Erreurs Linux

Autorisation refusée (clé publique)

L'erreur suivante peut se produire lorsque vous vous connectez à votre VM :

USERNAME@VM_EXTERNAL_IP: Permission denied (publickey).

Cette erreur peut se produire pour plusieurs raisons. Voici quelques-unes des causes les plus courantes de cette erreur :

  • Vous avez utilisé une clé SSH stockée dans les métadonnées pour vous connecter à une VM sur laquelle OS Login est activé. Si OS Login est activé sur votre projet, votre VM n'accepte pas les clés SSH stockées dans les métadonnées. Si vous ne savez pas si OS Login est activé, consultez la section Vérifier si OS Login est configuré.

    Pour résoudre ce problème, essayez l'une des solutions suivantes :

  • Vous avez utilisé une clé SSH stockée dans un profil OS Login pour vous connecter à une VM sur laquelle OS Login n'est pas activé. Si vous désactivez OS Login, votre VM n'accepte pas les clés SSH stockées dans votre profil OS Login. Si vous ne savez pas si OS Login est activé, consultez la section Vérifier si OS Login est configuré.

    Pour résoudre ce problème, essayez l'une des solutions suivantes :

  • OS Login est activé sur la VM, mais vous ne disposez pas des autorisations IAM suffisantes pour utiliser OS Login. Pour vous connecter à une VM sur laquelle OS Login est activé, vous devez disposer des autorisations requises pour OS Login. Si vous ne savez pas si OS Login est activé, consultez la section Vérifier si OS Login est configuré.

    Pour résoudre ce problème, accordez les rôles IAM OS Login requis.

  • Votre clé a expiré et Compute Engine a supprimé votre fichier ~/.ssh/authorized_keys. Si vous avez ajouté manuellement des clés SSH à votre VM, puis que vous vous êtes connecté à cette VM à l'aide de Google Cloud Console, Compute Engine a créé une paire de clés pour la connexion. Lorsque la nouvelle paire de clés a expiré, Compute Engine a supprimé le fichier ~/.ssh/authorized_keys de la VM, qui comprenait la clé SSH ajoutée manuellement.

    Pour résoudre ce problème, essayez l'une des solutions suivantes :

  • Vous vous êtes connecté à l'aide d'un outil tiers et votre commande SSH est mal configurée. Si vous vous connectez à l'aide de la commande ssh, mais que vous ne spécifiez pas de chemin d'accès à la clé privée, ou un chemin incorrect, votre VM refuse la connexion.

    Pour résoudre ce problème, essayez l'une des solutions suivantes :

    • Exécutez la commande suivante :
      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Remplacez les éléments suivants :
      • PATH_TO_PRIVATE_KEY : chemin d'accès au fichier de clé SSH privée.
      • USERNAME : nom de l'utilisateur qui se connecte à l'instance. Si vous gérez vos clés SSH dans les métadonnées, le nom d'utilisateur est celui que vous avez spécifié lorsque vous avez créé la clé SSH. Pour les comptes OS Login, le nom d'utilisateur est défini dans votre profil Google.
      • EXTERNAL_IP : adresse IP externe de votre VM.
    • Connectez-vous à votre VM à l'aide de Google Cloud Console ou de Google Cloud CLI. Lorsque vous utilisez ces outils pour vous connecter, Compute Engine gère la création des clés à votre place. Pour en savoir plus, consultez la page Se connecter à des VM.
  • L'environnement invité de votre VM n'est pas en cours d'exécution. Si vous vous connectez pour la première fois à votre VM et que l'environnement invité n'est pas en cours d'exécution, la VM peut refuser votre requête de connexion SSH.

    Pour résoudre ce problème, procédez comme suit :

    1. Redémarrez la VM.
    2. Dans la console Google Cloud, inspectez les journaux de démarrage du système dans la sortie du port série pour déterminer si l'environnement invité est en cours d'exécution. Pour en savoir plus, consultez la section Valider l'environnement invité.
    3. Si l'environnement invité n'est pas en cours d'exécution, installez-le manuellement en clonant le disque de démarrage de la VM et en utilisant un script de démarrage.
  • Le daemon OpenSSH (sshd) ne s'exécute pas ou n'est pas configuré correctement. sshd fournit un accès à distance sécurisé au système via le protocole SSH. S'il est mal configuré ou ne s'exécute pas, vous ne pouvez pas vous connecter à votre VM via SSH.

    Pour résoudre ce problème, essayez une ou plusieurs des solutions suivantes :

    • Consultez le guide de l'utilisateur de votre système d'exploitation pour vous assurer que le fichier sshd_config est correctement configuré.

    • Assurez-vous de disposer des paramètres de propriété et d'autorisation requis pour les éléments suivants :

      • Les répertoires $HOME et $HOME/.ssh
      • Fichier $HOME/.ssh/authorized_keys

      Propriété

      L'environnement invité stocke les clés publiques SSH autorisées dans le fichier $HOME/.ssh/authorized_keys. Le propriétaire des répertoires $HOME et $HOME/.ssh et du fichier $HOME/.ssh/authorized_keys doit être l'utilisateur qui se connecte à la VM.

      Autorisations

      L'environnement invité nécessite les autorisations Linux suivantes :

      Chemin Autorisations
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Pour savoir quelle option est l'autorisation par défaut appropriée pour votre répertoire $HOME, reportez-vous à la documentation officielle correspondant à votre distribution Linux.


      Vous pouvez également créer une VM basée sur la même image et vérifier ses autorisations par défaut pour $HOME.

      Pour en savoir plus sur la modification des autorisations et des droits de propriété, consultez les sections chmod et chown.

    • Redémarrez sshd en exécutant la commande suivante :

      systemctl restart sshd.service
      

      Vérifiez si l'état contient des erreurs en exécutant la commande suivante :

      systemctl status sshd.service
      

      Le résultat de l'état peut contenir des informations telles que le code de sortie, le motif de l'échec, etc. Ces informations peuvent vous permettre de résoudre les problèmes.

  • Le disque de démarrage de la VM est saturé. Lorsqu'une connexion SSH est établie, l'environnement invité ajoute la clé SSH publique de la session au fichier ~/.ssh/authorized_keys. Si le disque est saturé, la connexion échoue.

    Pour résoudre ce problème, essayez une ou plusieurs des solutions suivantes :

    • Vérifiez que le disque de démarrage est bien saturé en utilisant le débogage avec la console série pour identifier no space left errors.
    • Redimensionnez le disque.
    • Si vous savez quels fichiers consomment l'espace disque, créez un script de démarrage qui supprime les fichiers inutiles et libère de l'espace. Une fois que la VM a démarré et que vous êtes connecté, supprimez les métadonnées startup-script.
  • La propriété de $HOME, $HOME/.ssh ou $HOME/.ssh/authorized_keys, ou les autorisations qui y sont associées, sont incorrectes.

    Propriété

    L'environnement invité stocke les clés publiques SSH autorisées dans le fichier $HOME/.ssh/authorized_keys. Le propriétaire des répertoires $HOME et $HOME/.ssh et du fichier $HOME/.ssh/authorized_keys doit être l'utilisateur qui se connecte à la VM.

    Autorisations

    L'environnement invité nécessite les autorisations Linux suivantes :

    Chemin Autorisations
    /home 0755
    $HOME 0700 ou 0750 ou 0755 *
    $HOME/.ssh 0700
    $HOME/.ssh/authorized_keys 0600

    * Pour savoir quelle option est l'autorisation par défaut appropriée pour votre répertoire $HOME, reportez-vous à la documentation officielle correspondant à votre distribution Linux.


    Vous pouvez également créer une VM basée sur la même image et vérifier ses autorisations par défaut pour $HOME.

    Pour en savoir plus sur la modification des autorisations et des droits de propriété, consultez les sections chmod et chown.

Échec de la connexion

Les erreurs suivantes peuvent se produire lorsque vous vous connectez à votre VM depuis la console Google Cloud, gcloud CLI, un hôte bastion ou un client local :

  • La console Google Cloud :

    Connection Failed
    
    We are unable to connect to the VM on port 22.
    
  • gcloud CLI :

    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
    
  • Un hôte bastion ou un client local :

    port 22: Connection timed out.
    
    port 22: Connection refused
    

Ces erreurs peuvent se produire pour plusieurs raisons. Voici quelques-unes des causes d'erreur les plus courantes :

  • La VM démarre et sshd n'est pas encore en cours d'exécution. Vous ne pouvez pas vous connecter à une VM avant qu'elle ne soit en cours d'exécution.

    Pour résoudre ce problème, attendez que le démarrage de la VM soit terminé puis réessayez de vous connecter.

  • sshd s'exécute sur un port personnalisé. Si vous avez configuré sshd pour qu'il s'exécute sur un port autre que le port 22, vous ne pourrez pas vous connecter à votre VM.

    Pour résoudre ce problème, créez une règle de pare-feu personnalisée autorisant le trafic tcp sur le port sur lequel votre sshd s'exécute à l'aide de la commande suivante :

    gcloud compute firewall-rules create FIREWALL_NAME \
      --allow tcp:PORT_NUMBER
    

    Pour plus d'informations sur la création de règles de pare-feu personnalisées, consultez la section Créer des règles de pare-feu.

  • La règle de pare-feu SSH est manquante ou n'autorise pas le trafic provenant d'IAP ou de l'Internet public. Les connexions SSH sont refusées si les règles de pare-feu n'autorisent pas les connexions provenant d'IAP ou du trafic entrant TCP pour la plage d'adresses IP 0.0.0.0/0.

    Pour résoudre ce problème, effectuez l'une des opérations suivantes :

    • Si vous utilisez Identity-Aware Proxy (IAP) pour le transfert TCP, mettez à jour votre règle de pare-feu personnalisée pour accepter le trafic provenant d'IAP, puis vérifiez vos autorisations IAM.

      1. Mettez à jour votre règle de pare-feu personnalisée pour autoriser le trafic provenant de 35.235.240.0/20, la plage d'adresses IP utilisée par IAP pour le transfert TCP. Pour plus d'informations, consultez la section Créer une règle de pare-feu.
      2. Accordez des autorisations pour utiliser le transfert TCP IAP, si ce n'est pas déjà fait.
    • Si vous n'utilisez pas IAP, mettez à jour votre règle de pare-feu personnalisée pour autoriser le trafic SSH entrant.

      1. Mettez à jour votre règle de pare-feu personnalisée pour autoriser les connexions SSH d'entrée vers les VM.
  • La connexion SSH a échoué après la mise à niveau du noyau de la VM. Une VM peut subir une panique du noyau après une mise à jour du noyau, ce qui la rend inaccessible.

    Pour résoudre ce problème, procédez comme suit :

    1. Installez le disque sur une autre VM.
    2. Mettez à jour le fichier grub.cfg pour utiliser la version précédente du noyau.
    3. Rattachez le disque à la VM qui ne répond pas.
    4. Vérifiez que l'état de la VM est bien RUNNING en utilisant la commande gcloud compute instances describe.
    5. Réinstallez le noyau.
    6. Redémarrez la VM.

    Si vous avez créé un instantané du disque de démarrage avant de mettre à niveau la VM, vous pouvez également utiliser l'instantané pour créer une VM.

  • Le daemon OpenSSH (sshd) ne s'exécute pas ou n'est pas configuré correctement. sshd fournit un accès à distance sécurisé au système via le protocole SSH. S'il est mal configuré ou ne s'exécute pas, vous ne pouvez pas vous connecter à votre VM via SSH.

    Pour résoudre ce problème, essayez une ou plusieurs des solutions suivantes :

    • Consultez le guide de l'utilisateur de votre système d'exploitation pour vous assurer que le fichier sshd_config est correctement configuré.

    • Assurez-vous de disposer des paramètres de propriété et d'autorisation requis pour les éléments suivants :

      • Les répertoires $HOME et $HOME/.ssh
      • Fichier $HOME/.ssh/authorized_keys

      Propriété

      L'environnement invité stocke les clés publiques SSH autorisées dans le fichier $HOME/.ssh/authorized_keys. Le propriétaire des répertoires $HOME et $HOME/.ssh et du fichier $HOME/.ssh/authorized_keys doit être l'utilisateur qui se connecte à la VM.

      Autorisations

      L'environnement invité nécessite les autorisations Linux suivantes :

      Chemin Autorisations
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Pour savoir quelle option est l'autorisation par défaut appropriée pour votre répertoire $HOME, reportez-vous à la documentation officielle correspondant à votre distribution Linux.


      Vous pouvez également créer une VM basée sur la même image et vérifier ses autorisations par défaut pour $HOME.

      Pour en savoir plus sur la modification des autorisations et des droits de propriété, consultez les sections chmod et chown.

    • Redémarrez sshd en exécutant la commande suivante :

      systemctl restart sshd.service
      

      Vérifiez si l'état contient des erreurs en exécutant la commande suivante :

      systemctl status sshd.service
      

      Le résultat de l'état peut contenir des informations telles que le code de sortie, le motif de l'échec, etc. Ces informations peuvent vous permettre de résoudre les problèmes.

  • La VM ne démarre pas et vous ne pouvez pas vous connecter via SSH ou la console série. Si la VM est inaccessible, votre système d'exploitation est peut-être corrompu. Si le disque de démarrage ne démarre pas, vous pouvez diagnostiquer le problème. Si vous souhaitez récupérer la VM corrompue et récupérer les données, consultez la section Récupérer une VM corrompue ou un disque de démarrage complet.

  • La VM démarre en mode de maintenance. Lors du démarrage en mode de maintenance, la VM n'accepte pas les connexions SSH, mais vous pouvez vous connecter à la console série de la VM et vous connecter en tant qu'utilisateur racine.

    Pour résoudre ce problème, procédez comme suit :

    1. Si vous n'avez pas défini de mot de passe racine pour la VM, utilisez un script de démarrage des métadonnées pour exécuter la commande suivante au démarrage :

      echo "root:NEW_PASSWORD" | chpasswd

      Remplacez NEW_PASSWORD` par le mot de passe de votre choix.

    2. Redémarrez la VM.

    3. Connectez-vous à la console série de la VM, puis connectez-vous en tant qu'utilisateur racine.

Erreur inattendue

L'erreur suivante peut se produire lorsque vous essayez de vous connecter à une VM Linux :

Connection Failed
You cannot connect to the VM instance because of an unexpected error. Wait a few moments and then try again.

Ce problème peut survenir pour plusieurs raisons. Voici quelques causes courantes de cette erreur :

  • Le daemon OpenSSH (sshd) ne s'exécute pas ou n'est pas configuré correctement. sshd fournit un accès à distance sécurisé au système via le protocole SSH. S'il est mal configuré ou ne s'exécute pas, vous ne pouvez pas vous connecter à votre VM via SSH.

    Pour résoudre ce problème, essayez une ou plusieurs des solutions suivantes :

    • Consultez le guide de l'utilisateur de votre système d'exploitation pour vous assurer que le fichier sshd_config est correctement configuré.

    • Assurez-vous de disposer des paramètres de propriété et d'autorisation requis pour les éléments suivants :

      • Les répertoires $HOME et $HOME/.ssh
      • Fichier $HOME/.ssh/authorized_keys

      Propriété

      L'environnement invité stocke les clés publiques SSH autorisées dans le fichier $HOME/.ssh/authorized_keys. Le propriétaire des répertoires $HOME et $HOME/.ssh et du fichier $HOME/.ssh/authorized_keys doit être l'utilisateur qui se connecte à la VM.

      Autorisations

      L'environnement invité nécessite les autorisations Linux suivantes :

      Chemin Autorisations
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Pour savoir quelle option est l'autorisation par défaut appropriée pour votre répertoire $HOME, reportez-vous à la documentation officielle correspondant à votre distribution Linux.


      Vous pouvez également créer une VM basée sur la même image et vérifier ses autorisations par défaut pour $HOME.

      Pour en savoir plus sur la modification des autorisations et des droits de propriété, consultez les sections chmod et chown.

    • Redémarrez sshd en exécutant la commande suivante :

      systemctl restart sshd.service
      

      Vérifiez si l'état contient des erreurs en exécutant la commande suivante :

      systemctl status sshd.service
      

      Le résultat de l'état peut contenir des informations telles que le code de sortie, le motif de l'échec, etc. Ces informations peuvent vous permettre de résoudre les problèmes.

  • Problème de daemon SSH inconnu Pour diagnostiquer un problème de daemon SSH inconnu, recherchez les erreurs dans les journaux de la console série.

    En fonction de la sortie des journaux de la console série, essayez de récupérer la VM et de résoudre les problèmes liés au daemon SSH en procédant comme suit :

    1. Rattachez le disque à une autre VM Linux.
    2. Connectez-vous à la VM contenant le disque installé.
    3. Installez le disque dans le système d'exploitation sur un répertoire MOUNT_DIR dans la VM.
    4. Affichez les journaux liés à SSH, /var/log/secure ou /var/log/auth.log pour tout problème ou erreur. Si vous rencontrez des problèmes que vous pouvez résoudre, essayez de les résoudre. Sinon, créez une demande d'assistance et joignez les journaux.
    5. Désinstallez le disque du système d'exploitation à l'aide de la commande umount :

      cd ~/
      umount /mnt
      
    6. Dissociez le disque de la VM.

    7. Rattachez le disque à la VM d'origine.

    8. Démarrez la VM.

Échec de la connexion au backend

Les erreurs suivantes peuvent se produire lorsque vous vous connectez à votre VM depuis la console Google Cloud ou gcloud CLI :

  • La console Google Cloud :

    -- Connection via Cloud Identity-Aware Proxy Failed
    
    -- Code: 4003
    
    -- Reason: failed to connect to backend
    
  • gcloud CLI :

    ERROR: (gcloud.compute.start-iap-tunnel) Error while connecting [4003: 'failed to connect to backend'].
    

Ces erreurs se produisent lorsque vous essayez d'utiliser SSH pour vous connecter à une VM qui ne possède pas d'adresse IP publique et pour laquelle vous n'avez pas configuré Identity-Aware Proxy sur le port 22.

Pour résoudre ce problème, créez une règle de pare-feu sur le port 22 autorisant le trafic entrant provenant d'Identity-Aware Proxy.

La clé d'hôte ne correspond pas

L'erreur suivante peut se produire lorsque vous vous connectez à votre VM :

Host key for server IP_ADDRESS does not match

Cette erreur se produit lorsque la clé d'hôte dans le fichier ~/.ssh/known_hosts ne correspond pas à la clé d'hôte de la VM.

Pour résoudre ce problème, supprimez la clé d'hôte du fichier ~/.ssh/known_hosts, puis réessayez d'établir la connexion.

La valeur des métadonnées est trop élevée

L'erreur suivante peut se produire lorsque vous essayez d'ajouter une nouvelle clé SSH aux métadonnées :

ERROR:"Value for field 'metadata.items[X].value' is too large: maximum size 262144 character(s); actual size NUMBER_OF_CHARACTERS."

Les valeurs de métadonnées ont une limite maximale de 256 ko. Pour contourner cette limitation, effectuez l'une des opérations suivantes :

Erreurs Windows

Autorisation refusée. Veuillez réessayer.

L'erreur suivante peut se produire lorsque vous vous connectez à votre VM :

USERNAME@compute.INSTANCE_ID's password:
Permission denied, please try again.

Cette erreur indique que l'utilisateur qui tente de se connecter à la VM n'existe pas sur celle-ci. Voici quelques-unes des causes les plus courantes de cette erreur :

  • Votre version de gcloud CLI est obsolète

    Si gcloud CLI est obsolète, vous essayez peut-être de vous connecter à l'aide d'un nom d'utilisateur non configuré. Pour résoudre ce problème, mettez à jour gcloud CLI.

  • Vous avez essayé de vous connecter à une VM Windows sur laquelle SSH n'est pas activé

    Pour résoudre cette erreur, définissez la clé enable-windows-ssh sur TRUE dans les métadonnées du projet ou de l'instance. Pour en savoir plus sur la définition des métadonnées, consultez la page Définir des métadonnées personnalisées.

Autorisation refusée (clé publique, authentification via le clavier)

L'erreur suivante peut se produire lorsque vous vous connectez à une VM sur laquelle SSH n'est pas activé :

Permission denied (publickey,keyboard-interactive).

Pour résoudre cette erreur, définissez la clé enable-windows-ssh sur TRUE dans les métadonnées du projet ou de l'instance. Pour en savoir plus sur la définition des métadonnées, consultez la page Définir des métadonnées personnalisées.

Impossible de se connecter via SSH à l'instance

L'erreur suivante peut se produire lorsque vous vous connectez à votre VM depuis gcloud CLI :

ERROR: (gcloud.compute.ssh) Could not SSH into the instance.
It is possible that your SSH key has not propagated to the instance yet.
Try running this command again.  If you still cannot connect, verify that the firewall and instance are set to accept ssh traffic.

Cette erreur peut se produire pour plusieurs raisons. Voici quelques-unes des causes d'erreur les plus courantes :

  • Vous avez essayé de vous connecter à une VM Windows sur laquelle SSH n'est pas installé

    Pour résoudre ce problème, suivez les instructions de la section Activer SSH pour Windows sur une VM en cours d'exécution.

  • Le serveur OpenSSH (sshd) ne s'exécute pas ou n'est pas configuré correctement. sshd fournit un accès à distance sécurisé au système via le protocole SSH. S'il est mal configuré ou ne s'exécute pas, vous ne pouvez pas vous connecter à votre VM via SSH.

    Pour résoudre ce problème, consultez la page Configuration du serveur OpenSSH pour Windows Server et Windows pour vous assurer que sshd est correctement configuré.

Connexion expirée

L'expiration des connexions SSH peut être due à l'une des raisons suivantes :

  • Le démarrage de la VM n'est pas terminé. Patientez un court instant le temps que la VM démarre.

    Pour résoudre ce problème, attendez que le démarrage de la VM soit terminé puis réessayez de vous connecter.

  • Le package SSH n'est pas installé. Les VM Windows nécessitent l'installation du package google-compute-engine-ssh pour que vous puissiez vous connecter via SSH.

    Pour résoudre ce problème, installez le package SSH.

Diagnostiquer les échecs de connexions SSH

Les sections suivantes décrivent les procédures à suivre pour diagnostiquer la cause des échecs de connexions SSH et résoudre les problèmes de connexion.

Avant de diagnostiquer les échecs de connexions SSH, procédez comme suit :

Méthodes de diagnostic pour les VM Linux et Windows

Tester la connectivité

Il est possible que vous ne puissiez pas utiliser SSH sur une instance de VM en raison de problèmes de connectivité liés aux pare-feu, à la connexion réseau ou au compte utilisateur. Dans ce cas, suivez les étapes de cette section pour identifier les problèmes de connectivité.

Vérifier les règles de pare-feu

Compute Engine provisionne chaque projet avec des règles de pare-feu par défaut qui autorisent le trafic SSH. Si vous ne parvenez pas à accéder à votre instance, utilisez l'outil de ligne de commande gcloud compute pour vérifier votre liste de pare-feu et vous assurer que la règle default-allow-ssh est bien présente.

Sur votre poste de travail local, exécutez la commande suivante :

gcloud compute firewall-rules list

Si elle est absente, ajoutez-la :

gcloud compute firewall-rules create default-allow-ssh \
    --allow tcp:22

Pour afficher toutes les données associées à la règle de pare-feu default-allow-ssh de votre projet, exécutez la commande gcloud compute firewall-rules describe :

gcloud compute firewall-rules describe default-allow-ssh \
    --project=project-id

Pour en savoir plus sur les règles de pare-feu, consultez la section Règles de pare-feu dans Google Cloud.

Tester la connexion réseau

Pour déterminer si la connexion réseau fonctionne, testez le handshake TCP :

  1. Obtenez le natIP externe pour votre VM :

    gcloud compute instances describe VM_NAME \
        --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    

    Remplacez VM_NAME par le nom de la VM à laquelle vous ne parvenez pas à vous connecter.

  2. Testez la connexion réseau à votre VM depuis votre poste de travail :

    Linux, Windows 2019/2022 et macOS

    curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:PORT_NUMBER
    

    Remplacez les éléments suivants :

    • EXTERNAL_IP : adresse IP externe obtenue à l'étape précédente.
    • PORT_NUMBER : numéro de port.

    Si le handshake TCP réussit, le résultat est semblable à celui-ci :

    Expire in 0 ms for 6 (transfer 0x558b3289ffb0)
    Expire in 5000 ms for 2 (transfer 0x558b3289ffb0)
    Trying 192.168.0.4...
    TCP_NODELAY set
    Expire in 200 ms for 4 (transfer 0x558b3289ffb0)
    Connected to 192.168.0.4 (192.168.0.4) port 443 (#0)
    > GET / HTTP/1.1
    > Host: 192.168.0.4:443
    > User-Agent: curl/7.64.0
    > Accept: */*
    >
    Empty reply from server
    Connection #0 to host 192.168.0.4 left intact
    

    La ligne Connected to indique un handshake TCP ayant réussi.

    Windows 2012 et 2016

    PS C:> New-Object System.Net.Sockets.TcpClient('EXTERNAL_IP',PORT_NUMBER)
    

    Remplacez les éléments suivants :

    • EXTERNAL_IP : adresse IP externe obtenue à l'étape précédente.
    • PORT_NUMBER : numéro de port.

    Si le handshake TCP réussit, le résultat est semblable à celui-ci :

    Available           : 0
    Client              : System.Net.Sockets.Socket
    Connected           : True
    ExclusiveAddressUse : False
    ReceiveBufferSize   : 131072
    SendBufferSize      : 131072
    ReceiveTimeout      : 0
    SendTimeout         : 0
    LingerState         : System.Net.Sockets.LingerOption
    NoDelay             : False
    

    La ligne Connected: True indique un handshake TCP ayant réussi.

Si le handshake TCP a abouti, il n'y a pas de règle de pare-feu logicielle bloquant la connexion, le système d'exploitation transmet correctement les paquets et un serveur écoute sur le port de destination. Si le handshake TCP a abouti, mais que la VM n'accepte pas les connexions SSH, le problème peut être dû au fait que le daemon sshd est mal configuré ou ne s'exécute pas correctement. Consultez le guide de l'utilisateur de votre système d'exploitation pour vous assurer que le fichier sshd_config est correctement configuré.

Pour exécuter des tests de connectivité afin d'analyser la configuration du chemin du réseau VPC entre deux VM et vérifier si la configuration programmée doit autoriser le trafic, consultez la page Rechercher les règles de pare-feu mal configurées dans Google Cloud.

Se connecter avec un autre compte utilisateur

Le problème qui vous empêche de vous connecter peut provenir de votre compte d'utilisateur. Par exemple, les autorisations sur l'instance spécifiées dans le fichier ~/.ssh/authorized_keys n'ont pas été définies correctement pour cet utilisateur.

Essayez de vous connecter en tant qu'utilisateur différent à l'aide de gcloud CLI en spécifiant ANOTHER_USERNAME dans la requête SSH. gcloud CLI met à jour les métadonnées du projet pour ajouter le nouvel utilisateur et autoriser l'accès SSH.

gcloud compute ssh ANOTHER_USERNAME@VM_NAME

Remplacez les éléments suivants :

  • ANOTHER_USERNAME est un nom d'utilisateur autre que le vôtre.
  • VM_NAME est le nom de la VM à laquelle vous souhaitez vous connecter.

Résoudre les problèmes à l'aide de la console série

Nous vous recommandons de consulter les erreurs de connexion dans les journaux de la console série. Vous pouvez accéder à la console série en tant qu'utilisateur racine depuis votre poste de travail local à l'aide d'un navigateur. Cette approche est utile lorsque vous ne pouvez pas vous connecter avec SSH ou si l'instance ne dispose d'aucune connexion au réseau. La console série reste accessible dans ces deux situations.

Pour vous connecter à la console série de la VM et résoudre les problèmes liés à la VM, procédez comme suit :

  1. Activez l'accès interactif à la console série de la VM.

  2. Pour les VM Linux, modifiez le mot de passe racine, puis ajoutez le script de démarrage suivant à votre VM :

    echo root:PASSWORD | chpasswd

    Remplacez PASSWORD par le mot de passe de votre choix.

  3. Utilisez la console série pour vous connecter à votre VM.

  4. Pour les VM Linux, une fois le débogage de toutes les erreurs terminé, désactivez la connexion du compte racine :

    sudo passwd -l root

Méthodes de diagnostic pour les VM Linux

Inspecter une instance de VM sans l'arrêter

Il se peut que vous ne puissiez pas vous connecter à une instance qui continue de diffuser correctement le trafic de production. Dans ce cas, vous pouvez tenter d'inspecter le disque sans interrompre l'instance.

Pour inspecter le disque et résoudre les problèmes, procédez comme suit :

  1. Sauvegardez votre disque de démarrage en créant un instantané du disque.
  2. Créez un disque persistant standard à partir de cet instantané.
  3. Créez une instance temporaire.
  4. Associez le disque persistant standard à votre nouvelle instance temporaire et installez-le sur celle-ci.

Cette procédure crée un réseau isolé qui n'autorise que les connexions SSH. Cette configuration évite les conséquences imprévues des interférences de l'instance clonée avec les services de production.

  1. Créez un réseau VPC pour héberger l'instance clonée :

    gcloud compute networks create debug-network
    

    Remplacez NETWORK_NAME par le nom que vous souhaitez donner à votre nouveau réseau.

  2. Ajoutez une règle de pare-feu pour autoriser les connexions SSH au réseau :

    gcloud compute firewall-rules create debug-network-allow-ssh \
       --network debug-network \
       --allow tcp:22
    
  3. Créez un instantané du disque de démarrage.

    gcloud compute disks snapshot BOOT_DISK_NAME \
       --snapshot-names debug-disk-snapshot
    

    Remplacez BOOT_DISK_NAME par le nom du disque de démarrage.

  4. Créez un disque avec l'instantané que vous venez de générer :

    gcloud compute disks create example-disk-debugging \
       --source-snapshot debug-disk-snapshot
    
  5. Créez une instance de débogage sans adresse IP externe :

    gcloud compute instances create debugger \
       --network debug-network \
       --no-address
    
  6. Associez le disque de débogage à l'instance :

    gcloud compute instances attach-disk debugger \
       --disk example-disk-debugging
    
  7. Suivez les instructions pour vous connecter à une VM à l'aide d'un hôte bastion.

  8. Une fois connecté à l'instance de débogage, dépannez l'instance. Par exemple, vous pouvez consulter les journaux de l'instance :

    sudo su -
    
    mkdir /mnt/VM_NAME
    
    mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/VM_NAME
    
    cd /mnt/VM_NAME/var/log
    
    # Identify the issue preventing ssh from working
    ls
    

    Remplacez VM_NAME par le nom de la VM à laquelle vous ne parvenez pas à vous connecter.

Utiliser un script de démarrage

Si aucune des solutions précédentes ne vous aide, vous pouvez créer un script de démarrage pour collecter des informations juste après le démarrage de l'instance. Suivez les instructions pour exécuter un script de démarrage.

Vous devez ensuite réinitialiser votre instance avant que les métadonnées ne soient affectées en exécutant la commande gcloud compute instances reset.

Vous pouvez également recréer l'instance avec un script de démarrage de diagnostic :

  1. Exécutez gcloud compute instances delete avec l'indicateur --keep-disks.

    gcloud compute instances delete VM_NAME \
       --keep-disks boot
    

    Remplacez VM_NAME par le nom de la VM à laquelle vous ne parvenez pas à vous connecter.

  2. Ajoutez une nouvelle instance avec le même disque et spécifiez le script de démarrage.

    gcloud compute instances create NEW_VM_NAME \
       --disk name=BOOT_DISK_NAME,boot=yes \
       --metadata startup-script-url URL
    

    Remplacez les éléments suivants :

    • NEW_VM_NAME est le nom de la VM que vous créez.
    • BOOT_DISK_NAME est le nom du disque de démarrage de la VM à laquelle vous ne parvenez pas à vous connecter.
    • URL est l'URL Cloud Storage d'accès au script, au format gs://BUCKET/FILE ou https://storage.googleapis.com/BUCKET/FILE.

Utiliser le disque sur une nouvelle instance

Si vous devez toujours récupérer des données à partir de votre disque de démarrage persistant, vous pouvez dissocier le disque de démarrage, puis l'associer à une nouvelle instance en tant que disque secondaire.

  1. Supprimez la VM à laquelle vous ne parvenez pas à vous connecter et conservez son disque de démarrage :

    gcloud compute instances delete VM_NAME \
       --keep-disks=boot 

    Remplacez VM_NAME par le nom de la VM à laquelle vous ne parvenez pas à vous connecter.

  2. Créez une VM avec le disque de démarrage de l'ancienne VM. Spécifiez le nom du disque de démarrage de la VM que vous venez de supprimer.

  3. Connectez-vous à votre VM à l'aide de SSH :

    gcloud compute ssh NEW_VM_NAME
    

    Remplacez NEW_VM_NAME par le nom de votre nouvelle VM.

Vérifier si le disque de démarrage de la VM est saturé

Votre VM peut devenir inaccessible si son disque de démarrage est saturé. Ce scénario peut être difficile à identifier : il n'est pas toujours évident de savoir si le problème de connectivité des VM est dû à un disque de démarrage saturé. Pour plus d'informations sur ce scénario, consultez la section Dépannage d'une VM inaccessible en raison d'un disque de démarrage saturé.

Méthodes de diagnostic pour les VM Windows

Réinitialiser les métadonnées SSH

Si vous ne pouvez pas vous connecter à une VM Windows à l'aide de SSH, annulez la définition de la clé de métadonnées enable-windows-ssh et réactivez SSH pour Windows.

  1. Définissez la clé de métadonnées enable-windows-ssh sur FALSE. Pour en savoir plus sur la définition des métadonnées, consultez la page Définir des métadonnées personnalisées.

    Attendez quelques secondes que la modification prenne effet.

  2. Réactivez SSH pour Windows.

  3. Reconnectez-vous à la VM.

Se connecter à la VM à l'aide de RDP

Si vous ne parvenez pas à diagnostiquer et à résoudre la cause des échecs des connexions SSH à votre VM Windows, connectez-vous à l'aide de RDP.

Une fois la connexion à la VM établie, consultez les journaux OpenSSH.

Résoudre les problèmes SSH avec gcpdiag

gcpdiag est un outil Open Source. Il ne s'agit pas d'un produit Google Cloud faisant l'objet d'une assistance officielle. Vous pouvez utiliser l'outil gcpdiag pour vous aider à identifier et à résoudre les problèmes liés au projet Google Cloud. Pour plus d'informations, consultez le projet gcpdiag sur GitHub.

Ce runbook gcpdiag examine les causes potentielles des problèmes de connexion SSH sur les VM Windows et Linux dans Google Cloud, en examinant les domaines suivants :
  • État de la VM : vérifie si la VM est en cours d'exécution et dispose de ressources suffisantes (processeur, mémoire, stockage sur disque).
  • Autorisations : garantit que vous disposez des autorisations IAM appropriées pour configurer des clés SSH.
  • Paramètres de la VM : vérifie que les clés SSH et les autres métadonnées sont correctement configurées.
  • Règles réseau : examine les règles de pare-feu pour confirmer que le trafic SSH est autorisé.
  • Système d'exploitation invité : recherche les problèmes internes liés au système d'exploitation qui pourraient bloquer SSH.

console Google Cloud

  1. Terminez l'exécution, puis copiez la commande suivante.
  2. gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED \
        --parameter check_os_login=OS_LOGIN_ENABLED
  3. Ouvrez la console Google Cloud et activez Cloud Shell.
  4. Ouvrir la console Cloud
  5. Collez la commande copiée.
  6. Exécutez la commande gcpdiag, qui télécharge l'image Docker gcpdiag, puis effectue des vérifications de diagnostic. Le cas échéant, suivez les instructions de sortie pour corriger les échecs de vérification.

Docker

Vous pouvez exécuter gcpdiag à l'aide d'un wrapper qui démarre gcpdiag dans un conteneur Docker. Docker ou Podman doivent être installés.

  1. Copiez et exécutez la commande suivante sur votre station de travail locale :
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Exécutez la commande gcpdiag.
    ./gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED \
        --parameter check_os_login=OS_LOGIN_ENABLED

Affichez les paramètres disponibles pour ce runbook.

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant la ressource.
  • VM_NAME : nom de la VM cible au sein de votre projet.
  • ZONE : zone dans laquelle se trouve votre VM cible.
  • PRINCIPAL : utilisateur ou compte de service principal qui établit la connexion SSH. Pour l'authentification basée sur une clé, utilisez l'utilisateur authentifié par votre outil de ligne de commande Cloud Shell ou connecté à la console Google Cloud. Pour emprunter l'identité d'un compte de service, il doit s'agir de l'adresse e-mail du compte de service.
  • IAP_ENABLED : valeur booléenne (true ou false) indiquant si Identity-Aware Proxy est utilisé pour établir la connexion SSH. Par défaut : true
  • OS_LOGIN_ENABLED : valeur booléenne (true ou false) indiquant si OS Login est utilisé pour l'authentification SSH. Par défaut : true

Options utiles :

Pour obtenir la liste et la description de toutes les options de l'outil gcpdiag, consultez les instructions d'utilisation de gcpdiag.

Étape suivante