Administra Llaves SSH en los metadatos

En esta guía, se muestra cómo controlar el acceso a instancias de Linux mediante la creación manual de Llaves SSH y la edición de metadatos públicos de Llaves SSH. Si quieres verificar si la administración de Llaves SSH en metadatos es la mejor opción para tu caso práctico, consulta Elige un método de acceso.

También puedes conectarte a instancias a través de Google Cloud Platform Console, donde Compute Engine gestiona el ciclo de vida completo de sus claves de forma automática o con la herramienta de línea de comandos de gcloud en el SDK, donde Compute Engine configura los metadatos de Llave SSH persistentes para ti.

Si eres un usuario avanzado que necesita administrar las Llaves SSH de forma manual, consulta la administración del acceso a instancias mediante OS Login. Si administras tus Llaves SSH mediante OS Login en instancias, se inhabilitan las configuraciones de Llaves SSH basadas en metadatos en esas instancias.

Antes de comenzar

Permisos necesarios para esta tarea

Debes contar con los permisos siguientes para realizar esta tarea:

  • compute.instances.setMetadata en la instancia, si se configuran metadatos en la instancia
  • compute.projects.setCommonInstanceMetadata en el proyecto, si se establecen los metadatos para todo el proyecto
  • iam.serviceAccounts.actAs en el proyecto, si se establecen los metadatos para todo el proyecto

Riesgos de la administración de claves manual

Si creas y administras Llaves SSH públicas a través de la GCP Console, la herramienta de línea de comandos de gcloud o la API, debes realizar un seguimiento de las claves que se usaron y borrar las Llaves SSH públicas para los usuarios que ya no tienen acceso. Por ejemplo, si un miembro del equipo abandona tu proyecto, debes quitar sus Llaves SSH públicas de los metadatos para que no tengan más acceso a tus instancias.

Además, si especificas de forma incorrecta tu herramienta de gcloud o las llamadas a la API, se podrían borrar todas las Llaves SSH públicas de tu proyecto o de tus instancias, lo que interrumpe las conexiones para los miembros de tu proyecto.

Si no estás seguro de querer administrar tus propias claves, usa las herramientas de Compute Engine para conectarte a tus instancias.

Descripción general

Cuando creas y administras Llaves SSH, puedes permitir que los usuarios accedan a una instancia de Linux a través de herramientas de terceros.

Una Llave SSH consta de los archivos siguientes:

  • Un archivo de Llaves SSH públicas que se aplica a los metadatos de nivel de instancia o los metadatos de nivel de proyecto
  • Un archivo de Llaves SSH privadas que el usuario almacena en sus dispositivos locales

Si un usuario presenta sus Llaves SSH privadas, puede usar una herramienta de terceros para conectarse a cualquier instancia que esté configurada con el archivo de Llaves SSH públicas correspondiente, incluso si no es miembro de tu proyecto de Google Cloud Platform. Por lo tanto, puedes controlar a qué instancias puede acceder un usuario si cambias los metadatos de Llave SSH pública para una o más instancias.

Para editar los metadatos de una Llave SSH pública, sigue estos pasos:

  1. Decide qué herramienta usarás para editar metadatos:

  2. Si necesitas agregar usuarios a una instancia de Linux, prepara sus Llaves SSH públicas con los procesos siguientes:

  3. Edita los metadatos de Llaves SSH públicas para agregar o quitar usuarios de una instancia de Linux.

  4. Conéctate a tu instancia de Linux mediante una herramienta de terceros para asegurarte de que cada Llave SSH pública se agregue o quite de forma correcta. Un usuario solo puede conectarse a una instancia si su Llave SSH pública está disponible para la instancia a través del servidor de metadatos y si tiene la Llave SSH privada correspondiente.

Crea una Llave SSH nueva

Si no tienes un archivo de Llaves SSH privadas existente y un archivo de Llaves SSH públicas coincidente que puedas usar, debes generar una Llave SSH nueva. Si quieres usar una Llave SSH existente, ubica el archivo de Llaves SSH públicas.

Linux y macOS

