Compatibilidad con SSH

En esta página, se describe cómo usar la CLI de gcloud para conectarte a tu estación de trabajo desde una máquina local con SSH (o cualquier otro protocolo TCP).

Cloud Workstations usa un túnel para reenviar el tráfico TCP entre un puerto de tu máquina local y un puerto de tu estación de trabajo sin exponer abiertamente tu estación de trabajo a Internet. Las conexiones se autentican con credenciales de la CLI de gcloud y se autorizan según las políticas de IAM de la estación de trabajo de destino.

Una vez que se establece el túnel TCP entre tu puerto local y la estación de trabajo, puedes usarlo para reenviar tráfico desde un cliente SSH, curl o cualquier otra aplicación que use TCP.

Para mayor comodidad, Cloud Workstations proporciona el comando gcloud workstations ssh, que establece el túnel TCP y ejecuta un cliente SSH con un solo comando de la CLI de gcloud.

Para todos los demás casos de uso, usa el comando gcloud workstations start-tcp-tunnel para establecer el túnel TCP y ejecutar la aplicación que usará el túnel (por ejemplo, curl) en una terminal separada.

Antes de comenzar

  1. Si aún no tienes una estación de trabajo a la que conectarte, configura una.

  2. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:

    gcloud init

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a la CLI de gcloud con tu identidad federada.

  3. Asegúrate de tener el rol de IAM de Usuario de Cloud Workstations en la estación de trabajo a la que te conectarás.

    Ir a IAM

Conéctate a tu estación de trabajo con SSH

Para establecer una conexión SSH segura con tu estación de trabajo, usa el comando gcloud workstations ssh, que inicia un túnel TCP y ejecuta un cliente SSH.

Ejecuta el siguiente comando en una ventana 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

Reemplaza los siguientes valores:

  • PROJECT_ID: ID del proyecto Google Cloud que contiene la estación de trabajo. Si se omite, se usa el proyecto actual.

  • REGION: Es la región en la que se encuentra el clúster de la estación de trabajo, por ejemplo, us-central1.

  • CLUSTER_NAME: Es el nombre del clúster de estaciones de trabajo que contiene la estación de trabajo.

  • CONFIG_NAME: Es el nombre de la configuración de la estación de trabajo que contiene esta estación de trabajo.

  • WORKSTATION_PORT (opcional): Es el puerto de la estación de trabajo al que se debe enviar el tráfico. Si se omite, el tráfico se enviará al puerto 22. Todas las imágenes preconfiguradas de Cloud Workstations incluyen un servidor SSH que se ejecuta en el puerto 22 de la estación de trabajo.

  • LOCAL_PORT (opcional): Es el puerto de localhost desde el que se enviará el tráfico. Los números de puerto válidos son del 1024 al 65535. Si omites la marca --local-host-port o especificas un puerto de 0, se seleccionará automáticamente un puerto que no esté en uso.

  • WORKSTATION_NAME: Es el nombre de la estación de trabajo.

Configuración de SSH y el archivo .ssh/config

Cuando usas gcloud workstations ssh, el comando enruta tu conexión a través de localhost. Como resultado, no aplica automáticamente las entradas Host de tu archivo ~/.ssh/config que usan el nombre de la estación de trabajo.

Para aplicar configuraciones de SSH personalizadas, elige una de las siguientes opciones:

Opción 1: Pasa marcas en la línea de comandos

Puedes pasar opciones de SSH directamente al cliente SSH subyacente agregándolas después de un doble guion (--):

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

Opción 2: Usa un túnel TCP persistente y .ssh/config

Si prefieres usar tu archivo ~/.ssh/config, sigue estos pasos:

  1. Inicia un túnel TCP persistente en una ventana de terminal independiente y especifica un puerto 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. Agrega un bloque de configuración a tu archivo ~/.ssh/config en tu máquina local:

    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. Conéctate a tu estación de trabajo con SSH estándar:

    ssh WORKSTATION_NAME
    

Usa un túnel TCP para reenviar tráfico TCP arbitrario a tu estación de trabajo

Para conectarte a una estación de trabajo con una aplicación TCP que no sea ssh, usa el comando gcloud workstations start-tcp-tunnel:

  1. Ejecuta el siguiente comando de la CLI de gcloud para crear un túnel TCP autenticado.

    Para copiar el comando en el búfer de copiar y pegar, haz clic en Copiar muestra de código y, luego, pega el comando en una ventana 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
    

    Reemplaza los siguientes valores:

    • PROJECT_ID: ID del proyecto Google Cloud que contiene la estación de trabajo. Si se omite, se usa el proyecto actual.

    • REGION: Es la región en la que se encuentra el clúster de la estación de trabajo, por ejemplo, us-central1.

    • CLUSTER_NAME: Es el nombre del clúster de estaciones de trabajo que contiene la estación de trabajo.

    • CONFIG_NAME: Es el nombre de la configuración de la estación de trabajo que contiene esta estación de trabajo.

    • LOCAL_PORT (opcional): Es el puerto de localhost desde el que se enviará el tráfico. Los números de puerto válidos son del 1024 al 65535. Si omites la marca --local-host-port o especificas un puerto de 0, se seleccionará automáticamente un puerto sin usar.

    • WORKSTATION_NAME: Es el nombre de la estación de trabajo.

    • WORKSTATION_PORT: Es el puerto de la estación de trabajo al que se debe enviar el tráfico. Las imágenes preconfiguradas de Cloud Workstations incluyen un servidor SSH que se ejecuta en el puerto 22 de la estación de trabajo.

  2. El comando de la CLI de gcloud realiza una prueba de conectividad con la estación de trabajo, abre un túnel y, luego, muestra un número de puerto:

    Listening on port [LOCAL_PORT].
    

    Todo el tráfico enviado a localhost:LOCAL_PORT se reenvía a la estación de trabajo. Solo las aplicaciones que se ejecutan en tu computadora local pueden acceder al puerto.

  3. Deja la CLI de gcloud en ejecución y abre otra terminal para ejecutar la aplicación que se conecta a tu estación de trabajo.

    Por ejemplo, si ejecutas un servidor en tu estación de trabajo que entrega el puerto WORKSTATION_PORT y, en el paso anterior, creaste un túnel TCP que reenvía el tráfico entre tu puerto local LOCAL_PORT y el puerto de la estación de trabajo WORKSTATION_PORT, puedes ejecutar curl en tu máquina local para conectarte al servidor en tu estación de trabajo:

    curl localhost:LOCAL_PORT
    Hello, world!
    
  4. Cuando termines, regresa a la terminal en la que iniciaste el túnel TCP y presiona Control + C para interrumpir la CLI de gcloud.

Usa servidores SSH en puertos diferentes

Las imágenes de contenedor personalizadas también pueden usar servidores SSH en cualquier puerto. Para admitir conexiones desde el túnel de la CLI de gcloud, debes configurar servidores SSH personalizados para permitir la autenticación con contraseña y establecer el usuario objetivo con una contraseña vacía. Cloud Workstations usa Cloud IAM para garantizar que solo se envíe tráfico autorizado al servidor SSH.

Cómo mantener persistentes las sesiones de SSH

Si se interrumpe la conexión de red, se desconectará tu sesión SSH. Para mantener tus procesos en ejecución mientras estás desconectado y volver a adjuntarlos a tu sesión más tarde, usa una herramienta como tmux.

Para instalar tmux en tu estación de trabajo, haz lo siguiente:

  1. Instala tmux de forma manual en tu sesión actual para usarlo de inmediato:

    sudo apt update
    sudo apt install -y tmux
    
  2. Configura tu estación de trabajo para instalar tmux durante el inicio. Crea o agrega al archivo /home/user/.workstation/customize_environment los siguientes comandos:

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

    Para obtener más información, consulta Cómo personalizar una imagen de estación de trabajo existente sin extenderla.

  3. Haz que el archivo sea ejecutable para que se ejecute cuando se inicie la estación de trabajo:

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

Una vez que se instala tmux, haz lo siguiente:

  1. Conéctate a tu estación de trabajo:

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME
    
  2. Inicia una nueva sesión de tmux desde tu estación de trabajo:

    tmux
    
  3. Si se interrumpe la conexión, vuelve a conectarte y adjunta tu sesión ejecutando el siguiente comando desde tu terminal local:

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

¿Qué sigue?