Resolver erros do SSH


Neste documento, descrevemos erros comuns que você pode encontrar ao se conectar a instâncias de máquina virtual (VM) usando SSH, maneiras de resolver erros e métodos para diagnosticar conexões SSH com falha.

Ferramenta de solução de problemas SSH

Use a ferramenta de solução de problemas SSH para ajudar a determinar o motivo da falha na conexão SSH. A ferramenta de solução de problemas realiza os testes a seguir para verificar a causa das conexões SSH com falha:

  • Testes de permissões do usuário: verifica se você tem as permissões necessárias do IAM para se conectar à VM usando SSH.
  • Testes de conectividade de rede: verifica se a VM está conectada à rede.
  • Testes de status de instâncias de VM: verifica se o status da CPU da VM está em execução
  • Testes de configurações de VPC: verifica a porta SSH padrão.

Executar a ferramenta de solução de problemas

Use o console do Google Cloud ou a console do Google Cloud para verificar se há problemas de rede e erros de permissão do usuário que podem causar falha nas conexões SSH.

Console

Depois que uma conexão SSH falhar, você terá a opção de Tentar novamente ou Resolver problemas usando a ferramenta de solução de problemas do SSH no navegador.

Para executar essa ferramenta, clique em Resolver problemas.

Inicie a ferramenta de solução de problemas do SSH.

gcloud

Execute a ferramenta de solução de problemas usando o comando gcloud compute ssh:

gcloud compute ssh VM_NAME \
    --troubleshoot

Substitua VM_NAME pelo nome da VM a que você não pode se conectar.

A ferramenta solicita que você dê permissão para executar os testes de solução de problemas.

Analisar os resultados

Depois de executar a ferramenta de solução de problemas:

  1. Analise os resultados do teste para entender por que a conexão SSH da VM não está funcionando.
  2. Resolva conexões SSH executando as etapas de correção fornecidas pela ferramenta.
  3. Tente se reconectar à VM.

    Se a conexão não funcionar, tente solucionar os problemas manualmente fazendo o seguinte:

Erros comuns de SSH

Veja a seguir exemplos de erros comuns que podem ser encontrados ao usar o SSH para se conectar a VMs do Compute Engine.

Erros de SSH no navegador

Erro 401 não autorizado

O seguinte erro pode ocorrer quando você se conecta à VM usando o SSH no navegador do console do Google Cloud:

Unauthorized
Error 401

Esse erro ocorre quando usuários fazem parte de uma organização gerenciada no Google Workspace e há uma restrição ativa na política do Workspace que os impede de acessar o SSH no navegador e o console serial no Google Cloud.

Para resolver esse problema, peça para um administrador do Google Workspace fazer o seguinte:

  1. Confirme se o Google Cloud está ativado para a organização.

    Se o Google Cloud estiver desativado, ative-o e tente fazer a conexão novamente.

  2. Verifique se os serviços não controlados individualmente estão ativados.

    Se esses serviços estiverem desativados, ative-os e tente se conectar novamente.

Se o problema persistir após a ativação das configurações do Google Cloud no Google Workspace, faça o seguinte:

  1. Capture o tráfego de rede em um arquivo HTTP Archive (HAR) que comece no início da conexão SSH no navegador.

  2. Crie um caso do Cloud Customer Care e anexe o arquivo HAR.

Não foi possível estabelecer uma conexão. Tentando novamente...

O seguinte erro pode ocorrer ao iniciar uma sessão SSH:

Could not connect, retrying ...

Não foi possível estabelecer uma conexão. Tentando novamente

Para resolver esse problema, faça o seguinte:

  1. Depois que a VM terminar de inicializar, tente se conectar novamente. Se a conexão não for bem-sucedida, verifique se a VM não inicializou no modo de emergência executando o comando a seguir:

    gcloud compute instances get-serial-port-output VM_NAME \
    | grep "emergency mode"
    

    Se a VM for inicializada no modo de emergência, resolva o processo de inicialização da VM para identificar onde o processo de inicialização está falhando.

  2. Verifique se o serviço google-guest-agent.service está em execução executando o comando a seguir no console serial.

    systemctl status google-guest-agent.service
    

    Se o serviço estiver desativado, ative e inicie-o executando os seguintes comandos:

    systemctl enable google-guest-agent.service
    systemctl start google-guest-agent.service
    
  3. Verifique se os scripts do Agente do Google para Linux estão instalados e em execução. Para mais informações, consulte Como determinar o status do Agente do Google. Se o agente do Google do Linux não estiver instalado, reinstale-o.

  4. Verifique se você tem os papéis necessários para se conectar à VM. Se a VM usa o Login do SO, consulte Atribuir papel do IAM para o Login do SO. Se a VM não usar o Login do SO, você precisará do papel de administrador da instância de do compute ou do papel de usuário da conta de serviço (se a VM estiver configurada para ser executada como uma conta de serviço). As funções são necessárias para atualizar os metadados das chaves SSH da instância ou do projeto.

  5. Para verificar se há uma regra de firewall que permite o acesso SSH, execute o seguinte comando:

    gcloud compute firewall-rules list | grep "tcp:22"
    
  6. Verifique se há uma rota padrão para a Internet (ou para o host de bastião). Para mais informações, consulte Como verificar rotas.

  7. Verifique se o volume raiz não está sem espaço em disco. Para mais informações, consulte Como solucionar problemas de discos completos e redimensionamento de disco.

  8. Para verificar se a VM não está sem memória, execute o seguinte comando:

    gcloud compute instances get-serial-port-output instance-name \
    | grep "Out of memory: Kill process" - e "Kill process" -e "Memory cgroup out of memory" -e "oom"
    

    Se a VM estiver sem memória, conecte-se ao console serial para resolver o problema.

Erros do Linux

Permissão negada (publickey)

O seguinte erro pode ocorrer quando você se conectar à VM:

USERNAME@VM_EXTERNAL_IP: Permission denied (publickey).

Esse erro pode ocorrer por vários motivos. Estas são algumas das causas mais comuns desse erro:

  • Você usou uma chave SSH armazenada nos metadados para se conectar a uma VM que tem o login do SO ativado. Se o Login do SO estiver ativado no projeto, a VM não aceitará chaves SSH armazenadas nos metadados. Se você não tiver certeza se o Login do SO está ativado, consulte Como verificar se o Login do SO está configurado.

    Para resolver esse problema, tente uma das seguintes opções:

  • Você usou uma chave SSH armazenada em um perfil de login do SO para se conectar a uma VM que não tem o login do SO ativado. Se você desativar o login do SO, sua VM não aceitará chaves SSH armazenadas no perfil de login do SO. Se você não tiver certeza de que o Login do SO está ativado, consulte Como verificar se o Login do SO está configurado.

    Para resolver esse problema, tente uma das seguintes opções:

  • A VM tem o Login do SO ativado, mas você não tem permissões de IAM suficientes para usar esse recurso. Para se conectar a uma VM com o Login do SO ativado, você vai precisar das permissões necessárias. Se você não tiver certeza se o Login do SO está ativado, consulte Como verificar se o Login do SO está configurado.

    Para resolver esse problema, conceda os papéis do IAM de Login do SO necessários.

  • Sua chave expirou e o Compute Engine excluiu o arquivo ~/.ssh/authorized_keys. Se você tiver adicionado manualmente as chaves SSH à VM e conectado a ela usando o console do Google Cloud, o Compute Engine criará um novo par de chaves para sua conexão. Depois que o novo par de chaves expirar, o Compute Engine excluirá o arquivo ~/.ssh/authorized_keys na VM, que incluiu a chave SSH adicionada manualmente.

    Para resolver esse problema, tente uma das seguintes opções:

  • Você se conectou usando uma ferramenta de terceiros, e seu comando SSH está mal configurado. Se você se conectar usando o comando ssh, mas não especificar um caminho para a chave privada ou se especificar um caminho incorreto para a chave privada, a VM recusará a conexão.

    Para resolver esse problema, tente uma das seguintes opções:

    • Execute este comando:
      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Substitua:
      • PATH_TO_PRIVATE_KEY: o caminho para o arquivo da chave SSH particular.
      • USERNAME: o nome do usuário que se conecta à instância. Se você gerencia suas chaves SSH em metadados, o nome de usuário será aquele que você especificou quando criou a chave SSH. Em contas do Login do SO, o nome de usuário é definido no seu perfil do Google.
      • EXTERNAL_IP: o endereço IP externo da VM.
    • Conecte-se à VM usando o console do Google Cloud ou a Google Cloud CLI. Quando você usa essas ferramentas para se conectar, o Compute Engine gerencia a criação da chave para você. Para mais informações, consulte Como se conectar a VMs.
  • O ambiente convidado da VM não está em execução. Se esta for a primeira vez que você está se conectando à VM e o ambiente de convidado não estiver em execução, a VM poderá recusar sua solicitação de conexão SSH.

    Para resolver esse problema, faça o seguinte:

    1. Reinicie a VM.
    2. No Console do Google Cloud, inspecione os registros de inicialização do sistema na saída da porta serial para determinar se o ambiente convidado está em execução. Para mais informações, consulte Como validar o ambiente de convidado.
    3. Se o ambiente para convidado não estiver em execução, instale-o manualmente clonando o disco de inicialização da VM e usando um script de inicialização.
  • O Daemon do OpenSSH (sshd) não está sendo executado ou configurado corretamente. O sshd fornece acesso remoto seguro ao sistema por meio do protocolo SSH. Se ela estiver configurada incorretamente ou não estiver em execução, não será possível se conectar à sua VM via SSH.

    Para resolver esse problema, tente uma ou mais destas opções:

    • Consulte o guia do usuário do seu sistema operacional para garantir que o sshd_config esteja configurado corretamente.

    • Verifique se você tem as configurações de propriedade e permissão necessárias para:

      • os diretórios $HOME e $HOME/.ssh
      • Arquivo $HOME/.ssh/authorized_keys

      Responsabilidade

      O ambiente convidado armazena chaves públicas SSH autorizadas no arquivo $HOME/.ssh/authorized_keys. O proprietário dos diretórios $HOME e $HOME/.ssh e o arquivo $HOME/.ssh/authorized_keys precisam ser os mesmos do usuário que se conecta à VM.

      Permissões

      O ambiente de convidado requer as seguintes permissões do Linux:

      Caminho Permissões
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Para saber qual das opções é a permissão padrão correta para seu diretório $HOME, consulte a documentação oficial da sua distribuição específica do Linux.


      Como alternativa, é possível criar uma nova VM com base na mesma imagem e verificar as permissões padrão de $HOME.

      Para saber como mudar as permissões e a propriedade, leia sobre chmod e chown.

    • Reinicie o sshd executando o seguinte comando:

      systemctl restart sshd.service

      Verifique se há erros no status executando o seguinte comando:

      systemctl status sshd.service

      A saída do status pode conter informações como o código de saída, o motivo da falha etc. Use esses detalhes para mais soluções de problemas.

  • O disco de inicialização da VM está cheio. Quando uma conexão SSH é estabelecida, o ambiente convidado adiciona a chave SSH pública da sessão ao arquivo ~/.ssh/authorized_keys. Se o disco estiver cheio, a conexão falhará.

    Para resolver esse problema, tente uma ou mais destas opções:

    • Confirme se o disco de inicialização está cheio depurando com o console serial para identificar no space left errors.
    • Redimensione o disco.
    • Se você sabe quais arquivos estão consumindo o espaço em disco, crie um script de inicialização que exclua arquivos desnecessários e libere espaço. Depois que a VM for iniciada e você se conectar a ela, exclua os metadados startup-script.
  • As permissões ou a propriedade em $HOME, $HOME/.ssh ou $HOME/.ssh/authorized_keys estão incorretas.

    Responsabilidade

    O ambiente convidado armazena chaves públicas SSH autorizadas no arquivo $HOME/.ssh/authorized_keys. O proprietário dos diretórios $HOME e $HOME/.ssh e o arquivo $HOME/.ssh/authorized_keys precisam ser os mesmos do usuário que se conecta à VM.

    Permissões

    O ambiente de convidado requer as seguintes permissões do Linux:

    Caminho Permissões
    /home 0755
    $HOME 0700 ou 0750 ou 0755 *
    $HOME/.ssh 0700
    $HOME/.ssh/authorized_keys 0600

    * Para saber qual das opções é a permissão padrão correta para seu diretório $HOME, consulte a documentação oficial da sua distribuição específica do Linux.


    Como alternativa, é possível criar uma nova VM com base na mesma imagem e verificar as permissões padrão de $HOME.

    Para saber como mudar as permissões e a propriedade, leia sobre chmod e chown.

