SSH-Schlüssel zu VMs hinzufügen


In diesem Dokument wird beschrieben, wie Sie SSH-Schlüssel zu VM-Instanzen hinzufügen, die OS Login verwenden, und VMs, die metadatenbasierte SSH-Schlüssel verwenden. Wenn Sie oder Ihr Organisationsadministrator OS Login nicht aktiviert haben, verwenden Ihre VMs metadatenbasierte SSH-Schlüssel.

Hinweise

  • Informationen zum Verwalten des Zugriffs auf Ihre Compute Engine-VMs finden Sie unter Zugriffsmethode auswählen.
  • Erstellen Sie ein SSH-Schlüsselpaar, falls Sie das noch nicht getan haben.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:

    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

      Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      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.

      Weitere Informationen unter Set up authentication for a local development environment.

      REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

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

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

Schlüssel zu VMs hinzufügen, die OS Login verwenden

VMs, die OS Login verwenden, akzeptieren SSH-Schlüssel, die Ihrem Google-Konto zugeordnet sind. Sie können einen öffentlichen SSH-Schlüssel mit Ihrem Google-Konto über die gcloud CLI oder die OS Login API verknüpfen. Als Administrator für Ihre Organisation können Sie den Nutzerkonten mithilfe der Directory API SSH-Schlüssel hinzufügen.

Wenn Sie Ihrem Google-Konto SSH-Schlüssel hinzufügen, generiert Compute Engine einen Nutzernamen für Sie, indem der Nutzername und die Domain aus der E-Mail-Adresse kombiniert werden, die mit Ihrem Google-Konto verknüpft ist. Wenn Ihre E-Mail-Adresse beispielsweise cloudysanfrancisco@gmail.com lautet, lautet Ihr Nutzername cloudysanfrancisco_gmail_com. Wenn Sie einen SSH-Schlüssel in einem Projekt hinzufügen, das sich außerhalb Ihrer Organisation befindet, wird Ihrem Nutzernamen das Präfix ext_ vorangestellt, z. B. ext_cloudysanfrancisco_gmail_com. Der Administrator Ihrer Organisation kann Ihren Nutzernamen mit der Directory API anpassen. Wenn Sie bereits einen Nutzernamen konfiguriert haben, verwendet Compute Engine diesen Nutzernamen, wenn Sie SSH-Schlüssel hinzufügen.

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. Verwenden Sie den Befehl gcloud compute os-login ssh-keys add, um Ihrem Konto einen öffentlichen SSH-Schlüssel hinzuzufügen:

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

    Dabei gilt:

    • KEY_FILE_PATH: Der Pfad zum öffentlichen SSH-Schlüssel auf Ihrer Workstation. Der Schlüssel muss das Format public-openssh haben.
    • PROJECT (Optional): Ein Projekt, in dem Sie Ihren SSH-Schlüssel verwenden möchten. Geben Sie dieses Feld an, um Ihren SSH-Schlüssel in einem Projekt außerhalb Ihrer Organisation zu verwenden oder wenn Sie kein Mitglied einer Cloud Identity-Organisation sind.
    • EXPIRE_TIME: Optional: Ablaufzeit für den SSH-Schlüssel

      Beispiel: Wenn Sie 30m angeben, läuft der SSH-Schlüssel nach 30 Minuten ab.

      Dieses Flag verwendet die folgenden Einheiten:

      • s für Sekunden
      • m für Minuten
      • h für Stunden
      • d für Tage

Terraform

Verwenden Sie zum Hinzufügen eines öffentlichen SSH-Schlüssels zu Ihrem Konto die Ressource google_client_openid_userinfo zusammen mit der Ressource 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

Verwenden Sie die Methode users.importSshPublicKey der OS Login API, um Ihrem Konto einen öffentlichen SSH-Schlüssel hinzuzufügen:

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

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

Dabei gilt:

  • ACCOUNT_EMAIL: die mit Ihrem Konto verknüpfte E-Mail-Adresse.
  • SSH_KEY: der öffentliche Schlüssel, den Sie dem Konto hinzufügen möchten.
  • EXPIRATION_TIMESTAMP: die Ablaufzeit für den Schlüssel in Mikrosekunden seit der Epoche (1 Sekunde = 106 Mikrosekunden)