En estaciones de trabajo de Linux o macOS, puedes generar una clave con la herramienta ssh-keygen.

  1. Para generar una clave nueva, abre una terminal en su estación de trabajo y usa el comando ssh-keygen. Especifica la marca -C para agregar un comentario con tu nombre de usuario.

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    en la que:

    • [KEY_FILENAME] es el nombre que quieres usar para tus archivos de Llaves SSH. Por ejemplo, un nombre de archivo de my-ssh-key genera un archivo de clave privada llamado my-ssh-key y un archivo de clave pública llamado my-ssh-key.pub.
    • [USERNAME] es el nombre del usuario que se conecta a la instancia.

    Con este comando, se genera un archivo de Llaves SSH privadas y una Llave SSH pública coincidente con la estructura siguiente:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    en la que:

    • [KEY_VALUE] es el valor de clave que generaste.
    • [USERNAME] es el usuario al que se aplica esta clave.
  2. Restringe el acceso a tu clave privada de forma que solo tú puedas leerla y nadie pueda escribir en ella.

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    en la que [KEY_FILENAME] es el nombre que usaste para tus archivos de Llaves SSH.

Repite este proceso para cada usuario que necesite una clave nueva. Luego, ubica las Llaves SSH públicas que creaste y cualquier Llave SSH pública existente que quieras agregar a un proyecto o instancia.

Windows

Windows no tiene una herramienta integrada para generar Llaves SSH, por lo que debes generarlas mediante una herramienta de terceros si estás en una estación de trabajo de Windows. Aquí, se explica cómo generar Llaves SSH con la herramienta PuTTYgen.

  1. Descarga puttygen.exe.

  2. Ejecuta PuTTYgen. Para este ejemplo, ejecuta el archivo puttygen.exe que descargaste. Se abrirá una ventana en la que puedes configurar la generación de claves.

  3. Haz clic en Generar y sigue las instrucciones en pantalla para generar una clave nueva. En la mayoría de los casos, los parámetros predeterminados son adecuados, pero debes generar claves de, al menos, 2,048 bits. Cuando termines de generar la clave, la herramienta mostrará el valor de tu clave pública.

  4. En la sección Comentario de clave (Key comment), reemplaza el texto existente por el nombre del usuario al que se aplicará la clave.

  5. De forma opcional, puedes ingresar una Frase de contraseña de clave para protegerla.

  6. Haz clic en Guardar clave privada para escribir tu clave privada en un archivo con una extensión .ppk.

  7. Haz clic en Guardar clave pública para escribir tu clave pública en un archivo y usarla más tarde. Por ahora, mantén abierta la ventana de PuTTYgen.

    La clave pública con el formato correcto está disponible en la parte superior de la pantalla de PuTTYgen:

    Clave pública de PuTTYgen

    Esta clave pública tiene la estructura siguiente:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    en la que:

    • [KEY_VALUE] es el valor de clave que generaste.
    • [USERNAME] es el usuario al que se aplica esta clave.

Repite este proceso para cada usuario al que necesites crearle una clave. Luego, si tienes otras Llaves SSH públicas para los usuarios que quieras agregar a un proyecto o instancia, debes ubicar sus llaves SSH públicas ahora. De lo contrario, formatea las Llaves SSH públicas que creaste.

Ubica una Llave SSH

Hay varias razones por las que puede ser necesario ubicar una Llave SSH. Por ejemplo, si quieres agregar la Llave SSH pública de un usuario a un proyecto o instancia, debes acceder al archivo de clave pública para su clave. Como alternativa, es posible que debas ubicar tu archivo de Llave SSH privada antes de poder conectarte a una instancia de Linux.

Cuando se crea una Llave SSH, esta se guarda en una ubicación predeterminada. Las ubicaciones y los nombres predeterminados de tus archivos de Llaves SSH públicas y privadas dependen de las herramientas que se usaron para crear cada clave.

Linux y macOS

Si creaste una clave en una estación de trabajo en Linux o macOS mediante la herramienta ssh-keygen, tu clave se guardó en las ubicaciones siguientes:

  • Archivo de clave pública: ~/.ssh/[KEY_FILENAME].pub
  • Archivo de clave privada: ~/.ssh/[KEY_FILENAME]

en la que [KEY_FILENAME] es el nombre de archivo de la Llave SSH, que se estableció cuando se creó la clave.

Si necesitas agregar o quitar la Llave SSH pública de los metadatos de proyecto o instancia, formatea el archivo de Llaves SSH públicas.