Falha na conexão

Os seguintes erros podem ocorrer quando você se conecta à VM pelo console do Google Cloud, pela CLI gcloud, por um Bastion Host ou por um cliente local:

  • O console do Google Cloud

    Connection Failed
    
    We are unable to connect to the VM on port 22.
    
  • A CLI gcloud:

    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
    
  • Um Bastion Host ou um cliente local:

    port 22: Connection timed out.
    
    port 22: Connection refused
    

Esses erros podem ocorrer por vários motivos. Veja a seguir algumas das causas mais comuns dos erros:

  • A VM está inicializando e sshd ainda não está em execução. Não é possível se conectar a uma VM antes da execução.

    Para resolver esse problema, aguarde a conclusão da inicialização da VM e tente se conectar novamente.

  • sshd está sendo executado em uma porta personalizada. Se você configurou sshd para ser executado em uma porta diferente da porta 22, não poderá se conectar à sua VM.

    Para resolver esse problema, crie uma regra de firewall personalizada que permita o tráfego tcp na porta em que o sshd está sendo executado usando o seguinte comando:

    gcloud compute firewall-rules create FIREWALL_NAME \
      --allow tcp:PORT_NUMBER
    

    Para mais informações sobre como criar regras de firewall personalizadas, consulte Como criar regras de firewall.

  • A regra de firewall SSH está ausente ou não permite o tráfego de IAP ou da Internet pública. As conexões SSH serão recusadas se as regras de firewall não permitirem conexões do tráfego de entrada TCP ou IAP para o intervalo de IP 0.0.0.0/0.

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

    • Se você usa o Identity-Aware Proxy (IAP) para o encaminhamento de TCP, atualize a regra de firewall personalizada para aceitar o tráfego do IAP e verifique as permissões do IAM.

      1. Atualize a regra de firewall personalizada para permitir o tráfego de 35.235.240.0/20, o intervalo de endereços IP que o IAP usa para o encaminhamento de TCP. Para mais informações, consulte Criar uma regra de firewall.
      2. Conceda permissões para usar o encaminhamento de TCP do IAP, caso ainda não tenha feito isso.
    • Se você não usa o IAP, atualize a regra de firewall personalizada para permitir o tráfego SSH de entrada.

      1. Atualize sua regra de firewall personalizada para Permitir conexões ssh de entrada para VMs.
  • A conexão SSH falhou depois que você fez upgrade do kernel da VM. Uma VM pode sofrer um kernel panic após uma atualização do kernel, fazendo com que a VM fique inacessível.

    Para resolver esse problema, faça o seguinte:

    1. Monte o disco em outra VM.
    2. Atualize o arquivo grub.cfg para usar a versão anterior do kernel.
    3. Anexe o disco à VM sem resposta.
    4. Verifique se o status da VM é RUNNING usando o comando gcloud compute instances describe.
    5. Reinstale o kernel.
    6. Reinicie a VM.

    Como alternativa, se você criou um snapshot do disco de inicialização antes de fazer upgrade da VM, use o snapshot para criar uma VM.

  • O Daemon do OpenSSH (sshd) não está sendo executado ou configurado corretamente. O sshd fornece acesso remoto seguro ao sistema por meio do protocolo SSH. Se ela estiver configurada incorretamente ou não estiver em execução, não será possível se conectar à sua VM via SSH.

    Para resolver esse problema, tente uma ou mais destas opções:

    • Consulte o guia do usuário do seu sistema operacional para garantir que o sshd_config esteja configurado corretamente.

    • Verifique se você tem as configurações de propriedade e permissão necessárias para:

      • os diretórios $HOME e $HOME/.ssh
      • Arquivo $HOME/.ssh/authorized_keys

      Responsabilidade

      O ambiente convidado armazena chaves públicas SSH autorizadas no arquivo $HOME/.ssh/authorized_keys. O proprietário dos diretórios $HOME e $HOME/.ssh e o arquivo $HOME/.ssh/authorized_keys precisam ser os mesmos do usuário que se conecta à VM.

      Permissões

      O ambiente de convidado requer as seguintes permissões do Linux:

      Caminho Permissões
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Para saber qual das opções é a permissão padrão correta para seu diretório $HOME, consulte a documentação oficial da sua distribuição específica do Linux.


      Como alternativa, é possível criar uma nova VM com base na mesma imagem e verificar as permissões padrão de $HOME.

      Para saber como mudar as permissões e a propriedade, leia sobre chmod e chown.

    • Reinicie o sshd executando o seguinte comando:

      systemctl restart sshd.service

      Verifique se há erros no status executando o seguinte comando:

      systemctl status sshd.service

      A saída do status pode conter informações como o código de saída, o motivo da falha etc. Use esses detalhes para mais soluções de problemas.

  • A VM não está inicializando e não é possível se conectar usando SSH ou o console serial. Se a VM estiver inacessível, o sistema operacional poderá estar corrompido. Se o disco de inicialização não for inicializado, será possível diagnosticar o problema. Se você quiser recuperar a VM corrompida e recuperar dados, consulte Como recuperar uma VM corrompida ou um disco de inicialização completo.

  • A VM está sendo inicializada no modo de manutenção. Ao inicializar no modo de manutenção, a VM não aceita conexões SSH, mas é possível se conectar ao console serial da VM e fazer login como usuário raiz.

    Para resolver esse problema, faça o seguinte:

    1. Se você não tiver definido uma senha raiz para a VM, use um script de inicialização de metadados para executar o seguinte comando durante a inicialização:

      echo "root:NEW_PASSWORD" | chpasswd

      Substitua NEW_PASSWORD por uma senha de sua escolha.

    2. Reinicie a VM.

    3. Conecte-se ao console serial da VM e faça login como o usuário raiz.

