Como solucionar problemas de SSH

Em determinadas condições, é possível que uma instância do Google Compute Engine não aceite mais conexões SSH. Há vários motivos para isso ocorrer, desde um disco cheio até uma configuração incorreta de sshd. Nesta seção, há algumas dicas e abordagens para resolver problemas comuns do SSH.

Verificar as regras de firewall

Cada projeto do Google Compute Engine é provisionado com um conjunto padrão de regras de firewall que permite o tráfego do SSH. Se por algum motivo essas regras forem removidas, não será possível acessar a instância. Veja a lista de firewalls com a ferramenta de linha de comando gcloud compute e verifique se a regra default-allow-ssh existe.

gcloud compute firewall-rules list

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

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

Depurar o problema no console serial

Ative o acesso de leitura e gravação para um console serial da instância para fazer login nele e resolver problemas com ela. Isso é especialmente útil quando você não consegue fazer login com o SSH ou se a instância não tem conexão com a rede. O console serial permanece acessível nessas duas condições.

Para aprender a ativar o acesso interativo e conectar-se a um console serial de instância, leia Interagir com o console serial.

Testar a rede

Use a ferramenta netcat para se conectar à instância pela porta 22 e confira se a conexão de rede está funcionando. Quando você se conecta, se um banner do ssh é exibido (por exemplo, SSH-2.0-OpenSSH_6.0p1 Debian-4), a conexão de rede está funcionando e é possível descartar a possibilidade de problemas no firewall. Primeiro, use a ferramenta gcloud para ver o natIP externo da sua instância:

gcloud compute instances describe example-instance --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
198.51.100.8

Use o comando nc para se conectar à instância:

# Check for SSH banner
user@local:~$ nc [EXTERNAL_IP] 22
SSH-2.0-OpenSSH_6.0p1 Debian-4

Tentar um novo usuário

Talvez o problema que impeça você de fazer login esteja limitado à sua conta, por exemplo: se as permissões no arquivo ~/.ssh/authorized_keys da instância foram definidas incorretamente.

Tente fazer login como um novo usuário com a ferramenta gcloud, especificando outro nome de usuário na solicitação SSH. A ferramenta gcloud atualizará os metadados do projeto para adicionar o novo usuário e permitir o acesso SSH.

user@local:~$ gcloud compute ssh [USER]@example-instance

onde [USER] é um novo nome de usuário para fazer login.

Usar seu disco em uma nova instância

Se a série de etapas acima não funciona e a instância que você precisa é inicializada a partir de um disco permanente, separe e anexe esse disco para usá-lo em uma nova instância. Substitua DISK pelo nome do seu disco no seguinte exemplo:

gcloud compute instances delete old-instance --keep-disks=boot
gcloud compute instances create new-instance --disk name=DISK,boot=yes,auto-delete=no
gcloud compute ssh new-instance

Inspecionar uma instância sem desligá-la

Talvez você não consiga se conectar a uma instância que continua atendendo ao tráfego de produção. Nesse caso, inspecione o disco sem interromper a capacidade da instância de atender aos usuários. Primeiro, faça um instantâneo do disco de inicialização da instância. Depois, crie um novo disco a partir desse instantâneo. Crie uma instância temporária e, por fim, anexe e ative o novo disco permanente nessa instância para resolver o problema no disco.

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

    gcloud compute networks create debug-network
    
  2. Adicione uma regra de firewall para possibilitar conexões SSH à rede:

    gcloud compute firewall-rules create debug-network-allow-ssh --allow tcp:22
    
  3. Crie um instantâneo do disco analisado substituindo DISK pelo nome do disco:

    gcloud compute disks snapshot DISK --snapshot-name debug-disk-snapshot
    
  4. Crie um novo disco com esse instantâneo:

    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 instância sem um endereço IP externo.

  8. Após fazer login na instância de depuração, resolva o problema da instância. Por exemplo, verifique os registros da instância:

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

Usar um script de inicialização

Se nada disso ajudou, você pode criar um script de inicialização para coletar informações logo após a inicialização da instância. Siga as instruções para executar um script de inicialização.

Em seguida, também será necessário redefinir a instância com gcloud compute instances reset para os metadados entrarem em vigor. Como alternativa, recrie a instância com um script de inicialização de diagnóstico:

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

    gcloud compute instances delete INSTANCE --keep-disks boot
    
  2. Adicione uma nova instância com o mesmo disco e especifique o script de inicialização.

    gcloud compute instances create example-instance --disk name=DISK,boot=yes --startup-script-url URL
    

Como ponto de partida, use o script compute-ssh-diagnostic para coletar informações de diagnóstico dos problemas mais comuns.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine