Compatibilité avec SSH

Cette page explique comment utiliser la gcloud CLI pour vous connecter à votre poste de travail depuis une machine locale à l'aide de SSH (ou de tout autre protocole TCP).

Cloud Workstations utilise un tunnel pour transférer le trafic TCP entre un port de votre machine locale et un port de votre poste de travail sans exposer ouvertement votre poste de travail à Internet. Les connexions sont authentifiées à l'aide des identifiants de la gcloud CLI et autorisées conformément aux stratégies IAM du poste de travail cible.

Une fois le tunnel TCP établi entre votre port local et le poste de travail, vous pouvez l'utiliser pour transférer le trafic à partir d'un client SSH, de curl ou de toute autre application utilisant TCP.

Pour plus de commodité, Cloud Workstations fournit la gcloud workstations ssh commande, qui établit le tunnel TCP et exécute un client SSH avec une seule gcloud commande CLI.

Pour tous les autres cas d'utilisation, utilisez la gcloud workstations start-tcp-tunnel commande pour établir le tunnel TCP et exécuter l'application qui utilisera le tunnel (par exemple, curl) dans un terminal distinct.

Avant de commencer

  1. Si vous ne disposez pas encore d'un poste de travail auquel vous connecter, configurez-en un.

  2. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisezla en exécutant la commande suivante :

    gcloud init

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  3. Assurez-vous de disposer du rôle Cloud IAM "Utilisateur Cloud Workstations" sur le poste de travail auquel vous vous connecterez.

    Accéder à IAM

Se connecter à votre poste de travail à l'aide de SSH

Pour établir une connexion SSH sécurisée à votre poste de travail, utilisez la gcloud workstations ssh commande, qui démarre un tunnel TCP et exécute un client SSH.

Exécutez la commande suivante dans une fenêtre de terminal local :

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME  \
    --port=WORKSTATION_PORT  \
    --local-host-port=localhost:LOCAL_PORT  \
    WORKSTATION_NAME

Remplacez les valeurs suivantes :

  • PROJECT_ID : ID du Google Cloud projet contenant le poste de travail. Si l'option est omise, le projet actuel est utilisé.

  • REGION: région où se trouve le cluster du poste de travail, par exemple us-central1.

  • CLUSTER_NAME: nom du cluster de postes de travail contenant le poste de travail.

  • CONFIG_NAME: nom de la configuration de poste de travail contenant ce poste de travail.

  • WORKSTATION_PORT (facultatif) : port du poste de travail auquel le trafic doit être envoyé. Si cette option est omise, le trafic est envoyé au port 22. Toutes les images Cloud Workstations préconfigurées incluent un serveur SSH qui s'exécute sur le port 22 du poste de travail.

  • LOCAL_PORT (facultatif) : port localhost à partir duquel le trafic sera envoyé. Les numéros de port valides sont compris entre 1024 et 65535. Si vous omettez l'option --local-host-port ou spécifiez un port 0, un port inutilisé est sélectionné automatiquement.

  • WORKSTATION_NAME : nom du poste de travail.

Configuration SSH et fichier .ssh/config

Lorsque vous utilisez gcloud workstations ssh, la commande achemine votre connexion via localhost. Par conséquent, elle n'applique pas automatiquement les entrées Host de votre fichier ~/.ssh/config qui utilisent le nom du poste de travail.

Pour appliquer des configurations SSH personnalisées, choisissez l'une des options suivantes :

Option 1 : Transmettre des options sur la ligne de commande

Vous pouvez transmettre des options SSH directement au client SSH sous-jacent en les ajoutant après un double tiret (--) :

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME \
    WORKSTATION_NAME \
    -- -o SSH_OPTION=VALUE

Option 2 : Utiliser un tunnel TCP persistant et .ssh/config

Si vous préférez utiliser votre fichier ~/.ssh/config :

  1. Démarrez un tunnel TCP persistant dans une fenêtre de terminal distincte et spécifiez un port local :

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        22
    
  2. Ajoutez un bloc de configuration à votre fichier ~/.ssh/config sur votre machine locale :

    Host WORKSTATION_NAME
        HostName localhost
        Port LOCAL_PORT
        User user
        # Disable host key checking for ephemeral cloud workstations
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
        # Add any other SSH options here
    
  3. Connectez-vous à votre poste de travail à l'aide de SSH standard :

    ssh WORKSTATION_NAME
    

Utiliser un tunnel TCP pour transférer du trafic TCP arbitraire vers votre poste de travail