Windows

Si creaste una clave en una estación de trabajo de Windows mediante la herramienta PuTTYgen, tus archivos de claves públicas y privadas se guardaron en las ubicaciones que designaste en los formatos siguientes:

  • Clave pública: [PUBLIC_KEY_FILENAME]
  • Clave privada: [PRIVATE_KEY_FILENAME].ppk

en la que [PUBLIC_KEY_FILENAME] y [PRIVATE_KEY_FILENAME] son los nombres de archivo de las Llaves SSH públicas y privadas, que se configuraron cuando se guardaron por primera vez.

Una Llave SSH pública predeterminada creada con PuTTYgen debe tener el formato siguiente:

ssh-rsa [KEY_VALUE] [USERNAME]

en la que:

  • [KEY_VALUE] es el valor de la Llave SSH pública.
  • [USERNAME] es el usuario de la instancia para el que aplicaste la clave.

Para ver tu Llave SSH pública de PuTTYgen con el formato correcto, sigue estos pasos:

  1. Ejecuta PuTTYgen. Si no tienes PuTTYgen, descarga y ejecuta puttygen.exe.

  2. Haz clic en Cargar para seleccionar y abrir tu archivo de Llaves SSH públicas.

  3. Una vez que se cargue el archivo de claves públicas, el valor de la Llave SSH pública con el formato correcto estará disponible en la parte superior de la pantalla de PuTTYgen:

    Clave pública de PuTTYgen

Si necesitas agregar o quitar la Llave SSH pública de los metadatos de proyecto o instancia, formatea el archivo de Llaves SSH públicas.

gcloud

Si ya te conectaste a una instancia mediante la herramienta de gcloud, tus claves ya se generaron y aplicaron a tu proyecto o instancia. Los archivos de claves están disponibles en las ubicaciones siguientes:

  • Linux y macOS
    • Clave pública: $HOME/.ssh/google_compute_engine.pub
    • Clave privada: $HOME/.ssh/google_compute_engine
  • Windows:
    • Clave pública: C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • Clave privada: C:\Users\[USERNAME]\.ssh\google_compute_engine

en la que [USERNAME] es tu nombre de usuario en tu estación de trabajo local.

Para ver dónde se aplicaron tus Llaves SSH públicas, busca la clave pública en los metadatos de tu proyecto y los metadatos de instancia. Si necesitas agregar o quitar la Llave SSH pública de los metadatos de proyecto o instancia, primero debes formatear el archivo de Llaves SSH públicas.

Formatea tus archivos de Llaves SSH públicas

Antes de poder subir tus Llaves SSH públicas a los metadatos de tu proyecto o instancia, debes verificar el formato de cada archivo que planeas agregar.

Según la herramienta que uses a fin de editar metadatos, debes formatear tus claves para que funcionen en GCP Console, la herramienta de línea de comandos de gcloud o los métodos de API. De forma opcional, también puedes cambiar tus Llaves SSH públicas para agregar, editar o quitar un período de vencimiento.

Console

Para verificar el formato de una Llave SSH pública, sigue estos pasos:

  1. Ubica y abre el archivo de Llaves SSH públicas.

  2. Verifica el formato del archivo de Llaves SSH públicas.

    • Si una Llave SSH pública tiene un período de caducidad, debe tener el formato siguiente:

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

      en la que:

      • [KEY_VALUE] es el valor de la Llave SSH pública.
      • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
      • [EXPIRE_TIME] es un valor en formato ISO 8601. Por ejemplo: 2018-12-04T20:12:00+0000.
    • De lo contrario, la Llave SSH pública debe tener el formato siguiente:

      ssh-rsa [KEY_VALUE] [USERNAME]

      en la que:

      • [KEY_VALUE] es el valor de la Llave SSH pública.
      • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
  3. Si tu clave no coincide con uno de los formatos anteriores o si quieres agregar, editar o quitar un período de vencimiento, sigue las instrucciones a continuación para formatear tu Llave SSH pública. De lo contrario, deja el archivo abierto y agrega la Llave SSH pública a los metadatos de proyecto o instancia.

