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. Wenn Sie
Code oder Beispiele aus einer lokalen Entwicklungsumgebung ausführen möchten, können Sie sich so 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
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud initWenn 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 Google Cloud Authentifizierungsdokumentation 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:
- Stellen Sie das gelöschte Konto wieder her.
- Entfernen Sie die POSIX-Informationen des Kontos, bevor Sie es löschen.
Größenlimit für OS Login-Profil überschritten
Wenn Sie eine Verbindung zu einer Linux-Compute-Instanz über SSH 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.
OS Login speichert Nutzerinformationen, einschließlich öffentlicher SSH-Schlüssel, in einem POSIX-Konto mit einem Größenlimit von 32 KiB pro Nutzer. Wenn Ihr OS Login-Profil dieses Limit überschreitet oder mehr als 64 SSH-Schlüssel enthält, können Sie keine weiteren SSH-Schlüssel hinzufügen. Dadurch können Sie keine Verbindung zu VMs über SSH herstellen.
So beheben Sie diese Fehler:
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 diesen Wert überschreitet, müssen Sie nicht verwendete SSH-Schlüssel entfernen.
Prüfen Sie Ihr OS Login-Profil, 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: ... ...Entfernen Sie alle nicht verwendeten Schlüssel mit dem
gcloud compute os-login ssh-keys removeBefehl:gcloud compute os-login ssh-keys remove --key=KEY
Ersetzen Sie
KEYdurch den Fingerabdruck des Schlüssels oder die vollständige öffentliche SSH-Schlüsselstring.
Alternativ können Sie eine der folgenden Aktionen ausführen, um zu vermeiden, dass beim Herstellen einer Verbindung zu VMs neue Schlüssel generiert werden:
Verwenden Sie ein vorhandenes Schlüsselpaar wieder, indem Sie das Flag
--ssh-key-filemit dem Befehlgcloud compute sshangeben:gcloud compute ssh VM_NAME --ssh-key-file=PATH_TO_PRIVATE_KEY
Wenn Sie häufig über die gcloud CLI eine Verbindung zu VMs über SSH herstellen, erstellen Sie ein Standard-SSH-Schlüsselpaar mit dem Namen
google_compute_enginein Ihrem Verzeichnis.ssh/. Die gcloud CLI-Befehlszeile verwendet dieses Schlüsselpaar, falls es vorhanden ist, und generiert nicht bei jeder Verbindung ein neues. So generieren Sie ein Standardschlüsselpaar:ssh-keygen -t rsa -f ~/.ssh/google_compute_engine -C USERNAME -b 2048
Fügen Sie dann den öffentlichen Schlüssel Ihrem OS Login-Profil hinzu:
gcloud compute os-login ssh-keys add --key-file=~/.ssh/google_compute_engine.pub
Cloud Build
Wenn Sie Cloud Build verwenden und das OS Login-Profil Ihres Dienstkontos das Limit von 32 KiB überschreitet, treten möglicherweise Fehler bei der SSH-Verbindung auf und die folgende Fehlermeldung wird angezeigt: Login profile size exceeds 32 KiB.... Um dieses Problem zu beheben, können Sie
Cloud Build so konfigurieren, dass
benutzerdefinierte Dienstkonten
anstelle des Standarddienstkontos von Cloud Build verwendet werden.
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, eine 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 |
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 ansehen 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.
Wenn Sie beispielsweise pagesize auf 1 setzen möchten, führen Sie den folgenden Befehl aus:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1" -H "Metadata-Flavor: Google"
Um den nächsten Nutzer abzurufen, setzen Sie pagesize auf 1 und pagetoken auf das Seitentoken aus der Ausgabe des vorherigen Befehls.
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
Wenn Sie die Profilinformationen für einen bestimmten Nutzer auf Ihrer Compute-Instanz ansehen möchten, führen Sie den folgenden Befehl aus:
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.
Fragen Sie das Nutzerprofil ab, um den Wert des Felds
namezu erhalten:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
Notieren Sie sich in der Ausgabe die
name.Führen Sie den folgenden
login-Befehl mit dem Wert vonnameaus: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
- Mehr zu OS Login.
- Informationen zu SSH-Verbindungen zu Linux-Instanzen in Compute Engine
- Eine detaillierte Anleitung finden Sie unter:
- OS Login in einer Organisation verwalten