En général, les meilleures méthodes de connexion SSH sont décrites dans le document Se connecter à des instances. Toutefois, si vous devez gérer vos propres identifiants, utiliser des outils tiers ou vous connecter en utilisant d'autres chemins de connexion, il est possible que les méthodes avancées présentées ci-dessous correspondent davantage à vos besoins que les méthodes standards. Pour en savoir plus sur le fonctionnement des connexions SSH dans Compute Engine, y compris la configuration et le stockage de clés SSH, consultez la section Connexions SSH aux VM Linux.
Il existe plusieurs méthodes avancées permettant de se connecter aux VM Linux :
- Se connecter à des instances sans adresse IP externe
- Se connecter à des instances en tant qu'utilisateur
root
- SSH avec clés de sécurité
Avant de commencer
- Si vous souhaitez utiliser les exemples de ligne de commande de ce guide, procédez comme suit :
- Installez la dernière version de Google Cloud CLI ou appliquez la mise à jour correspondante.
- Définissez une région et une zone par défaut.
- Pour en savoir plus sur le fonctionnement des connexions SSH dans Compute Engine, y compris la configuration et le stockage de clés SSH, consultez la section Connexions SSH aux VM Linux.
Systèmes d'exploitation compatibles
Ces méthodes de connexion sont compatibles avec tous les systèmes d'exploitation Linux disponibles sur Compute Engine. Pour Fedora CoreOS, vous devez configurer l'accès SSH afin de pouvoir utiliser ces méthodes.
Fournir des clés SSH publiques aux instances
Normalement, Compute Engine crée et gère les clés SSH chaque fois que vous vous connectez à l'aide des méthodes décrites dans la section Se connecter à des instances.
Toutefois, si vous devez utiliser vos propres clés SSH (par exemple, si vous utilisez un outil tiers), vous devez générer votre propre paire de clés SSH et fournir votre clé SSH publique à l'instance avant de pouvoir vous connecter.
Si vous ne savez pas comment générer votre propre clé SSH, consultez la section Créer des clés SSH.
Pour fournir votre clé SSH à l'instance, appliquez l'une des méthodes suivantes :
(Recommandé) Activez la connexion au système d'exploitation (OS Login). OS Login utilise des rôles IAM pour fournir votre clé SSH publique à l'instance via votre compte Google ou un compte utilisateur géré. Pour obtenir des instructions, consultez la page Configurer la connexion au système d'exploitation.
Lorsque vous configurez OS Login, veillez à suivre la procédure décrite dans la section Ajouter des clés aux VM qui utilisent OS Login. Au cours de cette étape, vous pouvez ajouter votre clé publique au compte utilisateur que vous souhaitez utiliser pour vous connecter à votre VM.
Pour en savoir plus sur les avantages de cette fonctionnalité, consultez la page OS Login.
(Déconseillé) Ajoutez et supprimez manuellement les clés SSH en modifiant les métadonnées du projet ou de l'instance. Consultez la section Gérer des clés SSH dans les métadonnées. Cette méthode ajoute des risques et une complexité inutiles et n'est pas recommandée, à moins que la méthode OS Login présentée ci-dessus ne fonctionne pas dans votre cas. Consultez la section Risques liés à la gestion manuelle des clés.
Si votre instance est gérée par une autre personne qui a déjà des accès, comme par exemple un administrateur système, vous pouvez lui fournir votre clé SSH publique et lui demander de la configurer manuellement. Cela implique généralement que cette personne se connecte à votre instance, copie le fichier de votre clé publique dans le répertoire de base de l'instance et modifie les autorisations sur le fichier. Toutefois, cela dépend de la façon dont votre entreprise gère les instances.
Se connecter à des instances sans adresse IP externe
Si vos instances ne disposent pas d'une adresse IP externe, vous pouvez toujours vous connecter à ces instances en utilisant leur adresse IP interne sur un réseau VPC Google Cloud. Par exemple, vous pouvez toujours vous connecter aux VM que vous isolez intentionnellement depuis des réseaux externes à l'aide des méthodes suivantes :
- Connectez-vous aux instances via une connexion VPN ayant accès aux adresses IP internes des instances de votre VPC Google Cloud.
- Connectez-vous via une instance d'hôte bastion pour accéder aux adresses IP internes de votre VPC Google Cloud. À partir de l'hôte bastion, connectez-vous ensuite à d'autres instances sur le même réseau VPC interne ou à des instances sur un réseau VPC appairé.
- Connectez-vous à l'aide de Identity-Aware Proxy pour le transfert TCP afin de transférer une connexion SSH vers une instance distante.
Se connecter via une connexion VPN
Pour vous connecter à une instance sans adresse IP externe à l'aide d'un réseau privé virtuel (VPN), procédez comme suit :
Vous devez utiliser un ordinateur pouvant accéder à l'instance de VM via un tunnel Cloud VPN.
Par exemple, vous pouvez avoir un VPN que votre réseau local sur site partage avec votre réseau VPC Google Cloud. Dans ce cas, connectez-vous à l'instance à l'aide de la Google Cloud CLI, de SSH sous Linux ou macOS, ou de clients SSH tiers tels que PuTTY sous Windows.
Pour en savoir plus, consultez les pages suivantes :
gcloud
Pour vous connecter à une instance sans adresse IP externe, utilisez la commande gcloud compute ssh
avec l'option --internal-ip
.
Dans Google Cloud Console, accédez à la page Instances de VM et recherchez l'adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
Connectez-vous à l'instance.
gcloud compute ssh INTERNAL_INSTANCE_NAME \ --zone=ZONE \ --internal-ip
Remplacez l'élément suivant :
INTERNAL_INSTANCE_NAME
: nom de l'instance à laquelle vous souhaitez vous connecterZONE
: nom de la zone dans laquelle se trouve l'instance
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal. Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande
exit
.
Linux et macOS
Pour vous connecter à une instance sans adresse IP externe à partir de postes de travail Linux ou macOS, procédez comme suit :
Fournissez votre clé SSH publique à une instance en utilisant l'une des options disponibles. Vous ne pouvez pas continuer sans cela.
Sur votre machine locale, démarrez
ssh-agent
pour qu'il gère vos clés SSH à votre place :eval ssh-agent $SHELL
Exécutez la commande
ssh-add
pour charger votre clé SSH privée dans l'agent à partir de votre ordinateur local et l'utiliser pour l'authentification de toutes les commandes SSH. RemplacezPRIVATE_KEY
par le nom de votre fichier de clé privée.ssh-add ~/.ssh/PRIVATE_KEY
Dans Google Cloud Console, accédez à la page Instances de VM et recherchez l'adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
À partir de votre terminal local, exécutez la commande
ssh
avec le nom d'utilisateur associé à la clé SSH privée et l'adresse IP interne de l'instance à connecter. Exemple :ssh USERNAME@INTERNAL_INSTANCE_IP_ADDRESS
Remplacez l'élément suivant :
USERNAME
: nom de l'utilisateur qui se connecte à l'instance. Il doit s'agir du nom d'utilisateur que vous avez spécifié lors de la création de la clé SSH.INTERNAL_INSTANCE_IP_ADDRESS
: adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal.
Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande exit
.
Windows (PuTTY)
Pour vous connecter à une instance sans adresse IP externe à partir de postes de travail Windows, procédez comme suit :
Si vous ne l'avez pas déjà fait, fournissez votre clé SSH publique à une instance en utilisant l'une des options disponibles. Vous ne pouvez pas continuer sans cela.
Dans Google Cloud Console, accédez à la page Instances de VM et recherchez l'adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
Suivez les étapes précédentes pour vous connecter à une instance à l'aide de PuTTY à partir de Windows, mais effectuez la modification suivante :
- Lorsque les étapes vous indiquent de spécifier une adresse IP externe, spécifiez plutôt l'adresse interne de l'instance à laquelle vous souhaitez vous connecter.
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal.
Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande exit
.
Se connecter via un hôte bastion
Une autre méthode de connexion à une instance qui ne possède pas d'adresse IP externe consiste à se connecter via un hôte bastion. L'utilisation d'un hôte bastion vous permet également de vous connecter à des instances sur d'autres réseaux VPC appairés.
Pour vous connecter à une instance via un hôte bastion sous Linux et macOS, utilisez Google Cloud CLI ou SSH. Pour vous connecter à partir de Windows, utilisez un client SSH tiers tel que PuTTY.
La connexion à d'autres instances à partir d'un hôte bastion requiert une clé SSH privée. Il existe plusieurs manière de gérer ces clés :
- Installez Google Cloud CLI et configurez-le pour gérer vos clés privées à votre place.
- Transférez votre clé privée à l'instance de l'hôte bastion en activant le transfert d'agent dans votre client SSH.
Consultez les exemples suivants pour découvrir la procédure complète :
gcloud
Google Cloud CLI vous permet de vous connecter à des instances qui ne possèdent pas d'adresse IP externe sans avoir à transférer vos clés SSH privées vers l'hôte bastion.
Pour ce faire, installez gcloud
sur votre poste de travail local et sur l'instance de l'hôte bastion, si vous ne l'avez pas déjà fait.
Pour utiliser la Google Cloud CLI afin de vous connecter à une instance qui ne possède pas d'adresse IP externe, procédez comme suit :
Définissez un niveau d'accès en lecture/écriture à l'API Compute Engine pour le compte de service sur l'instance de votre hôte bastion en incluant
--scopes compute-rw
dans votre commande. Pour en savoir plus, consultez la section Modifier le compte de service et les niveaux d'accès d'une instance.Accordez les autorisations IAM nécessaires pour permettre à votre hôte bastion d'accéder à votre clé publique SSH, à l'aide d'OS Login (recommandé) ou des métadonnées du projet. Suivez l'une des procédures suivantes :
OS Login (recommandé) :
Métadonnées du projet :
Accordez les autorisations IAM nécessaires à vos instances pour modifier les métadonnées.
Conseil : Vous pouvez ajouter le rôle d'administrateur d'instances Compute Engine à votre compte de service.
Le compte de service de l'hôte bastion peut désormais appliquer votre clé SSH publique.
Connectez-vous à l'instance Linux de l'hôte bastion. Remplacez
EXTERNAL_INSTANCE_NAME
par le nom de l'instance de l'hôte bastion que vous utilisez pour accéder au réseau interne.gcloud compute ssh EXTERNAL_INSTANCE_NAME
Depuis l'instance Linux de l'hôte bastion, exécutez la commande
gcloud compute ssh
avec l'option--internal-ip
pour vous connecter aux instances à l'aide de leurs adresses IP internes :gcloud compute ssh INTERNAL_INSTANCE_NAME --internal-ip
Remplacez
INTERNAL_INSTANCE_NAME
par le nom de l'instance à laquelle vous souhaitez vous connecter.
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal.
Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande exit
.
Linux et macOS
Si vous devez transférer des clés privées vers l'instance de l'hôte bastion, vous devez ajouter vos clés à ssh-agent
. Exécutez ensuite la commande gcloud compute ssh
ou ssh
pour établir la connexion initiale à l'hôte bastion et transférer les clés vers l'agent SSH. Ce processus ne fonctionne que sur les postes de travail Linux et macOS. Si vous devez transférer des clés privées vers un hôte bastion à partir d'un poste de travail Windows, suivez plutôt les instructions PuTTY.
Pour vous connecter à une instance sans adresse IP externe à partir de postes de travail Linux ou macOS, procédez comme suit :
Fournissez votre clé SSH publique en utilisant l'une des options disponibles. Veillez à fournir cette clé SSH publique à la fois à l'instance Linux de l'hôte bastion et à l'instance sans adresse IP externe.
Sur votre machine locale, démarrez
ssh-agent
pour qu'il gère vos clés SSH à votre place :eval ssh-agent $SHELL
Utilisez la commande
ssh-add
pour charger votre clé SSH privée dans l'agent à partir de votre ordinateur local. Une fois la clé ajoutée, les commandes SSH utilisent automatiquement le fichier de clé SSH privée pour l'authentification.$ ssh-add ~/.ssh/PRIVATE_KEY
Remplacez
PRIVATE_KEY
par le nom de votre fichier de clé privée.Dans Google Cloud Console, accédez à la page Instances de VM. Dans la colonne Adresse IP externe, recherchez l'adresse IP externe de l'instance Linux de l'hôte bastion. Et dans la colonne Adresse IP interne, recherchez l'adresse IP interne de l'instance interne à laquelle vous souhaitez vous connecter.
Connectez-vous à l'instance Linux de l'hôte bastion en exécutant
ssh
ougcloud compute ssh
. Quelle que soit l'option choisie, ajoutez l'argument-A
pour activer le transfert d'agent pour l'authentification.Connectez-vous à l'instance Linux de l'hôte bastion et transférez vos clés privées avec
ssh
:ssh -A USERNAME@BASTION_HOST_EXTERNAL_IP
Remplacez l'élément suivant :
USERNAME
: nom associé à votre clé SSH.BASTION_HOST_EXTERNAL_IP
: adresse IP externe de l'instance de l'hôte bastion que vous utilisez pour accéder au réseau interne
Vous pouvez également vous connecter à l'instance de l'hôte bastion et transférer vos clés privées à l'aide de la commande
gcloud compute ssh
. Cette option vous permet de vous connecter à l'instance de l'hôte bastion à l'aide de Google Cloud CLI, puis d'exécuter la commandessh
standard avec les identifiants transférés lorsque vous vous connectez à des adresses IP internes.gcloud compute ssh --ssh-flag="-A" BASTION_HOST_INSTANCE_NAME
Remplacez
BASTION_HOST_INSTANCE_NAME
par le nom de l'instance de l'hôte bastion que vous utilisez pour accéder à votre réseau interne.À partir de l'instance Linux de l'hôte bastion, utilisez SSH pour vous connecter à une instance qui ne possède pas d'adresse IP externe :
ssh USERNAME@INTERNAL_INSTANCE_IP_ADDRESS
Remplacez l'élément suivant :
USERNAME
: nom associé à votre clé SSH.INTERNAL_INSTANCE_IP_ADDRESS
: adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal.
Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande exit
.
Windows
Pour vous connecter à une instance sans adresse IP externe à partir de postes de travail Windows, procédez comme suit :
Fournissez votre clé SSH publique en utilisant l'une des options disponibles. Veillez à fournir cette clé SSH publique à la fois à l'instance Linux de l'hôte bastion et à l'instance sans adresse IP externe.
Dans Google Cloud Console, accédez à la page Instances de VM. Dans la colonne Adresse IP externe, recherchez l'adresse IP externe de l'instance Linux de l'hôte bastion. Et dans la colonne Adresse IP interne, recherchez l'adresse IP interne de l'instance interne à laquelle vous souhaitez vous connecter.
Connectez-vous à l'instance Linux de l'hôte bastion à l'aide de PuTTY. Pour transmettre votre clé SSH privée à l'hôte bastion, activez le paramètre Allow agent forwarding (Autoriser le transfert d'agent) comme indiqué dans la capture d'écran suivante :
À partir de l'instance Linux de l'hôte bastion, utilisez SSH pour vous connecter à une instance qui ne possède pas d'adresse IP externe :
ssh USERNAME@INTERNAL_IP_ADDRESS
Remplacez l'élément suivant :
USERNAME
: nom de l'utilisateur qui se connecte à l'instance. Il doit s'agir du nom d'utilisateur que vous avez spécifié lors de la création de la clé SSH.INTERNAL_IP_ADDRESS
: adresse IP interne de l'instance à laquelle vous souhaitez vous connecter.
Une fois connecté, exécutez les commandes sur votre instance à l'aide de ce terminal. Lorsque vous avez terminé, déconnectez-vous de l'instance en exécutant la commande
exit
.
Se connecter via Identity-Aware Proxy (IAP) pour TCP
Vous pouvez activer le transfert TCP d'IAP pour établir un tunnel chiffré sur lequel vous pouvez transférer les connexions SSH à la VM.
Afin d'activer le transfert TCP d'IAP pour les VM, procédez comme suit :
- Créez une règle de pare-feu pour activer les connexions depuis IAP.
- Accordez les autorisations IAM requises pour activer le transfert TCP d'IAP.
Pour vous connecter aux VM avec le transfert TCP d'IAP, tunnelisez les connexions SSH.
Se connecter aux instances en tant qu'utilisateur root
Par défaut, les images publiques et les systèmes d'exploitation les plus courants n'autorisent pas la connexion en tant qu'utilisateur racine avec un mot de passe via SSH. Si un utilisateur a besoin des autorisations racine, il peut les obtenir en exécutant les commandes avec sudo
.
Dans les VM Compute Engine, le paramètre PermitRootLogin
est défini sur prohibit-password
ou no
dans le fichier de configuration SSH /etc/ssh/sshd_config
.
Avec le paramètre PermitRootLogin=prohibit-password
, vous ne pouvez pas vous connecter à une VM en tant que root
, sauf si vous spécifiez une clé SSH pour root
dans les métadonnées de votre projet ou de votre instance.
Avec le paramètre PermitRootLogin=no
, vous ne pouvez pas vous connecter, même si vous spécifiez une clé SSH pour root
dans les métadonnées du projet ou de l'instance.
Vous pouvez modifier le paramètre PermitRootLogin
. Toutefois, nous vous recommandons plutôt d'exécuter des commandes via sudo
.
Si vous avez configuré une instance pour autoriser SSH en tant qu'utilisateur racine et que vous avez configuré une clé SSH pour l'utilisateur racine sur cette instance, vous pouvez vous connecter en tant qu'utilisateur racine à l'aide de la commande gcloud compute ssh
, en spécifiant root@
avant le nom de l'instance :
gcloud compute ssh \ --project=PROJECT_ID \ --zone=ZONE \ root@INSTANCE_NAME
Remplacez l'élément suivant :
PROJECT_ID
: identifiant du projet contenant l'instanceZONE
: nom de la zone dans laquelle se trouve l'instanceINSTANCE_NAME
: nom de l'instance
Connexion manuelle entre des instances en tant que compte de service
Dans certaines situations, vous souhaitez peut-être vous connecter à des instances et exécuter des commandes comme si vous étiez le compte de service associé à ces instances. La commande gcloud compute ssh
vous permet d'utiliser les identifiants SSH d'un compte de service pour vous connecter d'une instance à une autre, vous permettant ainsi d'exécuter des commandes sur la seconde instance en tant que compte de service.
Google Cloud CLI génère automatiquement une paire de clés SSH et l'associe au compte de service de votre instance. Une fois que vous êtes connecté à une autre instance en tant que compte de service, vous pouvez exécuter d'autres commandes gcloud
en utilisant les autorisations IAM du compte de service.
Pour cet exemple, supposons que vous disposiez de l'environnement suivant :
- Instance A :
- L'instance A est associée à un compte de service.
- Le compte de service associé à l'instance A possède les rôles OS Login nécessaires, configurés au niveau du projet ou spécifiquement pour la ressource de l'instance B.
- Le compte de service dispose du champ d'application
https://www.googleapis.com/auth/cloud-platform
au niveau de la plate-forme sur l'instance A.
- Instance B :
- L'instance B s'exécute sur le même réseau interne que l'instance A ou sur un réseau dont les règles de pare-feu autorisent les connexions SSH à partir de l'instance A.
- La fonctionnalité OS Login est activée sur votre projet ou spécifiquement sur l'instance B.
- Votre compte utilisateur personnel :
- Votre compte dispose du rôle
roles/iam.serviceAccountUser
pour le compte de service associé à l'instance A. - Votre compte dispose d'un accès SSH spécifique à l'instance A.
- Votre compte n'a pas accès à l'instance B. Le compte de service est le seul compte disposant des rôles OS Login nécessaires pour se connecter à l'instance B.
- Votre compte dispose du rôle
Connectez-vous à l'instance A et exécutez les commandes en tant que compte de service. Cette étape nécessite que vous disposiez du rôle roles/iam.serviceAccountUser
pour ce compte de service :
Connectez-vous à l'instance A en tant qu'utilisateur disposant du rôle
roles/iam.serviceAccountUser
. Par exemple, vous pouvez utiliser Google Cloud CLI pour établir cette première connexion SSH :gcloud compute ssh instance-a --project=PROJECT_ID --zone=ZONE
Tant que vous disposez du rôle
roles/iam.serviceAccountUser
, après avoir utilisé SSH pour vous connecter à l'instance A, vous pouvez exécuter des commandes en tant que compte de service. Dans cet exemple, exécutez gcloud CLI sur l'instance A pour créer une connexion chain-SSH avec l'instance B. gcloud CLI identifie que l'instance B est configurée pour utiliser OS Login, et que le compte de service dispose des rôles IAM nécessaires pour établir une connexion SSH avec l'instance B.gcloud compute ssh instance-b --project=PROJECT_ID --zone=ZONE
Le résultat ressemble à ce qui suit :
WARNING: Using OS Login user [sa_113491385848438711199] instead of default user [my-username] Linux instance-b 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 ⋮
Vous êtes maintenant connecté à l'instance B en tant que compte de service et pouvez exécuter des commandes en tant que compte de service. Par exemple :
sa_113491385848438711199@instance-b:~$ uname -a Linux instance-b 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 GNU/Linux
Étape suivante
- Découvrez comment les connexions SSH aux VM Linux fonctionnent sur Compute Engine.
- Découvrez comment vous connecter aux VM Linux à l'aide des outils Google.
- Découvrez comment vous connecter à des VM Linux à l'aide d'outils tiers.
- Apprenez à gérer l'accès aux instances de plusieurs utilisateurs au sein d'un projet ou d'une organisation.
- Connectez-vous en toute sécurité aux instances de VM.
- Transférez des fichiers vers vos instances Linux
- Découvrez comment résoudre les problèmes liés à SSH.
- Consultez le tutoriel Configurer le service Bureau à distance Chrome pour Linux sur Compute Engine.