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.
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 :
- Examinez les résultats du test pour comprendre pourquoi la connexion SSH de la VM ne fonctionne pas.
- Résolvez les connexions SSH en réalisant les mesures correctives fournies par l'outil.
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:
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.
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:
Capturez le trafic réseau dans un fichier HAR (HTTP Archive Format) à partir du démarrage de la connexion SSH "SSH dans le navigateur".
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 ...
Pour résoudre ce problème, procédez comme suit :
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.
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
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.
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.
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"
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.
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.
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 :
- Connectez-vous à votre VM à l'aide de Google Cloud Console ou de Google Cloud CLI. Pour en savoir plus, consultez la page Se connecter à des VM.
- Ajoutez vos clés SSH à OS Login. Pour en savoir plus, consultez la section Ajouter des clés aux VM qui utilisent OS Login.
- Désactivez OS Login. Pour en savoir plus, consultez la section Désactiver OS Login.
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 :
- Connectez-vous à votre VM à l'aide de Google Cloud Console ou de Google Cloud CLI. Pour en savoir plus, consultez la page Se connecter à des VM.
- Activez OS Login. Pour en savoir plus, consultez la section Activer OS Login.
- Ajoutez des clés SSH aux métadonnées. Pour en savoir plus, consultez la section Ajouter des clés SSH aux VM qui utilisent des clés SSH basées sur les métadonnées.
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 :
- Connectez-vous à votre VM à l'aide de Google Cloud Console ou de Google Cloud CLI. Pour en savoir plus, consultez la page Se connecter à des VM.
- Ajoutez à nouveau votre clé SSH aux métadonnées. Pour en savoir plus, consultez la section Ajouter des clés SSH aux VM qui utilisent des clés SSH basées sur les métadonnées.
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.
- Exécutez la commande suivante :
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 :
- Redémarrez la VM.
- 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é.
- 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
ou0750
ou0755
*$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
etchown
.- Les répertoires
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
.
- Vérifiez que le disque de démarrage est bien saturé en utilisant le débogage avec la console série pour identifier
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
ou0750
ou0755
*$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
etchown
.
É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 votresshd
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.
- 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. - Accordez des autorisations pour utiliser le transfert TCP IAP, si ce n'est pas déjà fait.
- Mettez à jour votre règle de pare-feu personnalisée pour autoriser le trafic provenant de
Si vous n'utilisez pas IAP, mettez à jour votre règle de pare-feu personnalisée pour autoriser le trafic SSH entrant.
- 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 :
- Installez le disque sur une autre VM.
- Mettez à jour le fichier
grub.cfg
pour utiliser la version précédente du noyau. - Rattachez le disque à la VM qui ne répond pas.
- Vérifiez que l'état de la VM est bien
RUNNING
en utilisant la commandegcloud compute instances describe
. - Réinstallez le noyau.
- 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
ou0750
ou0755
*$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
etchown
.- Les répertoires
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 :
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.
Redémarrez la VM.
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
ou0750
ou0755
*$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
etchown
.- Les répertoires
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 :
- Rattachez le disque à une autre VM Linux.
- Connectez-vous à la VM contenant le disque installé.
- Installez le disque dans le système d'exploitation sur un répertoire MOUNT_DIR dans la VM.
- 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. Désinstallez le disque du système d'exploitation à l'aide de la commande
umount
:cd ~/ umount /mnt
Dissociez le disque de la VM.
Rattachez le disque à la VM d'origine.
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 :
- Supprimez les clés SSH expirées ou en double des métadonnées du projet ou de l'instance. Pour plus d'informations, consultez la page Mettre à jour les métadonnées sur une VM en cours d'exécution.
- Utilisez OS Login.
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
surTRUE
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 :
- Installez la dernière version de Google Cloud CLI ou appliquez la mise à jour correspondante.
- Lancez des tests de connectivité.
- Si vous utilisez une image Linux personnalisée qui n'exécute pas l'environnement invité, installez l'environnement invité Linux.
- Si vous utilisez OS Login, consultez la page Résoudre les problèmes liés à OS Login.
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 la règle de pare-feu 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 :
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.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 :
Activez l'accès interactif à la console série de la VM.
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.
Utilisez la console série pour vous connecter à votre VM.
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 :
- Sauvegardez votre disque de démarrage en créant un instantané du disque.
- Créez un disque persistant standard à partir de cet instantané.
- Créez une instance temporaire.
- 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.
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.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
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.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
Créez une instance de débogage sans adresse IP externe :
gcloud compute instances create debugger \ --network debug-network \ --no-address
Associez le disque de débogage à l'instance :
gcloud compute instances attach-disk debugger \ --disk example-disk-debugging
Suivez les instructions pour vous connecter à une VM à l'aide d'un hôte bastion.
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 :
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.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 formatgs://BUCKET/FILE
ouhttps://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.
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.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.
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.
Définissez la clé de métadonnées
enable-windows-ssh
surFALSE
. 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.
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.
- É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
- Terminez l'exécution, puis copiez la commande suivante.
- Ouvrez la console Google Cloud et activez Cloud Shell. Ouvrir la console Cloud
- Collez la commande copiée.
- Exécutez la commande
gcpdiag
, qui télécharge l'image Dockergcpdiag
, puis effectue des vérifications de diagnostic. Le cas échéant, suivez les instructions de sortie pour corriger les échecs de vérification.
gcpdiag runbook gce/ssh \
--parameter project_id=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
--parameter local_user=LOCAL_USER \
--parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
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.
- Copiez et exécutez la commande suivante sur votre station de travail locale :
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Exécutez la commande
gcpdiag
../gcpdiag runbook gce/ssh \ --parameter project_id=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 --parameter local_user=LOCAL_USER \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
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
- LOCAL_USER:utilisateur Posix sur la VM.
- CHECK_SSH_IN_BROWSER:valeur booléenne permettant de vérifier que le protocole SSH dans le navigateur est possible.
Options utiles :
--universe-domain
: le cas échéant, le domaine cloud souverain du partenaire de confiance hébergeant la ressource.--parameter
ou-p
: paramètres du runbook
Pour obtenir la liste et la description de toutes les options de l'outil gcpdiag
, consultez les instructions d'utilisation de gcpdiag
.
Étape suivante
- Découvrez comment les connexions SSH aux VM Linux fonctionnent sur Compute Engine.