SSH-Schlüssel zu VMs hinzufügen, die metadatenbasierte SSH-Schlüssel verwenden

VMs, die kein OS Login verwenden, speichern SSH-Schlüssel in Compute Engine-Projekt- und Instanzmetadaten. Wenn OS Login für eine VM aktiviert ist, ignoriert der Gast-Agent der VM die in Metadaten gespeicherten Schlüssel.

Sie können in Projektmetadaten gespeicherte SSH-Schlüssel verwenden, um auf alle VMs in einem Projekt zuzugreifen. Sie können in den Instanzmetadaten gespeicherte SSH-Schlüssel verwenden, um auf einzelne VMs zuzugreifen.

Compute Engine entfernt abgelaufene SSH-Schlüssel zwar nicht automatisch aus den Metadaten, allerdings können abgelaufene Schlüssel nicht zum Herstellen neuer Verbindungen zu VMs verwendet werden. Informationen zum Entfernen von abgelaufenen Schlüsseln aus Metadaten finden Sie unter SSH-Schlüssel von VMs mit metadatenbasierten Schlüsseln entfernen.

Sie können einen öffentlichen SSH-Schlüssel zu Projekt- oder VM-Instanzmetadaten mithilfe der Google Cloud Console, der gcloud CLI oder REST hinzufügen.

SSH-Schlüssel zu Projektmetadaten hinzufügen

Sie können Projektmetadaten einen öffentlichen SSH-Schlüssel hinzufügen, um auf alle VMs in einem Projekt zuzugreifen. Ausgenommen sind VMs, die projektweite SSH-Schlüssel blockieren. Weitere Informationen zum Blockieren projektweiter SSH-Schlüssel finden Sie unter SSH-Schlüssel von VMs blockieren, die metadatenbasierte SSH-Schlüssel verwenden.

Console

So fügen Sie den Projektmetadaten mithilfe der Cloud Console einen öffentlichen SSH-Schlüssel hinzu:

  1. Rufen Sie in der Google Cloud Console die Seite Metadaten auf.

    Zur Seite "Metadaten"

  2. Klicken Sie auf den Tab SSH-Schlüssel.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf Zeile hinzufügen.

  5. Fügen Sie im Feld SSH-Schlüssel Ihren öffentlichen SSH-Schlüssel hinzu. Die Komprimierung muss in einem der folgenden Formate erfolgen:

    • Format für einen Schlüssel ohne Ablaufzeit:

      KEY_VALUE USERNAME
    • Format für einen Schlüssel mit einer Ablaufzeit:

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

    Dabei gilt:

    • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
    • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

      Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung zu Linux-VMs als Root-Nutzer herstellen.

      Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

    • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000
  6. Klicken Sie auf Speichern.

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. Wenn bereits SSH-Schlüssel in Projektmetadaten vorhanden sind, müssen Sie diese jedes Mal den Projektmetadaten neu hinzufügen, wenn Sie mit der gcloud CLI einen neuen SSH-Schlüssel hinzufügen. Wenn Sie Ihre vorhandenen Schlüssel nicht noch einmal hinzufügen, werden die vorhandenen Schlüssel durch das Hinzufügen eines neuen Schlüssels gelöscht.

    So fügen Sie den Projektmetadaten mit der gcloud CLI einen öffentlichen SSH-Schlüssel hinzu:

    1. Wenn in Ihrem Projekt bereits projektweite öffentliche SSH-Schlüssel vorhanden sind, können Sie diese aus Metadaten abrufen und einer neuen Datei hinzufügen:

      1. Führen Sie den Befehl gcloud compute project-info describe aus, um die SSH-Schlüssel für das Projekt abzurufen:

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

        Die Ausgabe sieht in etwa so aus:

        username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
        
      2. Kopieren Sie den Metadatenwert ssh-keys.

      3. Erstellen und öffnen Sie eine neue Textdatei auf Ihrer Workstation.

      4. Fügen Sie in der Datei die Liste der Schlüssel ein, die Sie gerade kopiert haben.

      5. Fügen Sie Ihren neuen Schlüssel am Ende der Liste in einem der folgenden Formate hinzu:

        • Format für einen Schlüssel ohne Ablaufzeit:

          USERNAME:KEY_VALUE
        • Format für einen Schlüssel mit einer Ablaufzeit:

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

        Dabei gilt:

        • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
        • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

          Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

          Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

        • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000
      6. Speichern und schließen Sie die Datei.

    2. Führen Sie den Befehl gcloud compute project-info add-metadata aus, um den projektweiten ssh-keys-Wert festzulegen:

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

      Ersetzen Sie KEY_FILE durch einen der folgenden Werte:

      • Der Pfad zu der Datei, die Sie im vorherigen Schritt erstellt haben, wenn das Projekt vorhandene SSH-Schlüssel enthalten hat
      • Der Pfad zu Ihrer neuen öffentlichen SSH-Schlüsseldatei, wenn das Projekt keine SSH-Schlüssel enthalten hat

