Agrega claves SSH a las VM


En este documento, se describe cómo agregar claves SSH a instancias de máquina virtual (VM) que usan el Acceso al SO y VMs que usan claves SSH basadas en metadatos. Si tú o tu administrador de la organización no han habilitado el Acceso al SO, las VM usarán claves SSH basadas en metadatos.

Antes de comenzar

  • Para obtener información sobre cómo administrar el acceso a tus VM de Compute Engine, consulta Elige un método de acceso.
  • Si aún no lo hiciste, crea un par de claves SSH.
  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Para usar las muestras de Terraform de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Para obtener más información, consulta Set up authentication for a local development environment.

      REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Agrega claves a las VMs que usan el Acceso al SO

Las VM que usan el Acceso al SO aceptan claves SSH asociadas con tu Cuenta de Google. Puedes asociar una clave SSH pública con tu Cuenta de Google mediante la CLI de gcloud o la API de Acceso al SO. Si eres administrador de tu organización, puedes agregar claves SSH a las cuentas de usuario mediante la API de Directory.

Cuando agregas claves SSH a tu Cuenta de Google, Compute Engine genera un nombre de usuario para ti mediante la combinación del nombre de usuario y el dominio del correo electrónico asociado con tu Cuenta de Google. Por ejemplo, si tu dirección de correo electrónico es cloudysanfrancisco@gmail.com, tu nombre de usuario es cloudysanfrancisco_gmail_com. Si agregas una clave SSH a un proyecto que está fuera de la organización, el nombre de usuario tiene el prefijo ext_, por ejemplo, ext_cloudysanfrancisco_gmail_com. El administrador de tu organización puede personalizar tu nombre de usuario con la API de Directory. Si ya tienes un nombre de usuario configurado, Compute Engine lo usa cuando agregas claves SSH.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para agregar una clave SSH pública a tu cuenta, usa el comando gcloud compute os-login ssh-keys add:

    gcloud compute os-login ssh-keys add \
       --key-file=KEY_FILE_PATH \
       --project=PROJECT \
       --ttl=EXPIRE_TIME
    

    Reemplaza lo siguiente:

    • KEY_FILE_PATH: Es la ruta a la clave SSH pública en la estación de trabajo local. La clave debe usar el formato public-openssh
    • PROJECT: Es un proyecto en el que deseas usar tu clave SSH (opcional). Especifica este campo para usar tu clave SSH en un proyecto fuera de la organización o si no eres miembro de una organización de Cloud Identity.
    • EXPIRE_TIME: Es la hora de vencimiento de la clave SSH (opcional).

      Por ejemplo, si especificas 30m, la clave SSH vence después de 30 minutos.

      En esta marca, se usan las siguientes unidades:

      • s para los segundos
      • m para los minutos
      • h para las horas
      • d para los días

Terraform

Para agregar una clave SSH pública a tu cuenta, usa el recurso google_client_openid_userinfo junto con el recurso google_os_login_ssh_public_key.

data "google_client_openid_userinfo" "me" {
}

resource "google_os_login_ssh_public_key" "default" {
  user = data.google_client_openid_userinfo.me.email
  key  = file("id_rsa.pub") # path/to/ssl/id_rsa.pub
}

REST

Para agregar una clave SSH pública a tu cuenta, usa el método users.importSshPublicKey de la API de Acceso al SO:

POST https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL:importSshPublicKey

{
 "key": "SSH_KEY",
 "expirationTimeUsec": "EXPIRATION_TIMESTAMP"
}

Reemplaza lo siguiente:

  • ACCOUNT_EMAIL: Es la dirección de correo electrónico asociada a tu cuenta.
  • SSH_KEY: La clave pública que deseas agregar a la cuenta
  • EXPIRATION_TIMESTAMP: La hora de vencimiento de la clave, en microsegundos y desde el ciclo de entrenamiento (1 segundo = 106 microsegundos)

Agrega claves SSH a las VM que usan claves SSH basadas en metadatos

Las VMs que no usan el Acceso al SOalmacenan claves SSH en los metadatos de proyecto y de instancia de Compute Engine. Puedes usar claves SSH almacenadas en metadatos del proyecto para acceder a todas las VMs de un proyecto. Puedes usar claves SSH almacenadas en metadatos de la instancia para acceder a VM individuales.

Compute Engine no quita automáticamente las claves SSH vencidas de los metadatos en el momento del vencimiento, pero no se pueden usar para establecer conexiones nuevas a las VMs. Si deseas quitar las claves vencidas de los metadatos, consulta Quita las claves SSH de las VMs que usan claves basadas en metadatos.