Erro inesperado

O seguinte erro pode ocorrer quando você tenta se conectar a uma VM do Linux:

Connection Failed
You cannot connect to the VM instance because of an unexpected error. Wait a few moments and then try again.

Esse problema pode ocorrer por vários motivos. Confira a seguir algumas causas comuns do erro:

  • O Daemon do OpenSSH (sshd) não está sendo executado ou configurado corretamente. O sshd fornece acesso remoto seguro ao sistema por meio do protocolo SSH. Se ela estiver configurada incorretamente ou não estiver em execução, não será possível se conectar à sua VM via SSH.

    Para resolver esse problema, tente uma ou mais destas opções:

    • Consulte o guia do usuário do seu sistema operacional para garantir que o sshd_config esteja configurado corretamente.

    • Verifique se você tem as configurações de propriedade e permissão necessárias para:

      • os diretórios $HOME e $HOME/.ssh
      • Arquivo $HOME/.ssh/authorized_keys

      Responsabilidade

      O ambiente convidado armazena chaves públicas SSH autorizadas no arquivo $HOME/.ssh/authorized_keys. O proprietário dos diretórios $HOME e $HOME/.ssh e o arquivo $HOME/.ssh/authorized_keys precisam ser os mesmos do usuário que se conecta à VM.

      Permissões

      O ambiente de convidado requer as seguintes permissões do Linux:

      Caminho Permissões
      /home 0755
      $HOME 0700 ou 0750 ou 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Para saber qual das opções é a permissão padrão correta para seu diretório $HOME, consulte a documentação oficial da sua distribuição específica do Linux.


      Como alternativa, é possível criar uma nova VM com base na mesma imagem e verificar as permissões padrão de $HOME.

      Para saber como mudar as permissões e a propriedade, leia sobre chmod e chown.

    • Reinicie o sshd executando o seguinte comando:

      systemctl restart sshd.service

      Verifique se há erros no status executando o seguinte comando:

      systemctl status sshd.service

      A saída do status pode conter informações como o código de saída, o motivo da falha etc. Use esses detalhes para mais soluções de problemas.

  • Problema desconhecido do daemon SSH. Para diagnosticar um problema desconhecido do daemon SSH, verifique se há erros nos registros do console serial.

    Dependendo da saída dos registros do console serial, tente resgatar a VM e corrigir os problemas relacionados ao daemon SSH fazendo o seguinte:

    1. Anexe o disco a outra VM do Linux.
    2. Conecte-se à VM que tem o disco montado.
    3. Ative o disco no SO para um diretório MOUNT_DIR na VM.
    4. Confira os registros relacionados ao SSH, /var/log/secure ou /var/log/auth.log, para problemas/erros. Se você encontrar algum problema que possa ser corrigido, tente corrigi-lo. Caso contrário, crie um caso de suporte e anexe os registros.
    5. Desconecte o disco do SO usando o comando umount:

      cd ~/
      umount /mnt
      
    6. Desconectar o disco da VM.

    7. Anexe o disco à VM original.

    8. Inicie a VM.

