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.
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:
- Analise os resultados do teste para entender por que a conexão SSH da VM não está funcionando.
- Resolva conexões SSH executando as etapas de correção fornecidas pela ferramenta.
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:
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.
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:
Capture o tráfego de rede em um arquivo HTTP Archive (HAR) que comece no início da conexão SSH no navegador.
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 ...
Para resolver esse problema, faça o seguinte:
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.
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
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.
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.
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"
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.
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.
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:
- Conecte-se à VM usando o console do Google Cloud ou a Google Cloud CLI. Para mais informações, consulte Como se conectar a VMs.
- Adicione suas chaves SSH ao login do SO. Para mais informações, consulte Adicionar chaves a VMs que usam o Login do SO.
- Desative o Login do SO. Para mais informações, consulte Como desativar o Login do SO.
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:
- Conecte-se à VM usando o console do Google Cloud ou a Google Cloud CLI. Para mais informações, consulte Como se conectar a VMs.
- Ative o login do SO. Para mais informações, consulte Como ativar o login do SO.
- Adicione suas chaves SSH aos metadados. Para mais informações, consulte Adicionar chaves SSH a VMs que usam chaves SSH com base em metadados.
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:
- Conecte-se à VM usando o console do Google Cloud ou a Google Cloud CLI. Para mais informações, consulte Como se conectar a VMs.
- Adicione novamente sua chave SSH aos metadados. Para mais informações, consulte Adicionar chaves SSH a VMs que usam chaves SSH com base em metadados.
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.
- Execute este comando:
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:
- Reinicie a VM.
- 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.
- 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. Osshd
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
ou0750
ou0755
*$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
echown
.- os diretórios
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
.
- Confirme se o disco de inicialização está cheio
depurando com o console serial para identificar
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
ou0750
ou0755
*$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
echown
.
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ê configurousshd
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 osshd
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.
- 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. - Conceda permissões para usar o encaminhamento de TCP do IAP, caso ainda não tenha feito isso.
- Atualize a regra de firewall personalizada para permitir o tráfego de
Se você não usa o IAP, atualize a regra de firewall personalizada para permitir o tráfego SSH de entrada.
- 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:
- Monte o disco em outra VM.
- Atualize o arquivo
grub.cfg
para usar a versão anterior do kernel. - Anexe o disco à VM sem resposta.
- Verifique se o status da VM é
RUNNING
usando o comandogcloud compute instances describe
. - Reinstale o kernel.
- 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. Osshd
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
ou0750
ou0755
*$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
echown
.- os diretórios
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:
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.
Reinicie a VM.
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. Osshd
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
ou0750
ou0755
*$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
echown
.- os diretórios
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:
- Anexe o disco a outra VM do Linux.
- Conecte-se à VM que tem o disco montado.
- Ative o disco no SO para um diretório MOUNT_DIR na VM.
- 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. Desconecte o disco do SO usando o comando
umount
:cd ~/ umount /mnt
Desconectar o disco da VM.
Anexe o disco à VM original.
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:
- Exclua as chaves SSH expiradas ou duplicadas dos metadados do projeto ou da instância. Para mais informações, consulte Atualizar metadados em uma VM em execução.
- Use o Login do SO.
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
comoTRUE
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. Osshd
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:
- Instale ou atualize para a versão mais recente da Google Cloud CLI.
- Executar testes de conectividade.
- Se você estiver usando uma imagem personalizada do Linux que não está executando o ambiente convidado, instale o ambiente de convidado do Linux.
- Se você usa o login do SO, consulte Solução de problemas de login do SO.
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:
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.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:
Ative o acesso interativo ao console serial da VM.
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.
Use o console serial para se conectar à VM.
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:
- Faça backup do disco de inicialização criando um snapshot do disco.
- Crie um disco permanente regular a partir desse snapshot.
- Crie uma instância temporária.
- 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.
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.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
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.Crie um novo disco com esse snapshot:
gcloud compute disks create example-disk-debugging \ --source-snapshot debug-disk-snapshot
Crie uma instância de depuração sem um endereço IP externo:
gcloud compute instances create debugger \ --network debug-network \ --no-address
Anexe o disco de depuração à instância:
gcloud compute instances attach-disk debugger \ --disk example-disk-debugging
Siga as instruções para Conectar-se a uma VM usando um Bastion Host.
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:
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.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 formatogs://BUCKET/FILE
ouhttps://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.
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.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.
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.
Defina a chave de metadados
enable-windows-ssh
comoFALSE
. Para informações sobre como definir metadados, consulte Definir metadados personalizados.Aguarde alguns segundos para que a alteração seja aplicada.
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.
- 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
- 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.
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
Docker
Você pode
executar gcpdiag
usando um wrapper que inicia gcpdiag
em um contêiner do Docker. Docker ou
Podman precisa ser instalado.
- 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 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
--universe-domain
: se aplicável, a Nuvem soberana de parceiro confiável que hospeda o recurso--parameter
ou-p
: parâmetros do runbook
Para conferir uma lista e descrição de todas as flags da ferramenta gcpdiag
, consulte
Instruções de uso do gcpdiag
.
A seguir
- Saiba como as conexões SSH com VMs do Linux funcionam no Compute Engine.