Puedes agregar una clave SSH pública a metadatos del proyecto o a la instancia de VM con la consola de Google Cloud, gcloud CLI o REST.

Agrega claves SSH a los metadatos del proyecto

Puedes agregar una clave SSH pública a metadatos de proyectos para acceder a todas las VM en un proyecto, excepto las VM que bloquean las claves SSH de nivel de proyecto. Para obtener más información sobre el bloqueo de claves SSH de nivel de proyecto, consulta Bloquea claves SSH de VM que usan claves SSH basadas en metadatos.

Console

Para agregar una clave SSH pública a los metadatos del proyecto con la consola de Google Cloud, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Metadatos.

    Ir a metadatos

  2. Haz clic en la pestaña Claves SSH.

  3. Haz clic en Editar.

  4. Haz clic en Agregar elemento.

  5. En el campo Clave SSH que se abre, agrega tu clave SSH pública. La clave debe tener uno de los siguientes formatos:

    • Formato para una clave sin una hora de vencimiento:

      KEY_VALUE USERNAME
    • Formato para una clave con una hora de vencimiento:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

    Reemplaza lo siguiente:

    • KEY_VALUE: El valor de la clave SSH pública
    • USERNAME: tu nombre de usuario. Por ejemplo, cloudysanfrancisco o cloudysanfrancisco_gmail_com.

      Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a VMs de Linux como usuario raíz.

      Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

    • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000
  6. Haz clic en Guardar.

gcloud

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  1. Si hay claves SSH existentes en los metadatos del proyecto, debes volver a agregarlas a los metadatos del proyecto cada vez que agregues una clave SSH nueva mediante la CLI de gcloud. Si no vuelves a agregar tus claves actuales, agregar una nueva borrará las existentes.

    Para agregar una clave SSH pública a los metadatos del proyecto con la CLI de gcloud, haz lo siguiente:

    1. Si tu proyecto ya tiene claves SSH públicas de nivel de proyecto, obtén esos metadatos y agrégalos a un archivo nuevo:

      1. Ejecuta el comando gcloud compute project-info describe a fin de obtener las claves SSH para el proyecto:

        gcloud compute project-info describe \
         --format="value(commonInstanceMetadata[items][ssh-keys])"
        

        El resultado es similar a este:

        username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
        
      2. Copia el valor de metadatos ssh-keys.

      3. Crea y abre un nuevo archivo de texto en tu estación de trabajo.

      4. En el archivo, pega la lista de las claves que acabas de copiar.

      5. Agrega la clave nueva al final de la lista en uno de los siguientes formatos:

        • Formato para una clave sin una hora de vencimiento:

          USERNAME:KEY_VALUE
        • Formato para una clave con una hora de vencimiento:

          USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

        Reemplaza lo siguiente:

        • KEY_VALUE: El valor de la clave SSH pública
        • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

          Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

          Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

        • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000
      6. Guarde y cierre el archivo.

    2. Ejecuta el comando gcloud compute project-info add-metadata a fin de configurar el valor ssh-keys de todo el proyecto:

      gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
      

      Reemplaza KEY_FILE por uno de los siguientes valores:

      • La ruta de acceso al archivo que creaste en el paso anterior, si el proyecto tenía claves SSH existentes
      • La ruta de acceso a tu nuevo archivo de claves SSH públicas, si el proyecto no tenía claves SSH existentes

Terraform

Para agregar una clave SSH pública a los metadatos del proyecto, usa el recurso google_compute_project_metadata.

resource "google_compute_project_metadata" "default" {
  metadata = {
    ssh-keys = <<EOF
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
    EOF
  }
}

REST

Si hay claves SSH existentes en los metadatos del proyecto, debes volver a agregarlas a los metadatos del proyecto cada vez que agregues una clave SSH nueva mediante la API de Compute Engine. Si no vuelves a agregar tus claves actuales, agregar una nueva borrará las existentes.

Para agregar una clave SSH pública a los metadatos del proyecto con la API de Compute Engine, haz lo siguiente:

  1. Obtén los valores fingerprint y ssh-keys de los metadatos a través del método projects.get.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    Reemplaza PROJECT_ID con el ID del proyecto.

    La respuesta es similar al ejemplo a continuación:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Agrega el valor ssh-keys nuevo con el método projects.setCommonInstanceMetadata.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • EXISTING_SSH_KEYS: Es el valor de la clave ssh-keys de la respuesta de la solicitud projects.get.
    • FINGERPRINT: Es el valor de fingerprint de la respuesta de la solicitud projects.get.
    • NEW_SSH_KEY: Es la nueva clave SSH, en uno de los siguientes formatos:

      • Formato para una clave sin una hora de vencimiento:

        USERNAME:KEY_VALUE
      • Formato para una clave con una hora de vencimiento:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      Reemplaza lo siguiente:

      • KEY_VALUE: El valor de la clave SSH pública
      • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

        Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

        Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

      • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000

