Questo documento descrive come risolvere i problemi di OS Login utilizzando il server di metadati. Per informazioni sulla configurazione di OS Login o per istruzioni dettagliate, consulta Configurare OS Login.
Puoi eseguire una query sul server di metadati dall'interno di un'istanza di macchina virtuale (VM). Per ulteriori informazioni, consulta Archiviazione e recupero dei metadati dell'istanza.
Prima di iniziare
-
Se non l'hai già fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale viene verificata l'identità dell'utente per ottenere l'accesso ai servizi e alle API Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione in Compute Engine come segue.
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
-
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
- Set a default region and zone.
- Ripristina l'account eliminato.
- Rimuovi i dati POSIX dell'account prima di eliminarlo.
Visualizza il tuo profilo OS Login eseguendo il comando
gcloud compute os-login describe-profile
:gcloud compute os-login describe-profile
L'output è simile al seguente:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
Esamina l'output per identificare eventuali chiavi SSH inutilizzate.
Rimuovi dall'output le chiavi non utilizzate utilizzando il comando
gcloud compute os-login ssh-keys remove
:gcloud compute os-login ssh-keys remove --key=KEY
Sostituisci
KEY
con l'impronta o la stringa della chiave.- Implementare un meccanismo di ripetizione nel codice dell'applicazione. Per ulteriori informazioni, consulta:
- Riutilizza le connessioni SSH esistenti.
- Invia i comandi in batch per ridurre le connessioni SSH e le query sui metadati di OS Login.
Esegui una query sul profilo utente per ottenere il valore del campo
name
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
Nell'output, prendi nota di
name
.Esegui questo comando
login
utilizzando il valore diname
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- Integrità della VM: controlla se la VM è in esecuzione e ha risorse sufficienti (CPU, memoria, disco).
- Autorizzazioni: verifica di disporre delle autorizzazioni IAM corrette per configurare le chiavi SSH.
- Impostazioni VM: verifica che le chiavi SSH e gli altri metadati siano configurati correttamente.
- Regole di rete: esamina le regole firewall per confermare che il traffico SSH sia consentito.
- Sistema operativo guest: cerca problemi interni del sistema operativo che potrebbero bloccare SSH.
- Copia ed esegui questo comando in Cloud Shell:
gcpdiag runbook gce/ssh --project=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED
-
- Copia il seguente comando:
- Apri la console Google Cloud e attiva Cloud Shell: Apri la console Cloud
- Incolla il comando copiato.
- Esegui il comando gcpdiag. Verrà scaricata l'immagine Docker gcpdiag e inizierà a eseguire i controlli pertinenti per questo comando. Segui le istruzioni su come correggere i controlli non riusciti.
- Copia ed esegui il comando seguente nella workstation locale:
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Esegui il comando
gcpdiag
:./gcpdiag runbook gce/ssh --project=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED
- PROJECT_ID: l'ID del progetto contenente la risorsa.
- VM_NAME: il nome della VM di destinazione all'interno del progetto.
- ZONE: la zona in cui si trova la VM target.
- PRINCIPAL: l'entità dell'account utente o di servizio che avvia la connessione SSH. Per l'autenticazione basata su chiave, utilizza l'utente autenticato dallo strumento a riga di comando di Cloud Shell o ha eseguito l'accesso alla console Google Cloud. Per la simulazione dell'identità dell'account di servizio, deve essere l'email dell'account di servizio.
- IAP_ENABLED: un valore booleano (true o false)
che indica se viene utilizzato Identity-Aware Proxy per stabilire la connessione SSH.
Predefinita:
true
--project
: per definire il valore PROJECT_ID.--universe-domain
: se applicabile, utilizzato per definire il dominio Trusted Partner Sovereign Cloud che ospita la risorsa.--parameter
o-p
: per definire i parametri per un runbook.- Scopri di più su OS Login.
- Scopri come funzionano le connessioni SSH alle VM Linux su Compute Engine.
- Per istruzioni passo passo, esamina una delle seguenti opzioni:
- Consulta Gestire OS Login in un'organizzazione
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
Per maggiori informazioni, consulta Autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.
Messaggi di errore comuni
Di seguito sono riportati alcuni esempi di errori comuni che potresti riscontrare durante l'utilizzo di OS Login.
Impossibile trovare il nome del gruppo
Su alcune VM che utilizzano OS Login, potresti ricevere il seguente messaggio di errore dopo aver stabilito la connessione:
/usr/bin/id: cannot find name for group ID 123456789
Ignora questo messaggio di errore. Questo errore non riguarda le tue VM.
Errore durante il recupero dei gruppi
Quando crei le VM, potresti visualizzare log simili ai seguenti:
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
Questi log indicano che nella tua organizzazione non sono configurati gruppi Linux di OS Login. Ignora questi messaggi.
Errore condizione necessaria
Quando ti connetti alla VM tramite SSH, potresti visualizzare un errore simile al seguente:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
Questo errore si verifica quando OS Login tenta di generare un nome utente che esiste già all'interno di un'organizzazione. Si tratta di un problema comune quando un account utente viene eliminato e poco dopo viene creato un nuovo utente con lo stesso indirizzo email. Dopo che un account utente è stato eliminato, la rimozione delle informazioni POSIX dell'utente può richiedere fino a 48 ore.
Per risolvere il problema, procedi in uno dei seguenti modi:
Argomento non valido
Potresti visualizzare errori simili ai seguenti quando ti connetti a una VM tramite SSH o utilizzi SCP per trasferire i file:
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.
Per risolvere questi errori, procedi nel seguente modo:
Per evitare che questo problema si ripresenti in futuro, aggiungi una data di scadenza per le chiavi SSH. Le chiavi scadute vengono rimosse automaticamente dal tuo profilo di accesso 48 ore dopo la scadenza o quando aggiungi una nuova chiave al profilo.
Codice di risposta HTTP: 503
Quando tenti di connetterti a una VM tramite SSH, potresti visualizzare il seguente errore:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 503
Questo problema è causato dal limite di frequenza del server dei metadati di 100 query al secondo per ogni istanza di macchina virtuale. Questo limite non può essere modificato. Per risolvere il problema, attendi qualche secondo e riprova a eseguire la connessione.
Per evitare questo problema in futuro, prova quanto segue:
Voci di metadati predefinite di OS Login
Compute Engine definisce un insieme di voci di metadati predefinite che forniscono le informazioni di OS Login. I metadati predefiniti sono sempre definiti e impostati dal server. Le chiavi dei metadati predefinite sono sensibili alle maiuscole.
La tabella seguente descrive le voci su cui è possibile eseguire una query.
Rispetto a http://metadata.google.internal/computeMetadata/v1/
Voce dei metadati Descrizione project/attributes/enable-oslogin
Controlla se OS Login è abilitato nel progetto Google Cloud attuale. instance/attributes/enable-oslogin
Controlla se OS Login è abilitato sulla VM attuale. oslogin/users/
Recupera le informazioni del profilo per gli utenti di OS Login. Puoi trasmettere parametri di ricerca come username
,uid
,pagesize
epagetoken
.oslogin/authorize/
Recupera le impostazioni di autorizzazione di accesso o a livello amministrativo per un utente OS Login.
Per verificare un'autorizzazione, devi specificare il parametro di query
policy
. Il valore del parametro del criterio deve essere impostato sulogin
(per verificare l'autorizzazione di accesso) o suadminLogin
(per verificare l'accesso sudo).Controllo della configurazione di OS Login
Utilizza la console Google Cloud o Google Cloud CLI per eseguire query sui metadati e determinare se OS Login è abilitato. OS Login è abilitato quando la chiave di metadati
enable-oslogin
è impostata suTRUE
nei metadati del progetto o dell'istanza. Se sono impostati sia i metadati di istanza che di progetto, il valore impostato nei metadati dell'istanza ha la precedenza.Visualizzazione degli utenti di OS Login
Per visualizzare le informazioni del profilo per più utenti, devi specificare i parametri
pagesize
epagetoken
. Sostituiscipagesize
epagetoken
con il valore numerico richiesto.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE& pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"
Ad esempio, per impostare
pagesize
su1
epagetoken
su0
, esegui questo comando:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"
Nella maggior parte delle distribuzioni, puoi anche eseguire il comando Unix
getent passwd
per recuperare le voci delle password per gli utenti dell'organizzazione.Visualizzare un utente OS Login specifico
Per visualizzare le informazioni del profilo per un utente specifico sulla tua VM, esegui questo comando:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
Sostituisci
USERNAME
con il nome utente dell'utente su cui vuoi eseguire la query.Ad esempio, puoi eseguire una richiesta di ricerca dell'utente
user_example_com
. Il comando e l'output riportati di seguito mostrano una formattazione aggiunta per una migliore leggibilità.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
L'output è simile al seguente:
{ "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..." } } }] }
Nella maggior parte delle distribuzioni, puoi anche eseguire comandi Unix come
getent passwd username
ogetent passwd uid
per recuperare le informazioni del profilo.Per recuperare le chiavi SSH per un utente, puoi anche eseguire
/usr/bin/google_authorized_keys USERNAME
. Se non vengono restituite chiavi, l'utente potrebbe non disporre delle autorizzazioni necessarie per accedere alla VM.Controllo delle autorizzazioni di accesso in corso...
Per visualizzare le autorizzazioni di accesso e a livello amministrativo, devi fornire i parametri di ricercay
policy=login&email=LOGIN_NAME
.Ad esempio, puoi eseguire query sulle autorizzazioni di accesso per l'utente
user_example_com
visualizzato nella sezione precedente:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
L'output comando indica che l'utente è autorizzato ad accedere alla VM:
{"success":true}
Verifica se la VM ha un account di servizio
Puoi eseguire una query sul server dei metadati per trovare l'account di servizio associato alla tua VM. Sulla VM, esegui questo comando:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
L'output è simile al seguente:
12345-sa@developer.gserviceaccount.com/ default/
Se non viene trovato alcun account di servizio, l'output è vuoto.
Debug dei problemi di OS Login con gcpdiag
gcpdiag
è uno strumento open source che consente di identificare e risolvere i problemi relativi ai progetti Google Cloud.gcpdiag
non è un prodotto Google Cloud ufficialmente supportato. Per maggiori informazioni, consulta il progetto GCPdiag su GitHub.Questo runbook di gcpdiag indaga sulle potenziali cause dei problemi di accesso SSH sulle VM Windows e Linux in Google Cloud. Si concentra su:Cloud Shell
Console Google Cloud
gcpdiag runbook gce/ssh --project=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED
Docker
Puoi eseguire
gcpdiag
utilizzando un wrapper che avviagcpdiag
in un container Docker. Funziona su qualsiasi macchina in cui è installato Docker o Podman.Visualizza tutti i parametri disponibili per questo runbook.
Sostituisci quanto segue:
Flag utili:
Per maggiori informazioni sui flag disponibili, consulta le istruzioni sull'utilizzo di
gcpdiag
.Passaggi successivi
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-07-12 UTC.
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"Problema di traduzione" },{ "type": "thumb-down", "id": "otherDown", "label":"Altra" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Facile da capire" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Il problema è stato risolto" },{ "type": "thumb-up", "id": "otherUp", "label":"Altra" }] -