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.
  • 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 wie folgt bei Compute Engine authentifizieren.

    Wählen Sie den Tab für die Verwendung der Beispiele auf dieser Seite aus:

    Console

    Wenn Sie über die Google Cloud Console auf Google Cloud-Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.

    gcloud

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    Terraform

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

    1. Installieren Sie die Google Cloud CLI.
    2. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

      gcloud init
    3. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

      gcloud auth application-default login

    Weitere Informationen: Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    REST

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

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

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. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  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. 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 Instanzmetadaten mithilfe der Cloud Console, der gcloud CLI oder der Compute Engine API 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. Es wird ein Textfeld geöffnet.

  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. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. 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. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  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. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  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