Falha ao conectar ao back-end

Os seguintes erros podem ocorrer quando você se conecta à sua VM pelo console do Google Cloud ou pela CLI gcloud:

  • O console do Google Cloud

    -- Connection via Cloud Identity-Aware Proxy Failed
    
    -- Code: 4003
    
    -- Reason: failed to connect to backend
    
  • A CLI gcloud:

    ERROR: (gcloud.compute.start-iap-tunnel) Error while connecting [4003: 'failed to connect to backend'].
    

Esses erros ocorrem quando você tenta usar o SSH para se conectar a uma VM que não tem um endereço IP público e não configurou o Identity-Aware Proxy na porta 22.

Para resolver esse problema, crie uma regra de firewall na porta 22 que permita o tráfego de entrada do Identity-Aware Proxy.

A chave do host não corresponde

O seguinte erro pode ocorrer quando você se conectar à VM:

Host key for server IP_ADDRESS does not match

Esse erro ocorre quando a chave de host no arquivo ~/.ssh/known_hosts não corresponde à de host da VM.

Para resolver esse problema, exclua a chave de host do arquivo ~/.ssh/known_hosts e tente a conexão novamente.

O valor dos metadados é muito grande

O seguinte erro pode ocorrer quando você tenta adicionar uma nova chave SSH aos metadados:

ERROR:"Value for field 'metadata.items[X].value' is too large: maximum size 262144 character(s); actual size NUMBER_OF_CHARACTERS."

Os valores de metadados têm um limite máximo de 256 KB. Para minimizar essa limitação, siga um destes procedimentos:

Erros do Windows

Permissão negada. Tente novamente.

O seguinte erro pode ocorrer quando você se conectar à VM:

USERNAME@compute.INSTANCE_ID's password:
Permission denied, please try again.

Esse erro indica que o usuário que está tentando se conectar à VM não existe na VM. Estas são algumas das causas mais comuns desse erro:

  • Sua versão da CLI gcloud está desatualizada

    Se a CLI gcloud estiver desatualizada, é possível que você esteja tentando se conectar usando um nome de usuário não configurado. Para resolver esse problema, atualize a CLI gcloud.

  • Você tentou se conectar a uma VM do Windows sem o SSH ativado.

    Para resolver esse erro, defina a chave enable-windows-ssh como TRUE nos metadados do projeto ou da instância. Para mais informações sobre como definir metadados, consulte Definir metadados personalizados.

Permissão negada (publickey,keyboard-interactive)

O erro a seguir pode ocorrer quando você se conecta a uma VM que não tem o SSH ativado:

Permission denied (publickey,keyboard-interactive).

Para resolver esse erro, defina a chave enable-windows-ssh como TRUE nos metadados do projeto ou da instância. Para mais informações sobre como definir metadados, consulte Definir metadados personalizados.

Não foi possível executar o SSH na instância

O erro a seguir pode ocorrer quando você se conecta à VM a partir da CLI gcloud:

ERROR: (gcloud.compute.ssh) Could not SSH into the instance.
It is possible that your SSH key has not propagated to the instance yet.
Try running this command again.  If you still cannot connect, verify that the firewall and instance are set to accept ssh traffic.

Esse erro pode ocorrer por vários motivos. Veja a seguir algumas das causas mais comuns dos erros:

  • Você tentou se conectar a uma VM do Windows sem o SSH instalado.

    Para resolver esse problema, siga as instruções para Ativar o SSH para Windows em uma VM em execução.

  • O servidor OpenSSH (sshd) não está em execução ou não está configurado corretamente. O sshd fornece acesso remoto seguro ao sistema por meio do protocolo SSH. Se ela estiver configurada incorretamente ou não estiver em execução, não será possível se conectar à sua VM via SSH.

    Para resolver esse problema, consulte Configuração do servidor OpenSSH para Windows Server e Windows para garantir que sshd esteja configurado corretamente.

Tempo limite de conexão expirado

Conexões SSH expiradas podem ser causadas por um dos motivos a seguir:

  • A VM não terminou de ser inicializada. Aguarde um pouco para que a VM seja inicializada.

    Para resolver esse problema, aguarde a conclusão da inicialização da VM e tente se conectar novamente.

  • O pacote SSH não está instalado. As VMs do Windows exigem que você instale o pacote google-compute-engine-ssh antes de se conectar usando SSH.

    Para resolver esse problema, instale o pacote SSH.

Diagnosticar conexões SSH com falha

Nas seções a seguir, veja as etapas para diagnosticar a causa das conexões SSH com falha e as etapas para corrigir as conexões.

Antes de diagnosticar conexões SSH com falha, conclua as seguintes etapas:

Métodos de diagnóstico para VMs do Linux e do Windows

Testar a conectividade

Talvez não seja possível executar o SSH em uma instância de VM devido a problemas de conectividade vinculados a firewalls, conexão de rede ou conta de usuário. Siga as etapas nesta seção para identificar problemas de conectividade.

Verificar as regras de firewall

O Compute Engine provisiona a cada projeto um conjunto padrão de regras de firewall que permitem o tráfego SSH. Se não for possível acessar a instância, use a ferramenta de linha de comando gcloud compute para verificar a lista de firewalls e garantir a presença da regra default-allow-ssh.

Na estação de trabalho local, execute o comando a seguir:

gcloud compute firewall-rules list

Se você não encontrar a regra de firewall, adicione-a novamente:

gcloud compute firewall-rules create default-allow-ssh \
    --allow tcp:22

Para visualizar todos os dados associados à regra de firewall default-allow-ssh no seu projeto, use o comando gcloud compute firewall-rules describe:

gcloud compute firewall-rules describe default-allow-ssh \
    --project=project-id

Para mais informações sobre regras de firewall, consulte Regras de firewall no Google Cloud.

Testar conexão de rede

Para determinar se a conexão de rede está funcionando, teste o handshake TCP:

  1. Consiga o natIP externo da VM:

    gcloud compute instances describe VM_NAME \
        --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    

    Substitua VM_NAME pelo nome da VM à qual você não pode se conectar.

  2. Teste a conexão de rede com a VM pela estação de trabalho:

    Linux, Windows 2019/2022 e macOS

    curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:PORT_NUMBER
    

    Substitua:

    • EXTERNAL_IP: o endereço IP externo que você recebeu na etapa anterior;
    • PORT_NUMBER: o número da porta

    Se o handshake TCP for bem-sucedido, a saída será semelhante a esta:

    Expire in 0 ms for 6 (transfer 0x558b3289ffb0)
    Expire in 5000 ms for 2 (transfer 0x558b3289ffb0)
    Trying 192.168.0.4...
    TCP_NODELAY set
    Expire in 200 ms for 4 (transfer 0x558b3289ffb0)
    Connected to 192.168.0.4 (192.168.0.4) port 443 (#0)
    > GET / HTTP/1.1
    > Host: 192.168.0.4:443
    > User-Agent: curl/7.64.0
    > Accept: */*
    >
    Empty reply from server
    Connection #0 to host 192.168.0.4 left intact
    

    A linha Connected to indica um handshake de TCP bem-sucedido.

    Windows 2012 e 2016

    PS C:> New-Object System.Net.Sockets.TcpClient('EXTERNAL_IP',PORT_NUMBER)
    

    Substitua:

    • EXTERNAL_IP: o IP externo que você recebeu na etapa anterior;
    • PORT_NUMBER: o número da porta

    Se o handshake TCP for bem-sucedido, a saída será semelhante a esta:

    Available           : 0
    Client              : System.Net.Sockets.Socket
    Connected           : True
    ExclusiveAddressUse : False
    ReceiveBufferSize   : 131072
    SendBufferSize      : 131072
    ReceiveTimeout      : 0
    SendTimeout         : 0
    LingerState         : System.Net.Sockets.LingerOption
    NoDelay             : False
    

    A linha Connected: True indica um handshake de TCP bem-sucedido.

Se o handshake TCP for concluído com sucesso, uma regra de firewall de software não bloqueará a conexão, o SO encaminhará pacotes corretamente e um servidor fará detecções na porta de destino. Se o handshake TCP for concluído com êxito, mas a VM não aceitar conexões SSH, o problema pode ser com o daemon sshd estar configurado incorretamente ou não ser executado corretamente. Consulte o guia do usuário do seu sistema operacional para garantir que o sshd_config esteja configurado corretamente.

Para executar testes de conectividade para analisar a configuração do caminho de rede VPC entre duas VMs e verificar se a configuração programada permite o tráfego, consulte Verificar se há regras de firewall configuradas incorretamente no Google Cloud.

Conectar-se como um usuário diferente

Talvez o problema que impeça você de fazer login esteja restrito à sua conta de usuário. Por exemplo, pode ser que as permissões no arquivo ~/.ssh/authorized_keys da instância não estejam definidas corretamente para o usuário.

Tente fazer login como um usuário diferente com a CLI gcloud. Para isso, especifique ANOTHER_USERNAME com a solicitação SSH. A CLI gcloud atualizará os metadados do projeto para adicionar o novo usuário e permitir o acesso por SSH.

gcloud compute ssh ANOTHER_USERNAME@VM_NAME

Substitua:

  • ANOTHER_USERNAME é um nome de usuário diferente do seu próprio nome de usuário;
  • VM_NAME é o nome da VM à qual você quer se conectar.

Depurar problemas usando o console serial

Recomendamos que você revise os registros do console serial para verificar se há erros de conexão. É possível acessar o console serial como usuário raiz na estação de trabalho local usando um navegador. Isso é útil quando não é possível fazer login com SSH ou quando a instância não tem conexão com a rede. O console serial ainda pode ser acessado em ambas as situações.

Para fazer login no console serial da VM e resolver problemas com ela, siga estas etapas:

  1. Ative o acesso interativo ao console serial da VM.

  2. Para VMs do Linux, modifique a senha raiz, adicione o seguinte script de inicialização à sua VM:

    echo root:PASSWORD | chpasswd

    Substitua PASSWORD por uma senha de sua escolha.

  3. Use o console serial para se conectar à VM.

  4. Para VMs do Linux, após concluir a depuração de todos os erros, desative o login da conta raiz:

    sudo passwd -l root

Métodos de diagnóstico para VMs do Linux

Inspecionar a instância de VM sem encerrá-la

Talvez você esteja com problemas para se conectar a uma instância que continua a exibir tráfego de produção corretamente. Nesse caso, convém inspecionar o disco sem interromper a instância.

Para inspecionar e resolver problemas do disco:

  1. Faça backup do disco de inicialização criando um snapshot do disco.
  2. Crie um disco permanente regular a partir desse snapshot.
  3. Crie uma instância temporária.
  4. Anexe e ative o disco permanente regular na nova instância temporária.

Esse procedimento cria uma rede isolada que permite apenas conexões SSH. Essa configuração impede que a instância clonada produza efeitos indesejados nos serviços de produção.

  1. Crie uma nova rede VPC para hospedar a instância clonada:

    gcloud compute networks create debug-network
    

    Substitua NETWORK_NAME pelo nome escolhido para chamar a nova rede.

  2. Adicione uma regra de firewall para possibilitar conexões SSH à rede:

    gcloud compute firewall-rules create debug-network-allow-ssh \
       --network debug-network \
       --allow tcp:22
    
  3. Crie um snapshot do disco de inicialização.

    gcloud compute disks snapshot BOOT_DISK_NAME \
       --snapshot-names debug-disk-snapshot
    

    Substitua BOOT_DISK_NAME pelo nome do disco de inicialização.

  4. Crie um novo disco com esse snapshot:

    gcloud compute disks create example-disk-debugging \
       --source-snapshot debug-disk-snapshot
    
  5. Crie uma instância de depuração sem um endereço IP externo:

    gcloud compute instances create debugger \
       --network debug-network \
       --no-address
    
  6. Anexe o disco de depuração à instância:

    gcloud compute instances attach-disk debugger \
       --disk example-disk-debugging
    
  7. Siga as instruções para Conectar-se a uma VM usando um Bastion Host.

  8. Depois de fazer login na instância de depuração, solucione o problema nela. Por exemplo, analise os registros da instância:

    sudo su -
    
    mkdir /mnt/VM_NAME
    
    mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/VM_NAME
    
    cd /mnt/VM_NAME/var/log
    
    # Identify the issue preventing ssh from working
    ls
    

    Substitua VM_NAME pelo nome da VM à qual você não pode se conectar.

Usar um script de inicialização

Se nenhuma das opções anteriores tiver ajudado, crie um script de inicialização para coletar informações logo após o início da instância. Siga as instruções para executar esse script.

Depois, também será necessário redefinir a instância antes que os metadados entrem em vigor. Para isso, use o comandogcloud compute instances reset.

Como alternativa, é possível recriar a instância executando um script de inicialização de diagnóstico:

  1. Execute gcloud compute instances delete com a sinalização --keep-disks.

    gcloud compute instances delete VM_NAME \
       --keep-disks boot
    

    Substitua VM_NAME pelo nome da VM à qual você não pode se conectar.

  2. Adicione uma nova instância com o mesmo disco e especifique o script de inicialização.

    gcloud compute instances create NEW_VM_NAME \
       --disk name=BOOT_DISK_NAME,boot=yes \
       --metadata startup-script-url URL
    

    Substitua:

    • NEW_VM_NAME é o nome da nova VM que você está criando;
    • BOOT_DISK_NAME é o nome do disco de inicialização da VM à qual não é possível se conectar;
    • URL é o URL do Cloud Storage para o script, no formato gs://BUCKET/FILE ou https://storage.googleapis.com/BUCKET/FILE .

Usar seu disco em uma instância nova

Se ainda for necessário recuperar dados do disco de inicialização permanente, desanexe-o e, em seguida, conecte-o como um disco secundário em uma nova instância.

  1. Exclua a VM à qual não é possível se conectar e mantenha o disco de inicialização:

    gcloud compute instances delete VM_NAME \
       --keep-disks=boot 

    Substitua VM_NAME pelo nome da VM à qual você não pode se conectar.

  2. Crie uma nova VM com o disco de inicialização da VM antiga. Especifique o nome do disco de inicialização da VM que você acabou de excluir.

  3. Conecte-se à nova VM usando SSH:

    gcloud compute ssh NEW_VM_NAME
    

    Substitua NEW_VM_NAME pelo nome da nova VM.

Verifique se o disco de inicialização da VM está cheio

A VM pode ficar inacessível se o disco de inicialização estiver cheio. Esse cenário pode ser difícil de solucionar, porque nem sempre é óbvio quando o problema de conectividade da VM é devido a um disco de inicialização completo. Para mais informações sobre esse cenário, consulte Como solucionar problemas de uma VM inacessível devido a um disco de inicialização completo.

Métodos de diagnóstico para VMs do Windows

Redefinir metadados SSH

Se não for possível se conectar a uma VM do Windows usando SSH, desative a chave de metadados enable-windows-ssh e reative o SSH para Windows.

  1. Defina a chave de metadados enable-windows-ssh como FALSE. Para informações sobre como definir metadados, consulte Definir metadados personalizados.

    Aguarde alguns segundos para que a alteração seja aplicada.

  2. Reativar o SSH para Windows

  3. Reconecte-se à VM.

Conecte-se à VM usando o RDP

Se não for possível diagnosticar e resolver a causa das falhas nas conexões SSH com sua VM do Windows, conecte-se usando o RDP.

Depois de estabelecer uma conexão com a VM, analise os registros do OpenSSH.

Depurar problemas de SSH com o gcpdiag

gcpdiag é uma ferramenta de código aberto. Não é um produto do Google Cloud oficialmente compatível. Use a ferramenta gcpdiag 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 conexão SSH em VMs do Windows e do Linux no Google Cloud, examinando as seguintes áreas:
  • Integridade da VM:verifica se a VM está em execução e tem recursos suficientes (CPU, memória, armazenamento em 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.

Console do Google Cloud

  1. Preencha e copie o comando a seguir.
  2. 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 check_os_login=OS_LOGIN_ENABLED
        --parameter local_user=LOCAL_USER \
        --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
  3. Abra o console do Google Cloud e ative o Cloud Shell.
  4. Abrir Console do Cloud
  5. Cole o comando copiado.
  6. Execute o comando gcpdiag, que faz o download da imagem Docker gcpdiag. e realiza verificações de diagnóstico. Se aplicável, siga as instruções de saída para corrigir verificações com falha.

Docker

Você pode executar gcpdiag usando um wrapper que inicia gcpdiag em um contêiner do Docker. Docker ou Podman precisa ser instalado.

  1. Copie e execute o seguinte comando na estação de trabalho local.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. 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 check_os_login=OS_LOGIN_ENABLED
        --parameter local_user=LOCAL_USER \
        --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER

Veja os parâmetros disponíveis para este runbook.

Substitua:

  • 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
  • OS_LOGIN_ENABLED: um valor booleano (verdadeiro ou falso) que indica se o Login do SO é usado para autenticação SSH. Padrão: true
  • LOCAL_USER:usuário Posix na VM.
  • CHECK_SSH_IN_BROWSER:um valor booleano para verificar se o SSH no navegador é viável.

Flags úteis

Para conferir uma lista e descrição de todas as flags da ferramenta gcpdiag, consulte Instruções de uso do gcpdiag.

A seguir