Si quieres formatear una Llave SSH pública para la consola, sigue estos pasos:

  1. Haz una copia de tu archivo de claves públicas. Usa la copia con Compute Engine y guarda el archivo original para usarlo con tus otras configuraciones de SSH.

  2. Abre la copia de tu archivo de claves públicas.

  3. Modifica el archivo de claves públicas para que tenga el formato siguiente:

    ssh-rsa [KEY_VALUE] [USERNAME]

    en la que:

    • [KEY_VALUE] es el valor de la Llave SSH pública.
    • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.

    Como alternativa, si quieres que la Llave SSH pública tenga un período de caducidad, modifica el archivo para que coincida con el formato siguiente:

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

    en la que:

    • [KEY_VALUE] es el valor de la Llave SSH pública.
    • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
    • [EXPIRE_TIME] es un valor en formato ISO 8601. Por ejemplo: 2018-12-04T20:12:00+0000.
  4. Guarda los cambios que realizaste y deja el archivo abierto.

Ahora, todo está listo para agregar la Llave SSH pública a metadatos de proyecto o instancia.

gcloud o API

Para verificar el formato de una Llave SSH pública, sigue estos pasos:

  1. Ubica y abre el archivo de Llaves SSH públicas.

  2. Verifica el formato del archivo de Llaves SSH públicas.

    • Si una Llave SSH pública tiene un período de caducidad, debe tener el formato siguiente:

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

      en la que:

      • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
      • [KEY_VALUE] es el valor de la Llave SSH pública.
      • [EXPIRE_TIME] es un valor en formato ISO 8601. Por ejemplo: 2018-12-04T20:12:00+0000.
    • De lo contrario, la Llave SSH pública debe tener el formato siguiente:

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      en la que:

      • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
      • [KEY_VALUE] es el valor de la Llave SSH pública.
  3. Si tu clave no coincide con uno de los formatos anteriores o si quieres agregar, editar o quitar un período de vencimiento, sigue las instrucciones a continuación para formatear tu Llave SSH pública. De lo contrario, deja el archivo abierto y agrega la Llave SSH pública a los metadatos de proyecto o instancia.

Si quieres dar formato a una Llave SSH pública para la herramienta de gcloud o la API, haz lo siguiente:

  1. Haz una copia de tu archivo de claves públicas. Usa la copia con Compute Engine y guarda el archivo original para usarlo con tus otras configuraciones de SSH.

  2. Abre la copia de tu archivo de claves públicas. Por configuración predeterminada, este archivo debe tener el formato siguiente:

    ssh-rsa [KEY_VALUE] [USERNAME]

    en la que:

    • [KEY_VALUE] es el valor de la Llave SSH pública.
    • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
  3. Copia el nombre de usuario, que se encuentra al final del archivo, y pégalo al principio del archivo seguido de dos puntos. Este archivo de Llaves SSH públicas ahora debe tener el formato siguiente:

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    en la que:

    • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
    • [KEY_VALUE] es el valor de la Llave SSH pública.
  4. De forma opcional, puedes establecer el período de vencimiento de la clave si borras el segundo [USERNAME] y agregas google-ssh al final del archivo de claves seguido de los campos userName y expireOn en JSON.

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

    en la que:

    • [USERNAME] es el usuario de esta Llave SSH, que se especificó cuando se creó la clave.
    • [KEY_VALUE] es el valor de la Llave SSH pública.
    • [EXPIRE_TIME] es un valor en formato ISO 8601. Por ejemplo: 2018-12-04T20:12:00+0000
  5. Guarda los cambios que realizaste y deja el archivo abierto.

Ahora, todo está listo para agregar la Llave SSH pública a metadatos de proyecto o instancia.

Edita metadatos de Llave SSH pública

Las Llaves SSH públicas disponibles determinan el acceso del usuario a una instancia de Linux mediante herramientas de terceros. Puedes controlar las Llaves SSH públicas que están disponibles para una instancia de Linux si editas los metadatos, que es donde se almacenan tus Llaves SSH públicas y la información relacionada. Existen tres tipos de metadatos para tus Llaves SSH públicas:

  • Llaves SSH públicas de nivel de proyecto: usa estos metadatos para brindar a los usuarios acceso general, es decir, la capacidad de conectarse a la mayoría de las instancias de tu proyecto.
  • Permitir o bloquear Llaves SSH públicas de nivel de proyecto: usa este valor de metadatos a fin de bloquear o permitir Llaves SSH públicas de nivel de proyecto en una instancia específica. De forma predeterminada, una instancia acepta todas las Llaves SSH públicas de nivel de proyecto. Bloquea las Llaves SSH públicas de nivel de proyecto si quieres restringir la instancia solo a usuarios con Llaves SSH públicas de nivel de instancia.
  • Llaves SSH públicas de nivel de instancia: usa estos metadatos a fin de brindar a los usuarios acceso especial, es decir, la capacidad de conectarse a una instancia específica de tu proyecto, incluso si se bloquean las Llaves SSH públicas de nivel de proyecto.