Terraform

Verwenden Sie die Ressource google_compute_project_metadata, um Ihren Projektmetadaten einen öffentlichen SSH-Schlüssel hinzuzufügen.

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

REST

Wenn bereits SSH-Schlüssel in Projektmetadaten vorhanden sind, müssen Sie diese jedes Mal den Projektmetadaten hinzufügen, wenn Sie mit der Compute Engine API einen neuen SSH-Schlüssel hinzufügen. Wenn Sie Ihre vorhandenen Schlüssel nicht noch einmal hinzufügen, werden die vorhandenen Schlüssel durch das Hinzufügen eines neuen Schlüssels gelöscht.

So fügen Sie den Projektmetadaten mithilfe der Compute Engine API einen öffentlichen SSH-Schlüssel hinzu:

  1. Rufen Sie die Werte fingerprint und ssh-keys aus den Metadaten mit der Methode projects.get ab.

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

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Die Antwort ähnelt dem folgenden Beispiel.

    ...
    "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. Fügen Sie den neuen Wert ssh-keys mit der Methode projects.setCommonInstanceMetadata hinzu.

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

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID
    • EXISTING_SSH_KEYS: Wert des Schlüssels ssh-keys aus der Antwort der projects.get-Anfrage.
    • FINGERPRINT: der Wert von fingerprint aus der Antwort der projects.get-Anfrage
    • NEW_SSH_KEY: der neue SSH-Schlüssel in einem der folgenden Formate:

      • Format für einen Schlüssel ohne Ablaufzeit:

        USERNAME:KEY_VALUE
      • Format für einen Schlüssel mit einer Ablaufzeit:

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

      Dabei gilt:

      • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
      • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

        Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

        Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

      • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000

SSH-Schlüssel zu Instanzmetadaten hinzufügen

Sie können den Instanzmetadaten einen öffentlichen SSH-Schlüssel hinzufügen, wenn Sie eine VM erstellen oder nachdem Sie eine VM erstellt haben.

SSH-Schlüssel während der VM-Erstellung zu Instanzmetadaten hinzufügen

Sie können während der VM-Erstellung SSH-Schlüssel zu Instanzmetadaten hinzufügen. Verwenden Sie dazu die Cloud Console, die gcloud CLI oder die Compute Engine API.

Console

Gehen Sie so vor, um mithilfe der Cloud Console eine VM zu erstellen und gleichzeitig den öffentlichen SSH-Schlüssel in die Instanzmetadaten einzufügen:

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Geben Sie die VM-Details an

  3. Maximieren Sie den Abschnitt Erweiterte Optionen und tun Sie Folgendes:

    1. Maximieren Sie den Abschnitt Sicherheit.

    2. Wählen Sie Manuell generierte SSH-Schlüssel hinzufügen.

    3. Klicken Sie auf Zeile hinzufügen.

    4. Fügen Sie Ihren öffentlichen Schlüssel in das Textfeld ein. Die Komprimierung muss in einem der folgenden Formate erfolgen:

      • Format für einen Schlüssel ohne Ablaufzeit:

        KEY_VALUE USERNAME
      • Format für einen Schlüssel mit einer Ablaufzeit:

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

      Dabei gilt:

      • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
      • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

        Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung zu Linux-VMs als Root-Nutzer herstellen.

        Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

      • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000
  4. Klicken Sie zum Erstellen und Starten der VM auf Erstellen.

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. Wenn Sie mit der gcloud CLI eine VM erstellen und gleichzeitig einen öffentlichen SSH-Schlüssel zu den Instanzmetadaten hinzufügen möchten, verwenden Sie den Befehl gcloud compute instances create:

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

    Dabei gilt:

    • VM_NAME: der Name der neuen VM.
    • PUBLIC_KEY: Ihr öffentlicher SSH-Schlüssel in einem der folgenden Formate:

      • Format für einen Schlüssel ohne Ablaufzeit:

        USERNAME:KEY_VALUE
      • Format für einen Schlüssel mit einer Ablaufzeit:

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

      Dabei gilt:

      • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
      • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

        Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

        Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

      • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000

    Mit dem Flag --metadata-from-file=ssh-keys=FILE_PATH können Sie mehrere SSH-Schlüssel hinzufügen. Fügen Sie in der Datei eine Liste von Nutzernamen und öffentlichen SSH-Schlüsseln in einem der vorherigen Formate hinzu.

Terraform

Verwenden Sie die Ressource google_compute_instance, um Ihren Instanzmetadaten einen öffentlichen SSH-Schlüssel hinzuzufügen.

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

Wenn Sie eine VM erstellen und gleichzeitig den öffentlichen SSH-Schlüssel zu den Instanzmetadaten mit Compute Engine hinzuzufügen möchten, erstellen Sie eine POST-Anfrage an die Methode instances.insert:

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

Dabei gilt:

  • PROJECT_ID: die Projekt-ID
  • ZONE: die Zone der VM

Geben Sie im Anfragetext die Nutzernamen und öffentlichen SSH-Schlüssel im Attribut items an:

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

Ersetzen Sie PUBLIC_KEY durch Ihren öffentlichen Schlüssel in einem der folgenden Formate:

  • Format für einen Schlüssel ohne Ablaufzeit:

    USERNAME:KEY_VALUE
  • Format für einen Schlüssel mit einer Ablaufzeit:

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

Dabei gilt:

  • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
  • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

    Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

    Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

  • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000

Sie können mehrere SSH-Schlüssel hinzufügen, indem Sie zwischen den Schlüsseln \n einfügen.

SSH-Schlüssel nach VM-Erstellung zu Instanzmetadaten hinzufügen

Sie können nach der VM-Erstellung SSH-Schlüssel zu Instanzmetadaten hinzufügen. Verwenden Sie dazu die Cloud Console, die gcloud CLI oder die Compute Engine API.

Console

So fügen Sie den Instanzmetadaten mithilfe der Cloud Console einen öffentlichen SSH-Schlüssel hinzu:

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zur Seite „VM-Instanzen“

  2. Klicken Sie auf den Namen der VM, für die Sie einen SSH-Schlüssel hinzufügen möchten.

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie unter SSH-Schlüssel auf Element hinzufügen.

  5. Fügen Sie Ihren öffentlichen Schlüssel in das Textfeld ein. Der Schlüssel muss eines der folgenden Formate haben:

    • Format für einen Schlüssel ohne Ablaufzeit:

      KEY_VALUE USERNAME
    • Format für einen Schlüssel mit einer Ablaufzeit:

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

    Dabei gilt:

    • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
    • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

      Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung zu Linux-VMs als Root-Nutzer herstellen.

      Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

    • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000
  6. Klicken Sie auf Speichern.

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. Wenn bereits SSH-Schlüssel in Instanzmetadaten vorhanden sind, müssen Sie diese jedes Mal den Instanzmetadaten neu hinzufügen, wenn Sie mit der gcloud CLI einen neuen SSH-Schlüssel hinzufügen. Wenn Sie Ihre vorhandenen Schlüssel nicht noch einmal hinzufügen, werden die vorhandenen Schlüssel durch das Hinzufügen eines neuen Schlüssels gelöscht.

    So fügen Sie den Instanzmetadaten mit der gcloud CLI einen öffentlichen SSH-Schlüssel hinzu:

    1. Wenn Ihre VM bereits öffentliche SSH-Schlüssel auf Instanzebene hat, rufen Sie sie aus den Metadaten ab und fügen Sie sie einer neuen Datei hinzu:

      1. Führen Sie den Befehl gcloud compute instances describe aus, um die Metadaten für die VM abzurufen:

        gcloud compute instances describe VM_NAME
        

        Ersetzen Sie VM_NAME durch den Namen der VM, für die Sie öffentliche SSH-Schlüssel hinzufügen oder entfernen müssen.

        Die entsprechende Ausgabe sieht etwa so aus:

        ...
        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. Kopieren Sie den Metadatenwert ssh-keys.

      3. Erstellen und öffnen Sie eine neue Textdatei auf Ihrer Workstation.

      4. Fügen Sie in der Datei die Liste der Schlüssel ein, die Sie gerade kopiert haben.

      5. Fügen Sie Ihren neuen Schlüssel am Ende der Liste in einem der folgenden Formate hinzu:

      • Format für einen Schlüssel ohne Ablaufzeit:

        USERNAME:KEY_VALUE
      • Format für einen Schlüssel mit einer Ablaufzeit:

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

      Dabei gilt:

      • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
      • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

        Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

        Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

      • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000
      1. Speichern und schließen Sie die Datei.
    2. Führen Sie den Befehl gcloud compute instances add-metadata aus, um den Wert ssh-keys festzulegen:

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

      Dabei gilt:

      • VM_NAME: die VM, für die Sie den SSH-Schlüssel hinzufügen möchten
      • KEY_FILE mit einem der folgenden:
      • Der Pfad zu der Datei, die Sie im vorherigen Schritt erstellt haben, wenn die VM SSH-Schlüssel enthalten hat
      • Der Pfad zu Ihrer neuen öffentlichen SSH-Schlüsseldatei, wenn die VM keine SSH-Schlüssel enthalten hat

REST

Wenn bereits SSH-Schlüssel in Instanzmetadaten vorhanden sind, müssen Sie diese jedes Mal den Instanzmetadaten hinzufügen, wenn Sie mit der Compute Engine API einen neuen SSH-Schlüssel hinzufügen. Wenn Sie Ihre vorhandenen Schlüssel nicht noch einmal hinzufügen, werden die vorhandenen Schlüssel durch das Hinzufügen eines neuen Schlüssels gelöscht.

So fügen Sie den Instanzmetadaten mithilfe der Compute Engine API einen öffentlichen SSH-Schlüssel hinzu:

  1. Rufen Sie die Werte fingerprint und ssh-keys aus den Metadaten mit der Methode instances.get ab.

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

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID
    • ZONE: Zone der VM, der einen SSH-Schlüssel hinzugefügt werden soll
    • VM_NAME: VM, für die Sie einen SSH-Schlüssel hinzufügen

    Die Antwort ähnelt dem folgenden Beispiel.

    ...
    "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. Fügen Sie den neuen Wert ssh-keys mit der Methode instances.setMetadata hinzu.

    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"
    }
    

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID
    • EXISTING_SSH_KEYS: der Wert des Schlüssels ssh-keys aus der Antwort der instances.get-Anfrage
    • FINGERPRINT: der fingerprint aus der Antwort der projects.get-Anfrage
    • NEW_SSH_KEY: der neue SSH-Schlüssel in einem der folgenden Formate:

      • Format für einen Schlüssel ohne Ablaufzeit:

        USERNAME:KEY_VALUE
      • Format für einen Schlüssel mit einer Ablaufzeit:

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

      Dabei gilt:

      • KEY_VALUE: der Wert des öffentlichen SSH-Schlüssels
      • USERNAME: Ihr Nutzername. Beispiel: cloudysanfrancisco oder cloudysanfrancisco_gmail_com.

        Bei Linux-VMs kann USERNAME nicht root sein, es sei denn, Sie konfigurieren Ihre VM so, dass eine Root-Anmeldung zugelassen wird. Weitere Informationen finden Sie unter Verbindung als Root-Nutzer herstellen.

        Bei Windows-VMs, die Active Directory (AD) verwenden, muss dem Nutzernamen die AD-Domain im Format DOMAIN\ vorangestellt werden. Beispiel: Der Nutzer cloudysanfrancisco innerhalb des AD ad.example.com hat den USERNAME example\cloudysanfrancisco.

      • EXPIRE_TIME: die Zeit, zu der der Schlüssel abläuft, im ISO 8601-Format. Beispiel: 2021-12-04T20:12:00+0000

Nächste Schritte