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 Compute Engine-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:

    Wählen Sie den Tab aus, der Ihrer geplanten Verwendung der Beispiele auf dieser Seite entspricht:

    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. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:

      gcloud init

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  • Legen Sie eine Standardregion und -zone fest.
  • REST

    Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, verwenden Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.

      Installieren Sie die Google Cloud CLI.

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

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

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 Compute-Instanzen, die OS Login verwenden, erhalten Sie möglicherweise 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 Compute-Instanzen aus.

Fehler beim Abrufen von Gruppen

Beim Erstellen von Compute-Instanzen 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 Compute-Instanz ü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:

Größenlimit für OS Login-Profil überschritten

Wenn Sie über SSH eine Verbindung zu einer Linux-Compute-Instanz herstellen oder Dateien mit SCP übertragen, wird möglicherweise einer der folgenden Fehler angezeigt:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: 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. Prüfen Sie die Größe Ihres OS Login-Profils. Wenn Sie die Größe Ihres Profils prüfen möchten, exportieren Sie es in eine temporäre JSON-Datei und prüfen Sie die Dateigröße mit dem folgenden Befehl:

    gcloud compute os-login describe-profile --format="json" | wc
    

    Wenn die Größe nahe an 32 KiB liegt oder diese überschreitet, müssen Sie nicht verwendete SSH-Schlüssel entfernen.

  2. Sehen Sie sich Ihr OS Login-Profil an, um nicht verwendete SSH-Schlüssel zu identifizieren:

    gcloud compute os-login describe-profile
    

    Die Ausgabe sieht etwa so aus:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  3. Entfernen Sie alle nicht verwendeten Schlüssel mit dem Befehl gcloud compute os-login ssh-keys remove:

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

    Ersetzen Sie KEY durch den Fingerabdruck des Schlüssels oder den vollständigen öffentlichen SSH-Schlüsselstring.

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: 429

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

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

Dieses Problem wird durch die Ratenbegrenzung des Metadatenservers von 100 Anfragen pro Sekunde und Compute-Instanz 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 für die aktuelle Compute-Instanz 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 CLI, 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, können Sie den Parameter pagesize angeben. Ersetzen Sie pagesize durch den erforderlichen numerischen Wert.

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

Die Ausgabe kann ein Seitentoken enthalten, das in nachfolgenden Aufrufen verwendet werden kann, um weitere Nutzer aufzulisten.

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

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

Um den nächsten Nutzer abzurufen, legen Sie pagesize auf 1 und pagetoken auf das Seitentoken aus der Ausgabe des vorherigen Befehls fest.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=PAGE_TOKEN" -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 Compute-Instanz 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 Compute-Instanz 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 Compute-Instanz anzumelden:

{"success":true}

Prüfen, ob Ihre Compute-Instanz ein Dienstkonto hat

Sie können den Metadatenserver abfragen, um das mit Ihrer Compute-Instanz verknüpfte Dienstkonto zu finden. Melden Sie sich in Ihrer Compute-Instanz an und führen Sie 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.

Nächste Schritte