Resolução de problemas do Início de sessão do SO


Este documento descreve como resolver problemas de início de sessão no SO através do servidor de metadados. Para obter informações sobre a configuração do Início de sessão do SO ou instruções passo a passo, consulte o artigo Configurar o Início de sessão do SO.

Pode consultar o servidor de metadados a partir de uma instância de máquina virtual (VM). Para mais informações, consulte o artigo Armazenar e obter metadados de instâncias.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    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. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Mensagens de erro comuns

Seguem-se exemplos de erros comuns que pode encontrar quando usa o início de sessão do SO.

Não é possível encontrar o nome do grupo

Em algumas VMs que usam o Início de sessão no SO, pode receber a seguinte mensagem de erro após a ligação ser estabelecida:

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

Ignore esta mensagem de erro. Este erro não afeta as suas VMs.

Falha ao obter grupos

Pode ver registos semelhantes aos seguintes quando cria 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

Estes registos indicam que a sua organização não tem grupos Linux de início de sessão no SO configurados. Ignore estas mensagens.

Falha na pré-condição

Pode ver um erro semelhante ao seguinte quando se liga à VM através de SSH:

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

Este erro ocorre quando o início de sessão do SO tenta gerar um nome de utilizador que já existe numa organização. Isto é comum quando uma conta de utilizador é eliminada e é criado um novo utilizador com o mesmo endereço de email pouco depois. Após a eliminação de uma conta de utilizador, a remoção das informações POSIX do utilizador demora até 48 horas.

Para resolver este problema, faça uma das seguintes ações:

Argumento inválido

Pode ver erros semelhantes aos seguintes quando se liga a uma VM através de SSH ou usa SCP para transferir ficheiros:

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 estes erros, faça o seguinte:

  1. Veja o seu perfil do Início de sessão do SO executando o comando gcloud compute os-login describe-profile:

    gcloud compute os-login describe-profile
    

    O resultado tem um aspeto semelhante ao seguinte:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Reveja o resultado para identificar chaves SSH não usadas.

  3. Remova todas as chaves não usadas da saída através do comando gcloud compute os-login ssh-keys remove:

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

    Substitua KEY pela impressão digital da chave ou pela string da chave.

Para evitar que este problema ocorra no futuro, adicione um prazo de validade para as chaves SSH. As chaves expiradas são removidas automaticamente do seu perfil de início de sessão 48 horas após a expiração ou quando adiciona uma nova chave ao seu perfil.

Código da resposta HTTP: 429

Pode ver o seguinte erro quando tenta estabelecer ligação a uma VM através de SSH:

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

Este problema é causado pelo limite de taxa do servidor de metadados de 100 consultas por segundo por instância de máquina virtual. Não é possível ajustar este limite. Para resolver este problema, aguarde alguns segundos e, em seguida, tente novamente a ligação.

Para evitar este problema no futuro, experimente o seguinte:

  • Implemente um mecanismo de repetição no código da aplicação. Para mais informações, consulte:
  • Reutilizar ligações SSH existentes.
  • Envie comandos em lotes para reduzir as ligações SSH e as consultas de metadados do início de sessão no SO.

Entradas de metadados do Início de sessão do SO predefinidas

O Compute Engine define um conjunto de entradas de metadados predefinidas que servem informações de início de sessão do SO. Os metadados predefinidos são sempre definidos e configurados pelo servidor. As chaves de metadados predefinidas são sensíveis a maiúsculas e minúsculas.

A tabela seguinte descreve as entradas que pode consultar.

Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadados Descrição
project/attributes/enable-oslogin Verifica se o início de sessão no SO está ativado no Google Cloud projeto atual.
instance/attributes/enable-oslogin Verifica se o início de sessão do SO está ativado na VM atual.
oslogin/users/ Obtém informações do perfil para utilizadores do Início de sessão do SO. Pode transmitir parâmetros de consulta, como username, uid, pagesize e pagetoken.
oslogin/authorize/

Obtém as definições de autorização ao nível administrativo ou de início de sessão para um utilizador do Início de sessão do SO.

Para verificar uma autorização, tem de especificar o parâmetro policy query. O valor do parâmetro de política tem de ser definido como login (para verificar a autorização de início de sessão) ou adminLogin (para verificar o acesso sudo).

A verificar se o Início de sessão do SO está configurado

Use a Google Cloud consola ou a Google Cloud CLI para consultar os metadados para determinar se o Início de sessão no SO está ativado. O início de sessão no SO é ativado quando a chave de metadados enable-oslogin é definida como TRUE nos metadados do projeto ou da instância. Se os metadados da instância e do projeto estiverem definidos, o valor definido nos metadados da instância tem prioridade.

Visualizar utilizadores do Início de sessão do SO

Para ver as informações do perfil de vários utilizadores, tem de especificar os parâmetros pagesize e pagetoken. Substitua pagesize e pagetoken pelo valor numérico necessário.

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

Por exemplo, para definir o pagesize como 1 e o pagetoken como 0, execute o seguinte comando:

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

Na maioria das distribuições, também pode executar o comando Unix getent passwd para obter as entradas de palavras-passe dos utilizadores da organização.

Ver um utilizador de início de sessão do SO específico

Para ver as informações do perfil de um utilizador específico na sua VM, execute o seguinte comando:

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

Substitua USERNAME pelo nome de utilizador do utilizador que quer consultar.

Por exemplo, pode fazer um pedido para procurar o utilizador user_example_com. O comando e o resultado seguintes mostram a formatação adicionada para melhorar a legibilidade.

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

O resultado é semelhante ao seguinte:

{
    "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..."
            }
        }
    }]
}

Na maioria das distribuições, também pode executar comandos Unix, como getent passwd username ou getent passwd uid, para obter informações do perfil.

Para obter as chaves SSH de um utilizador, também pode executar o comando /usr/bin/google_authorized_keys USERNAME. Se não forem devolvidas chaves, o utilizador pode não ter as autorizações necessárias para iniciar sessão na VM.

A verificar as autorizações de início de sessão

Para ver as autorizações de início de sessão e ao nível administrativo, tem de fornecer os parâmetros de consulta policy=login&email=LOGIN_NAME.

  1. Consulte o perfil do utilizador para obter o valor do campo name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. No resultado, tome nota do name.

  3. Execute o seguinte comando login com o valor de name:

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

Por exemplo, pode consultar as autorizações de início de sessão do utilizador user_example_com que foi visto na secção anterior:

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

O resultado do comando indica que o utilizador tem autorização para iniciar sessão na VM:

{"success":true}

Verificar se a sua VM tem uma conta de serviço

Pode consultar o servidor de metadados para encontrar a conta de serviço associada à sua VM. Na VM, execute o seguinte comando:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

O resultado é semelhante ao seguinte:

12345-sa@developer.gserviceaccount.com/
default/

Se não for encontrada nenhuma conta de serviço, o resultado fica em branco.

O que se segue?