Solución de problemas de inicio de sesión del sistema operativo


Este documento describe cómo solucionar problemas de inicio de sesión en el sistema operativo utilizando el servidor de metadatos. Para obtener información sobre cómo configurar el inicio de sesión en el sistema operativo o instrucciones paso a paso, consulte Configuración del inicio de sesión en el sistema operativo .

Puede consultar el servidor de metadatos desde una instancia de máquina virtual (VM). Para obtener más información, consulte Almacenamiento y recuperación de metadatos de instancia .

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. 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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para 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 puede encontrar al utilizar el inicio de sesión en el sistema operativo.

No puedo encontrar el nombre del grupo

En algunas máquinas virtuales que utilizan el inicio de sesión en el sistema operativo, es posible que reciba el siguiente mensaje de error una vez establecida la conexión:

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

Ignore este mensaje de error. Este error no afecta a sus máquinas virtuales.

Fallo al conseguir grupos

Es posible que vea registros similares a los siguientes cuando crea máquinas virtuales:

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 su organización no tiene configurados grupos de inicio de sesión del sistema operativo Linux. Ignora estos mensajes.

Condición previa fallida

Es posible que vea un error similar al siguiente cuando se conecta a la máquina virtual mediante SSH:

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

Este error ocurre cuando OS Login intenta generar un nombre de usuario que ya existe dentro de una organización. Esto es común cuando se elimina una cuenta de usuario y poco después se crea un nuevo usuario con la misma dirección de correo electrónico. Después de eliminar una cuenta de usuario, se necesitan hasta 48 horas para eliminar la información POSIX del usuario.

Para resolver este problema, realice una de las siguientes acciones:

Argumento no válido

Es posible que vea errores similares a los siguientes cuando se conecta a una máquina virtual mediante SSH o utiliza 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, haga lo siguiente:

  1. Vea su perfil de inicio de sesión en el sistema operativo ejecutando el comando gcloud compute os-login describe-profile :

    gcloud compute os-login describe-profile
    

    El resultado es similar al siguiente:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Revise el resultado para identificar las claves SSH no utilizadas.

  3. Elimina las claves no utilizadas de la salida usando el comando gcloud compute os-login ssh-keys remove :

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

    Reemplace KEY con la huella digital de las claves o la cadena de claves.

Para evitar que este problema ocurra en el futuro, agregue un tiempo de vencimiento para las claves SSH . Las claves caducadas se eliminan automáticamente de su perfil de inicio de sesión 48 horas después de su vencimiento o cuando agrega una nueva clave a su perfil.

Código de respuesta HTTP: 429

Es posible que vea el siguiente error cuando intente conectarse a una máquina virtual mediante SSH:

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

Este problema se debe al límite de velocidad 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, espere unos segundos y luego vuelva a intentar la conexión.

Para evitar este problema en el futuro, intente lo siguiente:

  • Implemente un mecanismo de reintento en el código de la aplicación. Para obtener más información, consulte:
  • Reutilice las conexiones SSH existentes.
  • Envíe comandos en lotes para reducir las conexiones SSH y las consultas de metadatos de inicio de sesión del sistema operativo.

Entradas de metadatos de inicio de sesión del sistema operativo predeterminadas

Compute Engine define un conjunto de entradas de metadatos predeterminadas que brindan información de inicio de sesión del sistema operativo. Los metadatos predeterminados siempre los define y establece el servidor. Las claves de metadatos predeterminadas distinguen entre mayúsculas y minúsculas.

La siguiente tabla describe las entradas que puede consultar.

Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadatos Descripción
project/attributes/enable-oslogin Comprueba si el inicio de sesión del sistema operativo está habilitado en el proyecto actual de Google Cloud.
instance/attributes/enable-oslogin Comprueba si el inicio de sesión del sistema operativo está habilitado en la máquina virtual actual.
oslogin/users/ Recupera información de perfil para usuarios de inicio de sesión del sistema operativo. Puede pasar parámetros de consulta como username , uid , pagesize y pagetoken .
oslogin/authorize/

Recupera la configuración de permisos de inicio de sesión o de nivel administrativo para un usuario de inicio de sesión del sistema operativo.

Para comprobar un permiso, debe especificar el parámetro de consulta policy . El valor del parámetro de política debe establecerse en login (para verificar el permiso de inicio de sesión) o adminLogin (para verificar el acceso a sudo).

Comprobando si el inicio de sesión del sistema operativo está configurado

Utilice la consola de Google Cloud o la CLI de Google Cloud para consultar metadatos y determinar si el inicio de sesión en el sistema operativo está habilitado. El inicio de sesión en el sistema operativo está habilitado cuando la clave de metadatos enable-oslogin está configurada en TRUE en los metadatos del proyecto o de la instancia. Si se establecen metadatos de instancia y de proyecto, el valor establecido en los metadatos de instancia tiene prioridad.

Visualización de usuarios que inician sesión en el sistema operativo

Para ver la información del perfil de varios usuarios, debe especificar los parámetros pagesize y pagetoken . Reemplace el pagesize y pagetoken con 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 establecer el pagesize en 1 y el pagetoken en 0 , ejecute 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 puede ejecutar el comando de Unix getent passwd para recuperar las entradas de contraseña de los usuarios de la organización.

Ver un usuario de inicio de sesión de sistema operativo específico

Para ver la información del perfil de un usuario específico en su VM, ejecute el siguiente comando:

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

Reemplace USERNAME con el nombre de usuario del usuario que desea consultar.

Por ejemplo, puede realizar una solicitud para buscar el usuario user_example_com . El siguiente comando y resultado muestran 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 puede ejecutar comandos de Unix como getent passwd username o getent passwd uid para recuperar información del perfil.

Para recuperar las claves SSH de un usuario, también puede ejecutar /usr/bin/google_authorized_keys USERNAME . Si no se devuelve ninguna clave, es posible que el usuario no tenga los permisos necesarios para iniciar sesión en la máquina virtual.

Comprobando los permisos de inicio de sesión

Para ver los permisos de inicio de sesión y de nivel administrativo, debe proporcionar los parámetros de consulta policy=login&email= LOGIN_NAME .

  1. Consulta el perfil de 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"
  2. En el resultado, tome nota del name .

  3. Ejecute el siguiente comando login utilizando el valor de name :

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

Por ejemplo, puede consultar los permisos de inicio de sesión 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 a iniciar sesión en la VM:

{"success":true}

Comprobar si su VM tiene una cuenta de servicio

Puede consultar el servidor de metadatos para encontrar la cuenta de servicio asociada con su VM. En su VM, ejecute 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 ninguna cuenta de servicio, el resultado está en blanco.

¿Qué sigue?