Solucionar problemas em conexões SSH com uma VM Linux do Azure que falha, apresenta erro ou é recusada

Aplica-se a: ✔️ VMs do Linux

Este artigo ajuda você a localizar e corrigir os problemas que ocorrem devido a erros de Secure Shell (SSH), falhas de conexão SSH ou SSH recusado quando você tenta se conectar a uma máquina virtual (VM) Linux. Você pode usar o portal do Azure, CLI do Azure ou VM Access Extension para Linux para solucionar problemas de conexão.

Observação

Esse artigo foi útil? Sua opinião é importante para nós. Use o botão Comentários nesta página para nos informar o quão bem este artigo funcionou para você ou como podemos melhorá-lo.

Etapas rápidas de solução de problemas

Após cada etapa de solução de problemas, tente se reconectar à VM.

  1. Redefinir a configuração SSH.
  2. Redefinir as credenciais para o usuário.
  3. Verifique se as regras do grupo de segurança de rede permitem o tráfego SSH e a atribuição de função.
    • Certifique-se de que exista uma regra de grupo de segurança de rede para permitir o tráfego SSH (por padrão, porta TCP 22).
    • Você não pode usar o redirecionamento/mapeamento de porta sem usar um balanceador de carga do Azure.
    • Se você estiver usando o Microsoft Entra ID para gerenciar logons SSH, o usuário deverá receber a função Logon do Administrador de Máquina Virtual ou Logon do Usuário de Máquina Virtual no grupo de recursos que contém a VM e seus recursos associados. Caso contrário, o erro "Permissão negada (publickey)" será recebido. Para obter mais informações, consulte Configurar atribuições de função para a VM que usa Microsoft Entra logon.
  4. Verifique a saúde do recurso da VM.
  5. Reinicie a VM.
  6. Reimplante a VM.

Continue lendo para obter etapas e explicações de solução de problemas mais detalhadas.

Métodos disponíveis para solucionar problemas de conexão SSH

Você pode redefinir credenciais, configuração SSH ou solucionar problemas do status do serviço SSH usando um dos seguintes métodos:

  • Portal do Azure - ótimo se você precisar redefinir rapidamente a configuração SSH ou a chave SSH e não tiver as ferramentas do Azure instaladas.
  • Console Serial da VM do Azure - o console serial da VM funcionará independentemente da configuração SSH e fornecerá a você um console interativo para sua VM. Na verdade, as situações "não pode SSH" são especificamente o que o console serial foi projetado para ajudar a resolver. Mais detalhes abaixo.
  • Usar Comando de Execução por meio do portal do Azure - você pode executar comandos básicos usando a funcionalidade Executar Comando por meio do portal do Azure. A saída será devolvida ao portal.
  • CLI do Azure - se você já estiver na linha de comando, redefina rapidamente a configuração ou as credenciais do SSH.
  • Extensão VMAccessForLinux do Azure - crie e reutilize arquivos de definição json para redefinir a configuração SSH ou as credenciais do usuário.

Após cada etapa de solução de problemas, tente conectar-se à sua VM novamente. Se ainda não conseguir se conectar, tente a próxima etapa.

Use o Portal do Azure

O portal do Azure fornece uma maneira rápida de redefinir a configuração SSH ou as credenciais do usuário sem instalar nenhuma ferramenta em seu computador local.

Para começar, selecione sua VM no portal do Azure. Role para baixo até a seção Ajuda e selecione Redefinir senha como no exemplo a seguir:

Captura de tela para redefinir a configuração ou as credenciais do SSH no portal do Azure.

Redefina a configuração do SSH

Para redefinir a configuração SSH, selecione Reset configuration only na seção Modo como na captura de tela anterior e selecione Atualizar. Depois que essa ação for concluída, tente acessar sua VM novamente.

Redefinir credenciais SSH para um usuário

Para redefinir as credenciais de um usuário existente, selecione Reset SSH public key ou Reset password na seção Modo como na captura de tela anterior. Especifique o nome de usuário e uma chave SSH ou nova senha e selecione Atualizar.

Você também pode criar um usuário com privilégios sudo na VM a partir deste menu. Digite um novo nome de usuário e senha associada ou chave SSH e selecione Atualizar.

Verifique as regras de segurança

Use Verificação de fluxo de IP para confirmar se uma regra em um grupo de segurança de rede está bloqueando o tráfego de ou para uma máquina virtual. Você também pode revisar as regras efetivas do grupo de segurança para garantir que a regra NSG "Permitir" de entrada exista e seja priorizada para a porta SSH (padrão 22). Para saber mais, confira Usar regras de segurança efetivas para solucionar problemas de fluxo de tráfego de VM.

Verifique o roteamento