Pour vous connecter à un poste de travail à l'aide d'une application TCP autre que ssh, utilisez la gcloud workstations start-tcp-tunnel commande :

  1. Exécutez la commande gcloud CLI suivante pour créer un tunnel TCP authentifié.

    Pour copier la commande dans le presse-papiers, cliquez sur Copier l'exemple de code, puis collez la commande dans une fenêtre de terminal local :

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        WORKSTATION_PORT
    

    Remplacez les valeurs suivantes :

    • PROJECT_ID : ID du Google Cloud projet contenant le poste de travail. Si l'option est omise, le projet actuel est utilisé.

    • REGION: région où se trouve le cluster du poste de travail, par exemple us-central1.

    • CLUSTER_NAME: nom du cluster de postes de travail contenant le poste de travail.

    • CONFIG_NAME: nom de la configuration de poste de travail contenant ce poste de travail.

    • LOCAL_PORT (facultatif) : port localhost à partir duquel le trafic sera envoyé. Les numéros de port valides sont compris entre 1024 et 65535. Si vous omettez l'option --local-host-port ou spécifiez un port 0, un port inutilisé est sélectionné automatiquement.

    • WORKSTATION_NAME : nom du poste de travail.

    • WORKSTATION_PORT: port du poste de travail auquel le trafic doit être envoyé. Les images Cloud Workstations préconfigurées incluent un serveur SSH qui s'exécute sur le port 22 du poste de travail.

  2. La commande gcloud CLI effectue un test de connectivité avec le poste de travail, ouvre un tunnel, puis affiche un numéro de port :

    Listening on port [LOCAL_PORT].
    

    Tout le trafic envoyé à localhost:LOCAL_PORT est transféré au poste de travail. Le port n'est accessible que par les applications exécutées sur votre ordinateur local.

  3. Laissez la gcloud CLI s'exécuter et ouvrez un autre terminal pour exécuter l' application qui se connecte à votre poste de travail.

    Par exemple, si vous exécutez un serveur sur votre poste de travail qui dessert le port WORKSTATION_PORT, et que vous avez créé à l'étape précédente un tunnel TCP qui transfère le trafic entre votre port local LOCAL_PORT et le port WORKSTATION_PORT du poste de travail, vous pouvez exécuter curl sur votre machine locale pour vous connecter au serveur de votre poste de travail :

    curl localhost:LOCAL_PORT
    Hello, world!
    
  4. Lorsque vous avez terminé, revenez au terminal où vous avez démarré le tunnel TCP et interrompez la gcloud CLI en appuyant sur Control+C.

Utiliser des serveurs SSH sur différents ports

Les images de conteneurs personnalisées peuvent également utiliser des serveurs SSH sur n'importe quel port. Pour prendre en charge les connexions à partir du gcloud tunnel CLI, vous devez configurer des serveurs SSH personnalisés pour autoriser l' authentification par mot de passe et définir l'utilisateur cible avec un mot de passe vide. Cloud Workstations utilise Cloud IAM pour s'assurer que seul le trafic autorisé est envoyé au serveur SSH.

Maintenir les sessions SSH persistantes

Si votre connexion réseau est interrompue, votre session SSH est déconnectée. Pour que vos processus continuent de s'exécuter lorsque vous êtes déconnecté et que vous puissiez vous reconnecter à votre session ultérieurement, utilisez un outil tel que tmux.

Pour installer tmux sur votre poste de travail :

  1. Installez tmux manuellement dans votre session actuelle pour l'utiliser immédiatement :

    sudo apt update
    sudo apt install -y tmux
    
  2. Configurez votre poste de travail pour installer tmux au démarrage. Créez le fichier /home/user/.workstation/customize_environment ou ajoutez-y les commandes suivantes :

    #!/bin/bash
    sudo apt update
    sudo apt install -y tmux
    

    Pour en savoir plus, consultez Personnaliser une image de poste de travail existante sans l'étendre.

  3. Rendez le fichier exécutable afin qu'il s'exécute au démarrage du poste de travail :

    chmod +x /home/user/.workstation/customize_environment
    

Une fois tmux installé :

  1. Connectez-vous à votre poste de travail :

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME
    
  2. Démarrez une session tmux à partir de votre poste de travail :

    tmux
    
  3. Si votre connexion est interrompue, reconnectez-vous et attachez-vous à votre session en exécutant la commande suivante à partir de votre terminal local :

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME \
        -- -t tmux attach
    

Étape suivante