Agrega o quita Llaves SSH públicas de nivel de proyecto

Usa Llaves SSH públicas de nivel de proyecto a fin de brindar a los usuarios acceso general a una instancia de Linux. Estas claves brindan a los usuarios acceso a todas las instancias de Linux de un proyecto que permiten Llaves SSH públicas de nivel de proyecto. Si una instancia bloquea las Llaves SSH públicas de nivel de proyecto, un usuario no puede usar su Llave SSH pública de nivel de proyecto para conectarse a la instancia, a menos que la misma Llave SSH pública también se agregue a los metadatos de la instancia.

Console

Para agregar o quitar Llaves SSH públicas de nivel de proyecto de GCP Console, sigue estos pasos:

  1. En Google Cloud Platform Console, ve a la página de metadatos de tu proyecto.

    Ir a la página de metadatos

  2. En Llaves SSH (SSH Keys), haz clic en Editar (Edit).

  3. Modifica las Llaves SSH públicas de nivel de proyecto mediante estos pasos:

    • Para agregar una Llave SSH pública, haz clic en Agregar elemento. Se abrirá un cuadro de texto.
    • Copia y pega el contenido de tu archivo de Llaves SSH públicas en el cuadro de texto.

      Repite este proceso para cada Llave SSH pública que desees agregar.

    • Para quitar una Llave SSH pública, haz clic en el botón de borrado a su lado:

      Clave pública de PuTTYgen

      Repite este proceso para cada Llave SSH pública que quieras quitar.

  4. Cuando termines de editar las Llaves SSH, haz clic en Guardar.

gcloud

A fin de agregar o quitar Llaves SSH públicas para todo el proyecto con la herramienta gcloud, sigue estos pasos:

  1. Si tu proyecto ya tiene Llaves SSH públicas de nivel de proyecto, obtén esas Llaves SSH públicas desde los metadatos:

    1. Obtén los metadatos existentes del proyecto:

      gcloud compute project-info describe
      
    2. En el resultado, busca el valor de metadatos ssh-keys:

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...
      

      en la que:

      • [USERNAME_1] y [USERNAME_2] son los nombres de usuario para tus claves existentes.
      • [EXISTING_KEY_VALUE_1] y [EXISTING_KEY_VALUE_2] son valores de clave pública que ya están aplicados a tu proyecto.
    3. Copia las Llaves SSH públicas.

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

  3. En el archivo, crea una lista de todas las Llaves SSH públicas que deseas agregar o conservar en los metadatos del proyecto. Si tienes claves existentes de nivel de proyecto, se quitarán todas las claves que no incluyas en la lista.

    Por ejemplo, la lista de ejemplo a continuación quitará la clave para [USERNAME_1] porque se omitió su Llave SSH. También conservará la Llave SSH de [USERNAME_2] y agregará la Llave SSH de [USERNAME_3], ya que tus Llaves SSH están incluidas en la lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    en la que:

    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario de las Llaves SSH públicas.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
  4. Guarda y cierra el archivo.

  5. En el símbolo del sistema, usa el comando compute project-info add-metadata para configurar el valor ssh-keys de todo el proyecto. Incluye la marca --metadata-from-file y especifica la ruta al archivo de lista.

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    en la que [LIST_PATH] es la ruta de acceso a tu lista de Llaves SSH públicas.

API