Use o recurso Próximo salto do Network Watcher para confirmar se uma rota não está impedindo que o tráfego seja roteado de ou para uma máquina virtual. Você também pode revisar as rotas efetivas para ver todas as rotas efetivas para uma interface de rede. Para obter mais informações, consulte Como usar rotas eficazes para solucionar problemas de fluxo de tráfego da VM.

Use o console serial da VM do Azure

O Azure VM Serial Console fornece acesso a um console baseado em texto para máquinas virtuais Linux. Você pode usar o console para solucionar problemas de sua conexão SSH em um shell interativo. Verifique se você atendeu aos pré-requisitos para usar o console serial e tente os comandos abaixo para solucionar problemas de sua conectividade SSH.

Verifique se o serviço SSH está em execução

Para verificar o status do serviço, use o seguinte comando, disponível na maioria das distribuições Linux atuais:

sudo systemctl status sshd.service

Veja os exemplos de saída a seguir. Verifique o status do serviço na linha Active na saída. A saída também mostra a porta e os endereços IP que estão sendo ouvidos.

user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 829 (sshd)
      Tasks: 1 (limit: 9535)
     Memory: 5.1M
     CGroup: /system.slice/ssh.service
             └─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.

Se este comando não estiver disponível ou retornar resultados inesperados, use outros comandos disponíveis. Você pode usar o comando ss como root ou por meio do comando sudo para verificar se o serviço SSH está sendo executado em sua VM.

O exemplo a seguir mostra como executar o comando ss por meio de sudo:

sudo ss --listen --tcp --process --numeric | grep sshd

Observação

Recomendamos o comando ss porque o comando netstat é obsoleto e nem sempre está disponível em distribuições modernas.

Se houver alguma saída, o SSH está funcionando. Consulte o exemplo de saída a seguir:

$ sudo ss -ltpn | grep sshd
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=829,fd=3))
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=829,fd=4))

-ltpn é a forma abreviada dos argumentos --listen --tcp --process –numeric. A saída mostra que o processo SSHD 829 está escutando nos endereços IPv4 e IPv6.

Verifique em qual porta o SSH está sendo executado

A saída do comando acima mostra que o processo SSHD está escutando na porta 22. Quando o processo SSHD estiver configurado para ser executado em outra porta, a porta será exibida na saída. Para verificar se a alteração foi feita no arquivo de configuração padrão, examine o arquivo de configuração padrão, /etc/ssh/sshd_config usando um dos seguintes comandos:

grep -i port /etc/ssh/sshd_config

ou

grep -i listen /etc/ssh/sshd_config

A saída desse será semelhante à seguinte:

Port 22

Qualquer linha que comece com # na saída é um comentário e pode ser ignorado com segurança. Se nada for retornado ou as linhas forem comentários, a configuração padrão será usada. A configuração padrão é escutar todos os endereços IP do sistema, na porta 22.

Use o Comando Executar por meio do portal do Azure

Se você não conseguir executar comandos por meio do console serial, por exemplo, quando apenas chaves SSH são usadas para autenticação, o recurso Executar comando pode ser usado para emitir comandos e visualizar a saída. Todos os comandos executados anteriormente no Console Serial podem ser executados de forma não interativa na seção Executar Comando no portal do Azure. A saída será retornada ao portal do Azure. Não há necessidade de usar sudo para executar comandos no contexto Executar comando.

Usar a CLI do Azure

Se ainda não o fez, instale o Azure CLI mais recente e entre em uma conta do Azure usando az login.

Se você criou e carregou uma imagem de disco Linux personalizada, certifique-se de que o Microsoft Azure Linux Agent versão 2.0.5 ou posterior esteja instalado. Para VMs criadas usando imagens do Gallery, essa extensão de acesso já está instalada e configurada para você.

Redefinir configuração SSH

Inicialmente, você pode tentar redefinir a configuração do SSH para os valores padrão e reinicializar o servidor SSH na VM. Isso não altera o nome da conta do usuário, a senha ou as chaves SSH. O exemplo a seguir usa az vm user reset-ssh para redefinir a configuração SSH na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm user reset-ssh --resource-group myResourceGroup --name myVM

Redefinir credenciais SSH para um usuário

O exemplo a seguir usa az vm user update para redefinir as credenciais demyUsername para o valor especificado emmyPassword, na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm user update --resource-group myResourceGroup --name myVM \
     --username myUsername --password myPassword

Se estiver usando autenticação de chave SSH, você pode redefinir a chave SSH para um determinado usuário. O exemplo a seguir usa az vm access set-linux-user para atualizar a chave SSH armazenada em ~/.ssh/id_rsa.pub para o usuário chamado myUsername, na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm user update --resource-group myResourceGroup --name myVM \
    --username myUsername --ssh-key-value ~/.ssh/id_rsa.pub

Use a extensão VMAccess

A VM Access Extension para Linux lê em um arquivo json que define as ações a serem executadas. Essas ações incluem redefinir o SSHD, redefinir uma chave SSH ou adicionar um usuário. Você ainda usa a CLI do Azure para chamar a extensão VMAccess, mas pode reutilizar os arquivos json em várias VMs, se desejar. Essa abordagem permite criar um repositório de arquivos json que podem ser chamados para determinados cenários.

Redefinir SSHD

Crie um arquivo chamado settings.json com o seguinte conteúdo:

{
    "reset_ssh":True
}

Usando a CLI do Azure, chame a extensão VMAccessForLinux para redefinir sua conexão SSHD especificando seu arquivo json. O exemplo a seguir usa az vm extension set para redefinir o SSHD na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Redefinir credenciais SSH para um usuário

Se o SSHD parecer funcionar corretamente, você poderá redefinir as credenciais de um usuário doador. Para redefinir a senha de um usuário, crie um arquivo chamado settings.json. O exemplo a seguir redefine as credenciais de myUsername para o valor especificado em myPassword. Insira as seguintes linhas em seu arquivo settings.json, usando seus próprios valores:

{
    "username":"myUsername", "password":"myPassword"
}

Ou para redefinir a chave SSH para um usuário, primeiro crie um arquivo chamado settings.json. O exemplo a seguir redefine as credenciais de myUsername para o valor especificado em myPassword, na VM denominada myVM em myResourceGroup. Insira as seguintes linhas em seu arquivo settings.json, usando seus próprios valores:

{
    "username":"myUsername", "ssh_key":"mySSHKey"
}

Depois de criar seu arquivo json, use a CLI do Azure para chamar a extensão VMAccessForLinux para redefinir suas credenciais de usuário SSH especificando seu arquivo json. O exemplo a seguir redefine as credenciais na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Redefinir configuração SSH

A própria configuração do SSHD pode estar mal configurada ou o serviço encontrou um erro. Você pode redefinir o SSHD para garantir que a própria configuração do SSH seja válida. A redefinição do SSHD deve ser a primeira etapa de solução de problemas a ser executada.

O exemplo a seguir redefine o SSHD em uma VM chamada myVM no grupo de recursos chamado myResourceGroup. Use sua própria VM e nomes de grupos de recursos da seguinte maneira:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --reset-ssh

Redefinir credenciais SSH para um usuário

Se o SSHD parecer funcionar corretamente, você poderá redefinir a senha para um usuário doador. O exemplo a seguir redefine as credenciais de myUsername para o valor especificado em myPassword, na VM denominada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

azure vm reset-access --resource-group myResourceGroup --name myVM \
     --user-name myUsername --password myPassword

Se estiver usando autenticação de chave SSH, você pode redefinir a chave SSH para um determinado usuário. O exemplo a seguir atualiza a chave SSH armazenada em ~/.ssh/id_rsa.pub para o usuário chamado myUsername, na VM chamada myVM em myResourceGroup. Use seus próprios valores da seguinte maneira:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub

Reiniciar uma VM

Se você redefiniu a configuração do SSH e as credenciais do usuário ou encontrou um erro ao fazer isso, tente reiniciar a VM para resolver os problemas de computação subjacentes.

Portal do Azure

Para reiniciar uma VM usando o portal do Azure, selecione sua VM e selecione Reiniciar como no exemplo a seguir:

Captura de tela para reiniciar uma máquina virtual no portal do Azure.

CLI do Azure

O exemplo a seguir usa az vm restart para reiniciar a VM chamada myVM no grupo de recursos chamado myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm restart --resource-group myResourceGroup --name myVM

Reimplante uma VM

Você pode reimplantar uma VM em outro nó no Azure, o que pode corrigir quaisquer problemas de rede subjacentes. Para obter informações sobre como reimplantar uma VM, consulte Reimplantar a máquina virtual no novo nó do Azure.

Observação

Após a conclusão dessa operação, os dados efêmeros do disco são perdidos e os endereços IP dinâmicos associados à máquina virtual são atualizados.

Portal do Azure

Para reimplantar uma VM usando o portal do Azure, selecione sua VM e role para baixo até a seção Ajuda. Selecione Redistribuir como no exemplo a seguir:

Captura de tela para reimplantar uma máquina virtual no portal do Azure.

CLI do Azure

O exemplo a seguir usa az vm redeploy para reimplantar a VM chamada myVM no grupo de recursos chamado myResourceGroup. Use seus próprios valores da seguinte maneira:

az vm redeploy --resource-group myResourceGroup --name myVM

Recursos adicionais

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.