Neste documento, descrevemos como solucionar problemas de login do SO usando o servidor de metadados. Para informações sobre como configurar o Login do SO ou para instruções passo a passo, consulte Como configurar o Login do SO.
Você pode consultar o servidor de metadados de dentro de uma instância de máquina virtual (VM). Para mais informações, consulte Como armazenar e recuperar metadados de instância.
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud.
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Restaure a conta excluída.
- Remova as informações de POSIX da conta antes de excluí-la.
Veja seu perfil de login do SO executando o comando
gcloud compute os-login describe-profile
:gcloud compute os-login describe-profile
A resposta será semelhante a:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
Revise a saída para identificar as chaves SSH não usadas.
Remova as chaves não utilizadas da saída usando o comando
gcloud compute os-login ssh-keys remove
:gcloud compute os-login ssh-keys remove --key=KEY
Substitua
KEY
pela impressão digital das chaves ou pela string da chave.- Implementar um mecanismo de nova tentativa no código do aplicativo. Confira mais informações em:
- Reutilizar as conexões SSH atuais.
- Envie comandos em lotes para reduzir as conexões SSH e as consultas de metadados do Login do SO.
Consulte o perfil do usuário para ver o valor do campo
name
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
Na saída, anote o
name
.Execute o comando
login
a seguir usando o valor dename
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- Integridade da VM: verifica se a VM está em execução e tem recursos suficientes (CPU, memória, disco).
- Permissões: garante que você tenha as permissões de IAM corretas para configurar chaves SSH.
- Configurações da VM: verifica se as chaves SSH e outros metadados estão configurados corretamente.
- Regras de rede: analisa as regras de firewall para confirmar se o tráfego SSH é permitido.
- SO convidado: procura problemas internos do SO que possam bloquear o SSH.
- Preencha e copie o comando a seguir.
- Abra o console do Google Cloud e ative o Cloud Shell. Abrir Console do Cloud
- Cole o comando copiado.
- Execute o comando
gcpdiag
, que faz o download da imagem Dockergcpdiag
. e realiza verificações de diagnóstico. Se aplicável, siga as instruções de saída para corrigir verificações com falha. - Copie e execute o seguinte comando na estação de trabalho local.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Execute o comando
gcpdiag
../gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
- PROJECT_ID: o ID do projeto que contém o recurso
- VM_NAME: o nome da VM de destino no seu projeto.
- ZONE: a zona em que a VM de destino está localizada.
- PRINCIPAL: o principal do usuário ou da conta de serviço para iniciar a conexão SSH. Para a autenticação baseada em chaves, use o comando autenticado pela ferramenta de linha de comando do Cloud Shell ou conectado no console do Google Cloud. Para a representação de uma conta de serviço, use o e-mail da sua conta de servço.
- IAP_ENABLED: um valor booleano (verdadeiro ou falso)
que indica se o Identity-Aware Proxy é usado para estabelecer a conexão SSH.
Padrão:
true
- LOCAL_USER:usuário Posix na VM.
- CHECK_OS_LOGIN: um valor booleano (verdadeiro ou falso) que indica se o Login do SO deve ser usado para autenticação SSH.
- CHECK_SSH_IN_BROWSER:um valor booleano para verificar se o SSH no navegador é viável.
--universe-domain
: se aplicável, a Nuvem soberana de parceiro confiável que hospeda o recurso--parameter
ou-p
: parâmetros do runbook- Saiba mais sobre o Login do SO.
- Saiba como as conexões SSH com VMs do Linux funcionam no Compute Engine.
- Para instruções passo a passo, leia um dos seguintes procedimentos:
- Leia Como gerenciar o Login do SO em uma organização.
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.
Mensagens de erro comuns
Veja a seguir exemplos de erros comuns que você pode encontrar ao usar o Login do SO.
Não é possível encontrar o nome do grupo
Ao usar o Login do SO em algumas VMs, talvez você receba a seguinte mensagem de erro após a conexão ser estabelecida:
/usr/bin/id: cannot find name for group ID 123456789
Ignore essa mensagem de erro. Esse erro não afeta as VMs.
Falha ao receber grupos
É possível que você veja registros semelhantes aos seguintes ao criar 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
Esses registros indicam que a organização não tem grupos do Login do SO do Linux configurados. Ignore essas mensagens.
Falha na pré-condição
Talvez você observe um erro semelhante ao seguinte ao se conectar à VM usando SSH:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
Esse erro ocorre quando o Login do SO tenta gerar um nome de usuário que já existe em uma organização. Isso é comum quando uma conta de usuário é excluída e um novo usuário com o mesmo endereço de e-mail é criado logo em seguida. Depois que uma conta de usuário é excluída, pode levar até 48 horas para as informações serem removidas do POSIX do usuário.
Para resolver esse problema, faça uma das seguintes ações:
Argumento inválido
Talvez você veja erros semelhantes aos seguintes ao se conectar a uma VM usando SSH ou SCP para transferir arquivos:
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 esses erros, faça o seguinte:
Para evitar que esse problema ocorra no futuro, adicione um prazo de validade para as chaves SSH. As chaves expiradas são removidas automaticamente do perfil de login 48 horas após a expiração ou quando você adiciona uma nova chave ao perfil.
Código de resposta HTTP: 503
O seguinte erro pode aparecer quando você tentar se conectar a uma VM usando SSH:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 503
Esse 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 esse limite. Para resolver esse problema, aguarde alguns segundos e tente se conectar novamente.
Para evitar esse problema no futuro, tente o seguinte:
Entradas de metadados de Login do SO padrão
O Compute Engine define um conjunto de entradas de metadados padrão que veiculam informações de Login do SO. Os metadados padrão sempre são definidos e configurados no servidor. As chaves de metadados padrão diferenciam maiúsculas de minúsculas.
A tabela a seguir descreve as entradas que você pode consultar.
Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadados Descrição project/attributes/enable-oslogin
Verifica se o Login do SO está ativado no projeto atual do Google Cloud. instance/attributes/enable-oslogin
Verifica se o Login do SO está ativado na VM atual. oslogin/users/
Recupera informações de perfil para usuários do Login do SO. É possível transmitir parâmetros de consulta como username
,uid
,pagesize
epagetoken
.oslogin/authorize/
Recupera as configurações de permissão de login ou nível administrativo para um usuário de Login do SO.
Para verificar uma permissão, especifique o parâmetro de consulta
policy
. O valor do parâmetro de política precisa ser definido comologin
(para verificar a permissão de login) ouadminLogin
(para verificar o acesso ao sudo).Como verificar se o Login do SO está configurado
Use o console do Google Cloud ou a CLI do Google Cloud para consultar metadados de modo a determinar se o Login do SO está ativado. O login do SO é ativado quando a chave de metadados
enable-oslogin
é definida comoTRUE
nos metadados do projeto ou da instância. Se os metadados da instância e do projeto forem definidos, o valor definido nos metadados da instância terá precedência.Como visualizar usuários de Login do SO
Para visualizar as informações do perfil de vários usuários, você precisa especificar os parâmetros
pagesize
epagetoken
. Substituapagesize
epagetoken
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
pagesize
como1
epagetoken
como0
, 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 é possível executar o comando Unix
getent passwd
para recuperar as entradas de senha para usuários da organização.Como visualizar um usuário específico de login do SO
Para ver as informações de perfil de um usuário específico na VM, execute o comando a seguir:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
Substitua
USERNAME
pelo nome de usuário do usuário que você quer consultar.Por exemplo, é executar uma solicitação para procurar o usuário
user_example_com
. O comando e a saída a seguir mostram uma formatação adicional para melhorar a legibilidade.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
A resposta será semelhante a:
{ "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 é possível executar comandos Unix, como
getent passwd username
ougetent passwd uid
, para recuperar informações de perfil.Para recuperar as chaves SSH de um usuário, também é possível executar
/usr/bin/google_authorized_keys USERNAME
. Se nenhuma chave for retornada, talvez o usuário não tenha as permissões necessárias para fazer login na VM.Como verificar as permissões de login
Para ver as permissões de login e nível administrativo, é necessário fornecer os parâmetros de consulta
policy=login&email=LOGIN_NAME
.Por exemplo, é possível consultar as permissões de login do usuário
user_example_com
que foi visualizado na seção anterior.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
A resposta ao comando indica que o usuário está autorizado a fazer login na VM:
{"success":true}
Como verificar se sua VM tem uma conta de serviço
É possível consultar o servidor de metadados para encontrar a conta de serviço associada à VM. Na VM, execute o seguinte comando:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
A resposta será semelhante a:
12345-sa@developer.gserviceaccount.com/ default/
Se nenhuma conta de serviço for encontrada, a saída ficará em branco.
Como depurar problemas do Login do SO com o gcpdiag
gcpdiag
é uma ferramenta de código aberto. Não é um produto do Google Cloud oficialmente compatível. Use a ferramentagcpdiag
para identificar e corrigir problemas no projeto do Google Cloud. Para mais informações, consulte o projeto gcpdiag no GitHub.Este runbook do gcpdiag investiga possíveis causas de problemas de acesso SSH em VMs do Windows e do Linux no Google Cloud. O foco é:Console do Google Cloud
gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
Docker
Você pode executar
gcpdiag
usando um wrapper que iniciagcpdiag
em um contêiner do Docker. Docker ou Podman precisa ser instalado.Veja os parâmetros disponíveis para este runbook.
Substitua:
Flags úteis
Para conferir uma lista e descrição de todas as flags da ferramenta
gcpdiag
, consulte Instruções de uso dogcpdiag
.A seguir
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2024-12-22 UTC.
-