Agrega claves SSH a los metadatos de la instancia

Puedes agregar una clave SSH pública a los metadatos de la instancia cuando creas una VM o después de crear una VM.

Agrega claves SSH a los metadatos de la instancia durante la creación de la VM

Puedes agregar claves SSH a los metadatos de la instancia durante la creación de la VM mediante la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.

Console

Para crear una VM y agregar una clave SSH pública a los metadatos de la instancia al mismo tiempo mediante la consola de Google Cloud, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Crea una instancia.

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. Expande la sección Opciones avanzadas y sigue estos pasos:

    1. Expande la sección Seguridad.

    2. Selecciona Agregar claves SSH generadas manualmente.

    3. Haz clic en Agregar elemento.

    4. Agrega tu clave pública en el cuadro de texto. La clave debe tener uno de los siguientes formatos:

      • Formato para una clave sin una hora de vencimiento:

        KEY_VALUE USERNAME
      • Formato para una clave con una hora de vencimiento:

        KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      Reemplaza lo siguiente:

      • KEY_VALUE: El valor de la clave SSH pública
      • USERNAME: tu nombre de usuario. Por ejemplo, cloudysanfrancisco o cloudysanfrancisco_gmail_com.

        Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a VMs de Linux como usuario raíz.

        Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

      • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000
  4. Para crear y, también, iniciar la VM, haz clic en Crear.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para crear una VM y agregar una clave SSH pública a los metadatos de la instancia al mismo tiempo mediante la CLI de gcloud, usa el gcloud compute instances createcomando :

    gcloud compute instances create VM_NAME \
       --metadata=ssh-keys=PUBLIC_KEY
    

    Reemplaza lo siguiente:

    • VM_NAME: es el nombre de la VM nueva.
    • PUBLIC_KEY: Es tu clave SSH pública, en uno de los siguientes formatos:

      • Formato para una clave sin una hora de vencimiento:

        USERNAME:KEY_VALUE
      • Formato para una clave con una hora de vencimiento:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      Reemplaza lo siguiente:

      • KEY_VALUE: El valor de la clave SSH pública
      • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

        Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

        Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

      • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000

    Puedes agregar varias claves SSH mediante la marca --metadata-from-file=ssh-keys=FILE_PATH. En el archivo, agrega una lista de nombres de usuario y claves SSH públicas en uno de los formatos anteriores.

Terraform

Para agregar una clave SSH pública a los metadatos de la instancia, usa el recurso google_compute_instance.

resource "google_compute_instance" "default" {
  name         = "my-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-1404-trusty-v20160627"
    }
  }

  # Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"
    access_config {}
  }
  metadata = {
    "ssh-keys" = <<EOT
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
     EOT
  }
}

REST

Para crear una VM y agregar una clave SSH pública a los metadatos de la instancia al mismo tiempo mediante Compute Engine, crea una solicitud POST para el método instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto
  • ZONE: La zona de la VM

En el cuerpo de la solicitud, proporciona los nombres de usuario y las claves SSH públicas en la propiedad items:

...
{
 "items": [
    {
     "key": "ssh-keys",
     "value": "PUBLIC_KEY"
    }
   ]
}
...

Reemplaza PUBLIC_KEY por tu clave pública, en uno de los siguientes formatos:

  • Formato para una clave sin una hora de vencimiento:

    USERNAME:KEY_VALUE
  • Formato para una clave con una hora de vencimiento:

    USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

Reemplaza lo siguiente:

  • KEY_VALUE: El valor de la clave SSH pública
  • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

    Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

    Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

  • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000

Para agregar varias claves SSH, agrega \n entre las claves.

Agrega claves SSH a los metadatos de la instancia después de crearla

Puedes agregar claves SSH a los metadatos de la instancia después de crear la VM con la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.

Console