Agrega o quita claves públicas de todo el proyecto con el método instances.setMetadata.

  1. Usa el método projects.get a fin de obtener el valor fingerprint de los metadatos. Si quieres mantener tus claves existentes para todo el proyecto, obtén los valores ssh-keys existentes.

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [FINGERPRINT] es el ID único para esta configuración de metadatos específica, que evita que reemplaces cambios simultáneos por accidente.
    • [USERNAME_1] y [USERNAME_2] son los nombres de usuario para tus claves existentes.
    • [EXISTING_KEY_VALUE_1] y [EXISTING_KEY_VALUE_2] son valores de clave pública que ya están aplicados a tu proyecto.
  2. Crea una lista de todas las Llaves SSH públicas que quieres agregar o mantener en los metadatos de nivel de proyecto. Si ya tienes Llaves SSH públicas en metadatos de todo el proyecto, se quitarán todas las claves que no incluyas en la lista.

    Para este ejemplo, el archivo contiene un [KEY_VALUE] nuevo seguido de uno de los valores clave existentes que obtuviste en el paso anterior. [EXISTING_KEY_VALUE_1] se omite, por lo que se quitará de la instancia en el paso siguiente. Usa caracteres \n para separar cada valor de clave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    en la que:

    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario para tus claves.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
  3. Usa el método projects.setcommoninstancemetadata a fin de configurar el valor ssh-keys de todo el proyecto. Incluye el valor de fingerprint, que garantiza que no se reemplace ningún cambio simultáneo en este valor de metadatos.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario para tus claves.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
    • [FINGERPRINT] es la huella digital que obtuviste antes con el método projects.get.

Cuando termines de editar las Llaves SSH, prueba tus cambios. Para esto, conéctate a tu instancia de Linux mediante herramientas de terceros.

Si surge un problema, verifica los metadatos de la instancia a la que intentas conectarte. Si los metadatos a nivel de instancia se configuran para bloquear las Llave SSH de todo el proyecto o tienen un valor sshKeys exclusivo de instancia obsoleto, la instancia ignora todas las Llave SSH de todo el proyecto. Para aplicar claves de nivel de proyecto a una instancia, asegúrate de que la instancia permita Llaves SSH públicas de nivel de proyecto y, si está presente, quita el valor sshKeys exclusivo de instancia obsoleto de los metadatos de instancia.

Permite o bloquea Llaves SSH públicas de nivel de proyecto desde una instancia de Linux

Si necesitas que tu instancia ignore las Llaves SSH públicas para todo el proyecto y solo use claves de nivel de instancia, puedes bloquear las Llaves SSH públicas de todo el proyecto en la instancia. Esto permite que solo los usuarios cuya Llave SSH pública se almacena en metadatos de nivel de instancia accedan a la instancia. Si quieres que tu instancia use Llaves SSH públicas de nivel de instancia y de proyecto, configura los metadatos de la instancia para permitir Llaves SSH de nivel de proyecto. Esto permite que cualquier usuario cuya Llave SSH pública se almacene en metadatos en todo el proyecto o a nivel de instancia para acceder a la instancia.

Console

Para permitir o bloquear Llaves SSH públicas de nivel de proyecto desde GCP Console, haz lo siguiente:

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

    Ir a la página Instancias

  2. Haz clic en el nombre de la instancia que deseas modificar.

  3. En la barra de herramientas, haz clic en Editar.

  4. En Llaves SSH, ve a la casilla de verificación Bloquear Llaves SSH de nivel de proyecto.

    • Para impedir que los usuarios con Llaves SSH de nivel de proyecto se conecten a esta instancia, selecciona Bloquear Llaves SSH de nivel de proyecto.
    • Para permitir que los usuarios con Llaves SSH de nivel de proyecto se conecten a esta instancia, desactiva Bloquear Llaves SSH de nivel de proyecto.
  5. Cuando termines de editar la configuración de conexión para las Llaves SSH, haz clic en Guardar.

gcloud

Para permitir o bloquear las Llaves SSH públicas de todo el proyecto desde una instancia de Linux, agrega el valor de metadatos block-project-ssh-keys a tu instancia:

  • Para bloquear las Llaves SSH públicas de nivel de proyecto, establece el valor de metadatos en TRUE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    en el que [INSTANCE_NAME] es el nombre de la instancia a la que quieres bloquear las Llaves SSH públicas de todo el proyecto.

  • Para permitir las Llaves SSH públicas de nivel de proyecto, establece el valor de metadatos en FALSE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    en el que [INSTANCE_NAME] es el nombre de la instancia a la que quieres permitir Llaves SSH públicas de todo el proyecto.

