En este documento, se describe cómo solucionar problemas de Acceso al SO mediante el servidor de metadatos. Para obtener información sobre la configuración de Acceso al SO o si quieres obtener instrucciones paso a paso, consulta Configura Acceso al SO.
Puedes consultar el servidor de metadatos desde una instancia de máquina virtual (VM). Para obtener más información, consulta la sección sobre cómo almacenar y recuperar metadatos de instancias.
Antes de empezar
-
Configura la autenticación si aún no lo hiciste.
La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud.
Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Restablece la cuenta borrada.
- Quita la información de POSIX de la cuenta antes de borrarla.
Ejecuta el comando
gcloud compute os-login describe-profile
para ver tu perfil de Acceso al SO:gcloud compute os-login describe-profile
El resultado es similar al siguiente:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
Revisa el resultado para identificar las claves SSH que no se usen.
Quita las claves sin usar del resultado con el comando
gcloud compute os-login ssh-keys remove
:gcloud compute os-login ssh-keys remove --key=KEY
Reemplaza
KEY
por la huella digital de las claves o la cadena de claves.- Implementa un mecanismo de reintento en el código de la aplicación. Para obtener más información, consulta
- Reutilizar las conexiones SSH existentes
- Envía comandos por lotes para reducir las conexiones SSH y las consultas de metadatos de Acceso al SO.
Consulta el perfil del usuario para obtener el valor del campo
name
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
En el resultado, toma nota del
name
.Ejecuta el siguiente comando de
login
con el valor dename
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- Estado de la VM: Verifica si la VM se está ejecutando y si tiene recursos suficientes (CPU, memoria y disco).
- Permisos: Se asegura de que tengas los permisos de IAM correctos para configurar claves SSH.
- Configuración de la VM: Verifica que las claves SSH y otros metadatos estén configurados correctamente.
- Reglas de red: Revisa las reglas de firewall para confirmar que se permite el tráfico SSH.
- SO invitado: Busca problemas internos del SO que puedan bloquear SSH.
- Completa y, luego, copia el siguiente comando.
- Abre la consola de Google Cloud y activa Cloud Shell. Abre la consola de Cloud
- Pega el comando copiado.
- Ejecuta el comando
gcpdiag
, que descarga la imagen de Dockergcpdiag
y, luego, realiza verificaciones de diagnóstico. Si corresponde, sigue las instrucciones de salida para corregir las verificaciones que fallaron. - Copia y ejecuta el siguiente comando en tu estación de trabajo local.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Ejecuta el 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: Es el ID del proyecto que contiene el recurso.
- VM_NAME: Es el nombre de la VM de destino dentro de tu proyecto.
- ZONE: Es la zona en la que se encuentra la VM de destino.
- PRINCIPAL: El principal de la cuenta de usuario o de servicio que inicia la conexión SSH. Para la autenticación basada en claves, usa el usuario que autenticó la herramienta de línea de comandos de Cloud Shell o accediste a la consola de Google Cloud. Para la identidad temporal como cuenta de servicio, usa el correo electrónico de la cuenta de servicio.
- IAP_ENABLED: Es un valor booleano (verdadero o falso) que indica si se usa Identity-Aware Proxy para establecer la conexión SSH.
Predeterminada:
true
--project
: El PROJECT_ID--universe-domain
: Si corresponde, el dominio de Trusted Partner Sovereign Cloud que aloja el recurso--parameter
o-p
: Parámetros del runbook- Obtén más información sobre Acceso al SO.
- Obtén información sobre cómo funcionan las conexiones SSH a las VM de Linux en Compute Engine.
- Para obtener instrucciones paso a paso, consulta una de las siguientes opciones:
- Consulta esta página sobre cómo administrar el acceso a SO en una organización
REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.
Mensajes de error comunes:
Los siguientes son ejemplos de errores comunes que pueden surgir cuando usas Acceso al SO.
No se puede encontrar el nombre del grupo
En algunas instancias que usan Acceso al SO, es posible que recibas el siguiente mensaje de error después de establecer la conexión:
/usr/bin/id: cannot find name for group ID 123456789
Ignora este mensaje de error. Este error no afecta tus VMs.
Error en la obtención de grupos
Es posible que veas registros similares a los siguientes cuando crees VMs:
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
Estos registros indican que tu organización no tiene configurados grupos de Linux de Acceso al SO. Ignora estos mensajes.
Precondición con errores
Es posible que veas un error similar al siguiente cuando te conectes a la VM mediante SSH:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
Este error se produce cuando el Acceso al SO intenta generar un nombre de usuario que ya existe dentro de una organización. Esto es común cuando se borra una cuenta de usuario y se crea un usuario nuevo con la misma dirección de correo electrónico poco después. Cuando se borra una cuenta de usuario, pueden pasar hasta 48 horas para que se quite la información POSIX del usuario.
Para solucionar este problema, realiza una de las siguientes acciones:
Argumento no válido
Es posible que veas errores similares al siguiente cuando te conectes a una VM con SSH o uses SCP para transferir archivos:
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.
Para resolver estos errores, haz lo siguiente:
Para evitar que este problema ocurra en el futuro, agrega una hora de vencimiento para las claves SSH. Las claves vencidas se quitan automáticamente de tu perfil de acceso 48 horas después de su vencimiento o cuando agregas una clave nueva a tu perfil.
Código de respuesta HTTP: 503
Es posible que veas el siguiente error cuando intentes conectarte a una VM mediante SSH:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 503
Este problema se debe al límite de frecuencia del servidor de metadatos de 100 consultas por segundo por instancia de máquina virtual. Este límite no se puede ajustar. Para resolver este problema, espera unos segundos y, luego, vuelve a intentar la conexión.
Para evitar este problema en el futuro, prueba lo siguiente:
Entradas de metadatos predeterminados de Acceso al SO
Compute Engine define un conjunto de entradas de metadatos predeterminados que proporcionan información sobre el Acceso al SO. El servidor siempre define y establece los metadatos predeterminados. Las claves de metadatos predeterminadas distinguen entre mayúsculas y minúsculas.
En la siguiente tabla, se describen las entradas que puedes consultar.
Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadatos Descripción project/attributes/enable-oslogin
Comprueba si el Acceso al SO está habilitado en el proyecto actual de Google Cloud. instance/attributes/enable-oslogin
Comprueba si el Acceso al SO está habilitado en la VM actual. oslogin/users/
Recupera información de perfil para los usuarios del Acceso al SO. Puedes pasar parámetros de consulta como username
,uid
,pagesize
ypagetoken
.oslogin/authorize/
Recupera la configuración de permisos de nivel administrativo o de acceso para un usuario del Acceso al SO.
Para verificar un permiso, debes especificar el parámetro de consulta
policy
. El valor del parámetro de política debe establecerse enlogin
(para verificar el permiso de acceso) oadminLogin
(para verificar el acceso sudo).Comprueba si el Acceso al SO está configurado
Usa la consola de Google Cloud o la CLI de Google Cloud para consultar los metadatos a fin de determinar si el Acceso al SO está habilitado. El Acceso al SO se habilita cuando la clave de metadatos
enable-oslogin
se configura comoTRUE
en los metadatos del proyecto o la instancia. Si se configuran los metadatos de la instancia y del proyecto, el valor establecido en los metadatos de la instancia tiene prioridad.Visualiza los usuarios del Acceso al SO
Para ver la información del perfil de varios usuarios, debes especificar los parámetros
pagesize
ypagetoken
. Reemplazapagesize
ypagetoken
por el valor numérico requerido.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE& pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"
Por ejemplo, para configurar
pagesize
en1
ypagetoken
en0
, ejecuta el siguiente comando:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"
En la mayoría de las distribuciones, también puedes ejecutar el comando
getent passwd
de Unix para recuperar las entradas de contraseña de los usuarios de la organización.Visualiza un usuario específico del Acceso al SO
Para ver la información de perfil de un usuario específico en tu VM, ejecuta el siguiente comando:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
Reemplaza
USERNAME
por el nombre de usuario del usuario que deseas consultar.Por ejemplo, puedes realizar una solicitud para buscar el usuario
user_example_com
. El siguiente comando y el resultado muestran el formato agregado para mejorar la legibilidad.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
El resultado es similar al siguiente:
{ "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..." } } }] }
En la mayoría de las distribuciones, también puedes ejecutar comandos de Unix como
getent passwd username
ogetent passwd uid
para recuperar la información de perfil.Para recuperar las claves SSH de un usuario, también puedes ejecutar
/usr/bin/google_authorized_keys USERNAME
. Si no se muestran claves, es posible que el usuario no tenga los permisos necesarios para acceder a la VM.Comprueba los permisos de acceso
Para ver los permisos de nivel administrativo y de acceso, debes proporcionar los parámetros de consulta
policy=login&email=LOGIN_NAME
.Por ejemplo, puedes consultar los permisos de acceso para el usuario
user_example_com
que se vio en la sección anterior.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
El resultado del comando indica que el usuario está autorizado para acceder a la VM:
{"success":true}
Comprueba si tu VM tiene una cuenta de servicio
Puedes consultar el servidor de metadatos para encontrar la cuenta de servicio asociada con tu VM. En tu VM, ejecuta el siguiente comando:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
El resultado es similar al siguiente:
12345-sa@developer.gserviceaccount.com/ default/
Si no se encuentra una cuenta de servicio, el resultado está en blanco.
Cómo depurar problemas de acceso al SO con gcpdiag
gcpdiag
es una herramienta de código abierto. No es un producto de Google Cloud compatible oficialmente. Puedes usar la herramientagcpdiag
para identificar y corregir problemas del proyecto de Google Cloud. Para obtener más información, consulta el proyecto en GitHub.En este runbook de gcpdiag, se investigan las posibles causas de los problemas de acceso SSH en las VMs de Windows y Linux en Google Cloud. Se enfoca en lo siguiente:Consola de 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
Puedes ejecutar
gcpdiag
con un wrapper que iniciegcpdiag
en un contenedor de Docker. Se debe instalar Docker o Podman.Consulta los parámetros disponibles para este runbook.
Reemplaza lo siguiente:
Marcas útiles:
Para obtener una lista y una descripción de todas las marcas de la herramienta
gcpdiag
, consulta las instrucciones de uso degcpdiag
.¿Qué sigue?
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2024-11-23 (UTC)
-