Para agregar una clave SSH pública a los metadatos de la instancia mediante la consola de Google Cloud, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la VM para la que quieres agregar una clave SSH.

  3. Haz clic en Editar.

  4. En Llaves SSH, haz clic en Agregar elemento.

  5. Agrega tu clave pública al cuadro de texto. La clave debe tener uno de los siguientes formatos:

    • Formato para una clave sin una hora de vencimiento:

      KEY_VALUE USERNAME
    • Formato para una clave con una hora de vencimiento:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

    Reemplaza lo siguiente:

    • KEY_VALUE: El valor de la clave SSH pública
    • USERNAME: tu nombre de usuario. Por ejemplo, cloudysanfrancisco o cloudysanfrancisco_gmail_com.

      Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a VMs de Linux como usuario raíz.

      Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

    • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000
  6. Haz clic en Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Si hay claves SSH existentes en los metadatos de la instancia, debes volver a agregarlas a los metadatos de la instancia cada vez que agregues una llave SSH nueva con la CLI de gcloud. Si no vuelves a agregar tus claves actuales, agregar una nueva borrará las existentes.

    Para agregar una clave SSH pública a los metadatos de la instancia mediante la CLI de gcloud, haz lo siguiente:

    1. Si tu VM ya tiene claves SSH públicas de nivel de instancia, obtén esas claves de los metadatos y agrégalas a un archivo nuevo:

      1. Ejecuta el comando gcloud compute instances describe a fin de obtener los metadatos para la VM:

        gcloud compute instances describe VM_NAME
        

        Reemplaza VM_NAME por el nombre de la VM para la que necesitas agregar o quitar las claves SSH públicas.

        El resultado es similar a este:

        ...
        metadata:
        ...
        - key: ssh-keys
         value: |-
           cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...
           baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
        ...
        
      2. Copia el valor de metadatos ssh-keys.

      3. Crea y abre un nuevo archivo de texto en tu estación de trabajo.

      4. En el archivo, pega la lista de las claves que acabas de copiar.

      5. Agrega la clave nueva al final de la lista en uno de los siguientes formatos:

      • Formato para una clave sin una hora de vencimiento:

        USERNAME:KEY_VALUE
      • Formato para una clave con una hora de vencimiento:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      Reemplaza lo siguiente:

      • KEY_VALUE: El valor de la clave SSH pública
      • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

        Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

        Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

      • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000
      1. Guarde y cierre el archivo.
    2. Ejecuta el comando gcloud compute instances add-metadata para configurar el valor ssh-keys:

      gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
      

      Reemplaza lo siguiente:

      • VM_NAME: Es la VM a la que deseas agregar la clave SSH
      • KEY_FILE por uno de los siguientes valores:
      • La ruta al archivo que creaste en el paso anterior, si la VM tenía claves SSH existentes
      • La ruta a tu nuevo archivo de claves SSH públicas, si la VM no tenía claves SSH existentes

REST

Si hay claves SSH existentes en los metadatos de la instancia, debes volver a agregarlas a los metadatos de la instancia cada vez que agregues una nueva clave SSH mediante la API de Compute Engine. Si no vuelves a agregar tus claves actuales, agregar una nueva borrará las existentes.

Para agregar una clave SSH pública a los metadatos de la instancia con la API de Compute Engine, haz lo siguiente:

  1. Obtén los valores fingerprint y ssh-keys de los metadatos mediante el método instances.get.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • ZONE: Es la zona de la VM para agregar una clave SSH.
    • VM_NAME: Es la VM para la que agregarás una clave SSH.

    La respuesta es similar al ejemplo a continuación:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Agrega el valor ssh-keys nuevo con el método instances.setMetadata.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • EXISTING_SSH_KEYS: Es el valor de la clave ssh-keys de la respuesta de la solicitud instances.get.
    • FINGERPRINT: la fingerprint de la respuesta de la solicitud projects.get
    • NEW_SSH_KEY: Es la nueva clave SSH, en uno de los siguientes formatos:

      • Formato para una clave sin una hora de vencimiento:

        USERNAME:KEY_VALUE
      • Formato para una clave con una hora de vencimiento:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      Reemplaza lo siguiente:

      • KEY_VALUE: El valor de la clave SSH pública
      • USERNAME: tu nombre de usuario. Por ejemplo: cloudysanfrancisco o cloudysanfrancisco_gmail_com.

        Para las VM de Linux, USERNAME no puede ser root, a menos que configures tu VM para permitir el acceso raíz. Para obtener más información, consulta Conéctate a instancias como usuario raíz.

        Para las VM de Windows que usan Active Directory (AD), el nombre de usuario debe estar agregado al dominio de AD, en el formato DOMAIN\. Por ejemplo, el usuario cloudysanfrancisco dentro del AD ad.example.com tiene un USERNAME de example\cloudysanfrancisco.

      • EXPIRE_TIME: La hora en que vence la clave, en formato ISO 8601. Por ejemplo: 2021-12-04T20:12:00+0000

Próximos pasos