API

Para permitir o bloquear las Llaves SSH públicas de nivel de proyecto desde una instancia de Linux, haz lo siguiente:

  • Para bloquear las Llaves SSH públicas de todo el proyecto, agrega el valor de metadatos block-project-ssh-keys a tu instancia y establécelo en TRUE. Con este valor de metadatos, se bloquea el funcionamiento de las claves de todo el proyecto en esta instancia para que solo funcionen las claves de nivel de instancia.

     POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
      "items": [
       {
        "key": "block-project-ssh-keys",
        "value": TRUE
       }
      ]
      "fingerprint": "[FINGERPRINT]"
     }
    

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [ZONE] es la zona donde se encuentra la instancia.
    • [INSTANCE_NAME] es la instancia en la que quieres bloquear las claves de nivel de proyecto.
    • [FINGERPRINT] es el ID único para esta configuración de metadatos específica, que evita que reemplaces cambios simultáneos por accidente.
  • Para permitir las Llaves SSH públicas de todo el proyecto, agrega el valor de metadatos block-project-ssh-keys a tu instancia y establécelo en FALSE. Este valor de metadatos permite que todas las claves de todo el proyecto (así como las claves de nivel de instancia) funcionen en esta instancia.

     POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
     {
     "items": [
      {
       "key": "block-project-ssh-keys",
       "value": FALSE
      }
     ]
     "fingerprint": "[FINGERPRINT]"
     }
    

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [ZONE] es la zona donde se encuentra la instancia.
    • [INSTANCE_NAME] es la instancia a la que quieres habilitar claves de todo el proyecto.
    • [FINGERPRINT] es el ID único para esta configuración de metadatos específica, que evita que reemplaces cambios simultáneos por accidente.

Cuando termines, prueba tus cambios. Para esto, conéctate a tu instancia de Linux mediante herramientas de terceros.

Agrega o quita Llaves SSH públicas de nivel de instancia

Las Llaves SSH públicas de nivel de instancia brindan a los usuarios acceso a una instancia de Linux específica. Los usuarios con Llaves SSH públicas de nivel de instancia pueden acceder a una instancia de Linux, incluso si bloquea las Llaves SSH públicas de nivel de proyecto.

Console

Para agregar o quitar Llaves SSH públicas de nivel de instancia de GCP Console, haz lo siguiente:

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

    Ir a la página Instancias

  2. Haz clic en el nombre de la instancia que deseas modificar.

  3. En la barra de herramientas, haz clic en Editar.

  4. En Llaves SSH (SSH Keys), haz clic en Mostrar y editar (Show and edit). La sección se expande para mostrar todas las Llaves SSH públicas de nivel de instancia.

  5. Modifica las Llaves SSH públicas de nivel de instancia; para ello, ejecuta este comando:

    • Para agregar una Llave SSH pública, haz clic en Agregar elemento. Se abrirá un cuadro de texto.
    • Copia y pega el contenido de tu archivo de Llaves SSH públicas en el cuadro de texto.

      Repite este proceso para cada Llave SSH pública que desees agregar.

    • Para quitar una Llave SSH pública, haz clic en el botón de borrado a su lado:

      Clave pública de PuTTYgen

      Repite este proceso para cada Llave SSH pública que quieras quitar.

  6. Cuando termines de editar las Llaves SSH, haz clic en Guardar.

gcloud

Para agregar o quitar Llaves SSH públicas de nivel de instancia con la herramienta de gcloud:

  1. Si tu instancia ya tiene Llaves SSH públicas de nivel de instancia, obtén esas Llaves SSH públicas de los metadatos:

    1. Obtén los metadatos existentes de la instancia:

       gcloud compute instances describe [INSTANCE_NAME]
       

      en el que [INSTANCE_NAME] es el nombre de la instancia a la que necesitas agregar o quitar las Llaves SSH públicas.

    2. En el resultado, busca el valor de metadatos ssh-keys:

       ...
       metadata:
         fingerprint: QCofVTHlggs=
         items:
         ...
         - key: ssh-keys
           value: |-
             [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
             [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
       ...
      

      en la que:

      • [USERNAME_1] y [USERNAME_2] son los nombres de usuario para tus claves existentes.
      • [EXISTING_KEY_VALUE_1] y [EXISTING_KEY_VALUE_2] son valores de clave pública que ya se aplicaron a tu instancia.

    3. Copia las Llaves SSH públicas bajo el valor de metadatos ssh-keys.

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

  3. En el archivo, crea una lista de todas las Llaves SSH públicas que quieras agregar o conservar en los metadatos de nivel de instancia. Si ya tienes Llaves SSH públicas en metadatos de nivel de instancia, se quitarán todas las claves que no incluyas en la lista.

    Por ejemplo, la lista de muestra siguiente quita la clave para [USERNAME_1], ya que se omite su Llave SSH. También conserva la Llave SSH de [USERNAME_2] y la agrega para [USERNAME_3], ya que sus Llaves SSH están incluidas en la lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    en la que:

    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario de las Llaves SSH públicas.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
  4. Guarda y cierra el archivo.

  5. En el símbolo del sistema, usa el comando compute instances add-metadata a fin de establecer el valor ssh-key exclusivo de instancia. Incluye la marca --metadata-from-file y especifica la ruta de acceso a la lista de archivos de claves públicas que creaste.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    en la que:

    • [INSTANCE_NAME] es el nombre de la instancia en la que quieres aplicar el archivo de Llaves SSH públicas.
    • [LIST_PATH] es la ruta de acceso a tu lista de Llaves SSH públicas.

API

Agrega un valor de ssh-keys exclusivo de instancia en los metadatos con el método instances.setMetadata.

  1. Usa el método instances.get a fin de obtener el valor fingerprint de metadatos para usar en la solicitud. Si quieres conservar tus claves a nivel de instancia existentes, obtén los valores ssh-keys existentes.

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    

    El servidor muestra una respuesta como esta:

    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...
    

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [ZONE] es la zona donde se encuentra la instancia.
    • [INSTANCE_NAME] es la instancia en la que quieres editar Llaves SSH públicas de nivel de instancia.
    • [FINGERPRINT] es el ID único para esta configuración de metadatos específica, que evita que reemplaces cambios simultáneos por accidente.
    • [USERNAME_1] y [USERNAME_2] son los nombres de usuario para tus claves existentes.
    • [EXISTING_KEY_VALUE_1] y [EXISTING_KEY_VALUE_2] son valores de clave pública que ya se aplicaron a tu instancia.
  2. Crea una lista de todas las Llaves SSH públicas que quieres agregar o mantener en los metadatos de nivel de instancia. Si ya tienes Llaves SSH públicas en metadatos de nivel de instancia, se quitarán todas las claves que no incluyas en la lista.

    Para este ejemplo, el archivo contiene un [KEY_VALUE] nuevo seguido de uno de los valores clave existentes del paso anterior. El [EXISTING_KEY_VALUE_1] se omite, por lo que se quita de la instancia en el paso siguiente. Usa los caracteres de escape de salto de línea (\n) para separar cada valor clave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    en la que:

    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario para tus claves.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
  3. Usa el método instances.setMetadata para configurar el valor ssh-keys exclusivo de instancia. Incluye el valor de fingerprint, que garantiza que no se reemplace ningún cambio simultáneo en este valor de metadatos.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    en la que:

    • [PROJECT_ID] es el ID del proyecto único.
    • [ZONE] es la zona donde se encuentra la instancia.
    • [INSTANCE_NAME] es la instancia en la que quieres editar las Llaves SSH públicas de nivel de instancia.
    • [USERNAME_1], [USERNAME_2] y [USERNAME_3] son los nombres de usuario para tus claves.
    • [EXISTING_KEY_VALUE_1] es un valor de clave pública para una Llave SSH que quieres quitar.
    • [EXISTING_KEY_VALUE_2] es un valor de clave pública para una Llave SSH que quieres conservar.
    • [NEW_KEY_VALUE] es un valor de clave pública para una Llave SSH que quieres agregar.
    • [FINGERPRINT] es el ID único para esta configuración de metadatos específica, que evita que reemplaces cambios simultáneos por accidente.

Cuando termines de editar las Llaves SSH, prueba tus cambios. Para esto, conéctate a tu instancia de Linux mediante herramientas de terceros.

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine