Fehlerbehebung bei OS Login


In diesem Dokument wird die Fehlerbehebung für OS Login mithilfe des Metadatenservers beschrieben. Informationen zum Einrichten von OS Login und eine detaillierte Anleitung finden Sie unter OS Login einrichten.

Sie können den Metadatenserver von einer VM-Instanz aus abfragen. Weitere Informationen finden Sie unter Metadaten einer Instanz speichern und abrufen.

Hinweise

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

    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. 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.

Häufige Fehlermeldungen

Im Folgenden finden Sie Beispiele für häufige Fehler, die bei der Verwendung von OS Login auftreten können.

Name für Gruppe nicht gefunden

Auf einigen VMs, die OS Login verwenden, erhalten Sie die folgende Fehlermeldung, nachdem die Verbindung hergestellt wurde:

/usr/bin/id: cannot find name for group ID 123456789

Ignorieren Sie die Fehlermeldung. Dieser Fehler wirkt sich nicht auf Ihre VMs aus.

Fehler beim Abrufen von Gruppen

Beim Erstellen von VMs werden möglicherweise Logs wie die folgenden angezeigt:

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

Diese Logs geben an, dass für Ihre Organisation keine OS Login-Linux-Gruppen konfiguriert sind. Ignorieren Sie diese Nachrichten.

Nicht erfüllte Voraussetzung

Wenn Sie eine Verbindung zur VM über SSH herstellen, wird möglicherweise eine Fehlermeldung ähnlich der folgenden angezeigt:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

Dieser Fehler tritt auf, wenn OS Login versucht, einen Nutzernamen zu generieren, der bereits in einer Organisation vorhanden ist. Das ist häufig der Fall, wenn ein Nutzerkonto gelöscht und kurz darauf ein neuer Nutzer mit derselben E-Mail-Adresse erstellt wird. Nachdem ein Nutzerkonto gelöscht wurde, dauert es bis zu 48 Stunden, bis die POSIX-Informationen des Nutzers entfernt werden.

Führen Sie einen der folgenden Schritte aus, um das Problem zu lösen:

Ungültiges Argument

Wenn Sie eine SSH-Verbindung zu einer VM herstellen oder Dateien mit SCP übertragen, werden möglicherweise ähnliche Fehler wie die folgenden angezeigt:

ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

So beheben Sie diese Fehler:

  1. Führen Sie den Befehl gcloud compute os-login describe-profile aus, um Ihr OS Login-Profil aufzurufen:

    gcloud compute os-login describe-profile
    

    Die Ausgabe sieht dann ungefähr so aus:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Sehen Sie sich die Ausgabe an, um nicht verwendete SSH-Schlüssel zu identifizieren.

  3. Entfernen Sie alle nicht verwendeten Schlüssel mit dem Befehl gcloud compute os-login ssh-keys remove aus der Ausgabe:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Ersetzen Sie KEY durch den Fingerabdruck oder den Schlüsselstring des Schlüssels.

Um dieses Problem in Zukunft zu vermeiden, fügen Sie eine Ablaufzeit für SSH-Schlüssel hinzu. Abgelaufene Schlüssel werden 48 Stunden nach Ablauf oder wenn Sie Ihrem Profil einen neuen Schlüssel hinzufügen, automatisch aus Ihrem Anmeldeprofil entfernt.

HTTP-Antwortcode: 503

Wenn Sie versuchen, über SSH eine Verbindung zu einer VM herzustellen, wird möglicherweise der folgende Fehler angezeigt:

Failed to validate organization user USERNAME has login permission, got HTTP response code: 503

Dieses Problem wird durch die Ratenbegrenzung des Metadatenservers von 100 Anfragen pro Sekunde und virtueller Maschine verursacht. Dieses Limit kann nicht angepasst werden. Warten Sie einige Sekunden und versuchen Sie dann noch einmal, die Verbindung herzustellen.

So vermeiden Sie dieses Problem in Zukunft:

  • Implementieren Sie einen Wiederholungsmechanismus im Anwendungscode. Weitere Informationen finden Sie unter:
  • Vorhandene SSH-Verbindungen wiederverwenden.
  • Befehle in Batches senden, um SSH-Verbindungen und OS Login-Metadatenabfragen zu reduzieren.

Standardmäßige OS Login-Metadateneinträge

Compute Engine definiert eine Reihe von standardmäßigen Metadateneinträgen, die OS Login-Informationen bereitstellen. Die Standardmetadaten werden immer vom Server definiert und festgelegt. Bei Standard-Metadatenschlüsseln wird zwischen Groß- und Kleinschreibung unterschieden.

In der folgenden Tabelle werden die Einträge beschrieben, die Sie abfragen können.

Relativ zu http://metadata.google.internal/computeMetadata/v1/
Metadateneintrag Beschreibung
project/attributes/enable-oslogin Prüft, ob OS Login für das aktuelle Google Cloud-Projekt aktiviert ist.
instance/attributes/enable-oslogin Prüft, ob OS Login auf der aktuellen VM aktiviert ist.
oslogin/users/ Ruft Profilinformationen für OS Login-Nutzer ab. Sie können Abfrageparameter wie username, uid, pagesize und pagetoken übergeben.
oslogin/authorize/

Ruft die Berechtigungseinstellungen auf Anmelde- oder Administratorebene für einen OS Login-Nutzer ab.

Zum Prüfen einer Berechtigung müssen Sie den Abfrageparameter policy angeben. Der Wert des Richtlinienparameters muss entweder auf login (zur Überprüfung der Anmeldeberechtigung) oder auf adminLogin (zur Prüfung auf sudo-Zugriff) festgelegt werden.

Konfiguration von OS Login prüfen

Verwenden Sie die Google Cloud Console oder die Google Cloud-Befehlszeile, um Metadaten abzufragen und festzustellen, ob OS Login aktiviert ist. OS Login ist aktiviert, wenn der Metadatenschlüssel enable-oslogin in den Metadaten des Projekts oder der Instanz auf TRUE gesetzt ist. Wenn sowohl Instanz- als auch Projektmetadaten festgelegt sind, hat der in den Instanzmetadaten festgelegte Wert Vorrang.

OS Login-Nutzer ansehen

Wenn Sie die Profilinformationen für mehrere Nutzer anzeigen lassen möchten, müssen Sie die Parameter pagesize und pagetoken angeben. Ersetzen Sie pagesize und pagetoken durch den erforderlichen numerischen Wert.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

Führen Sie den folgenden Befehl aus, um beispielsweise pagesize auf 1 und pagetoken auf 0 zu setzen:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

Auf den meisten Distributionen können Sie auch den Unix-Befehl getent passwd ausführen, um die Passworteinträge für Organisationsnutzer abzurufen.

Bestimmten OS Login-Nutzer ansehen

Führen Sie den folgenden Befehl aus, um die Profilinformationen für einen bestimmten Nutzer auf Ihrer VM anzusehen.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

Ersetzen Sie USERNAME durch den Nutzernamen des Nutzers, den Sie abfragen möchten.

Sie können beispielsweise eine Anfrage senden, um den Nutzer user_example_com zu suchen. Der folgende Befehl und die folgende Ausgabe zeigen eine zusätzliche Formatierung für eine bessere Lesbarkeit.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

Die Ausgabe sieht etwa so aus:

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

Auf den meisten Distributionen können Sie auch Unix-Befehle wie getent passwd username oder getent passwd uid ausführen, um Profilinformationen abzurufen.

Zum Abrufen der SSH-Schlüssel für einen Nutzer können Sie auch /usr/bin/google_authorized_keys USERNAME ausführen. Wenn keine Schlüssel zurückgegeben werden, hat der Nutzer möglicherweise nicht die erforderlichen Berechtigungen, um sich bei der VM anzumelden.

Anmeldeberechtigungen prüfen

Zum Anzeigen von Berechtigungen auf Anmelde- und Administratorebene müssen Sie die Abfrageparameter policy=login&email=LOGIN_NAME angeben.

  1. Fragen Sie das Nutzerprofil ab, um den Wert des Felds name zu erhalten:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. Notieren Sie sich in der Ausgabe die name.

  3. Führen Sie den folgenden login-Befehl mit dem Wert von name aus:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

Sie können beispielsweise die Anmeldeberechtigungen für den Nutzer user_example_com abfragen, der im vorherigen Abschnitt angezeigt wurde.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

Die Befehlsausgabe gibt an, dass der Nutzer berechtigt ist, sich bei der VM anzumelden:

{"success":true}

Prüfen, ob VM ein Dienstkonto hat

Sie können den Metadatenserver abfragen, um das mit Ihrer VM verknüpfte Dienstkonto zu finden. Führen Sie auf Ihrer VM den folgenden Befehl aus:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

Die Ausgabe sieht etwa so aus:

12345-sa@developer.gserviceaccount.com/
default/

Wenn kein Dienstkonto gefunden wird, ist die Ausgabe leer.

OS Login-Probleme mit gcpdiag beheben

gcpdiag ist ein Open-Source-Tool. Es ist kein offiziell unterstütztes Google Cloud-Produkt. Mit dem Tool gcpdiag können Sie Probleme mit Google Cloud-Projekten identifizieren und beheben. Weitere Informationen finden Sie im gcpdiag-Projekt auf GitHub.

In diesem gcpdiag-Runbook werden mögliche Ursachen für Probleme beim SSH-Zugriff auf Windows- und Linux-VMs in Google Cloud untersucht. Der Schwerpunkt liegt auf:
  • VM-Zustand:Prüft, ob die VM ausgeführt wird und über ausreichende Ressourcen (CPU, Arbeitsspeicher, Laufwerk) verfügt.
  • Berechtigungen: Mit dieser Option wird sichergestellt, dass Sie die richtigen IAM-Berechtigungen haben, um SSH-Schlüssel zu konfigurieren.
  • VM-Einstellungen: Verifiziert, dass SSH-Schlüssel und andere Metadaten richtig konfiguriert sind.
  • Netzwerkregeln:Prüft die Firewallregeln, um sicherzustellen, dass SSH-Traffic zulässig ist.
  • Gastbetriebssystem: Sucht nach internen Betriebssystemproblemen, die SSH blockieren könnten.

Google Cloud Console

  1. Führen Sie den folgenden Befehl aus und kopieren Sie ihn.
  2. gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED
  3. Öffnen Sie die Google Cloud Console und aktivieren Sie Cloud Shell.
  4. Cloud Console öffnen
  5. Fügen Sie den kopierten Befehl ein.
  6. Führen Sie den Befehl gcpdiag aus, um das Docker-Image gcpdiag herunterzuladen und dann Diagnoseprüfungen durchzuführen. Folgen Sie gegebenenfalls der Anleitung für die Ausgabe, um fehlgeschlagene Prüfungen zu beheben.

Docker

Sie können gcpdiag mit einem Wrapper ausführen, der gcpdiag in einem Docker-Container startet. Docker oder Podman muss installiert sein.

  1. Kopieren Sie den folgenden Befehl und führen Sie ihn auf Ihrer lokalen Workstation aus.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Führen Sie den Befehl gcpdiag aus.
    ./gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED

Verfügbare Parameter für dieses Runbook ansehen.

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, das die Ressource enthält
  • VM_NAME: Der Name der Ziel-VM in Ihrem Projekt.
  • ZONE: Die Zone, in der sich die Ziel-VM befindet.
  • PRINCIPAL: Das Hauptkonto des Nutzers oder Dienstkontos, das die SSH-Verbindung initiiert. Für die schlüsselbasierte Authentifizierung verwenden Sie den von Ihrem Cloud Shell-Befehlszeilentool authentifizierten oder in der Google Cloud Console angemeldeten Nutzer. Beim Identitätswechsel für Dienstkonten sollte dies die E-Mail-Adresse des Dienstkontos sein.
  • IAP_ENABLED: Boolescher Wert (wahr oder falsch), der angibt, ob Identity-Aware Proxy für die Herstellung der SSH-Verbindung verwendet wird. Standard: true

Nützliche Flags:

  • --project: Der PROJECT_ID
  • --universe-domain: Die Domain Trusted Partner Sovereign Cloud, auf der die Ressource gehostet wird
  • --parameter oder -p: Runbook-Parameter

Eine Liste und Beschreibung aller gcpdiag-Tool-Flags finden Sie in der gcpdiag-Nutzungsanleitung.

Nächste Schritte