Partilhar via


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 a encontrar e corrigir os problemas que ocorrem em razão de erros do Secure Shell (SSH), falhas na conexão de SSH ou quando o SSH é recusado ao tentar se conectar a uma máquina virtual (VM) Linux. Você pode usar o portal do Azure, a CLI do Azure ou a Extensão de Acesso da VM para Linux para solucionar problemas de conexão.

Observação

Este artigo foi útil? Sua opinião é importante para nós. Por favor, use o botão Feedback nesta página para nos informar como este artigo funcionou para você ou como podemos melhorá-lo.

Etapas rápidas para solucionar problemas

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

  1. Redefinir a configuração de SSH.
  2. Redefinir as credenciais do 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 de SSH (por padrão, a porta TCP 22).
    • Você não pode usar o mapeamento/redirecionamento de porta sem usar um Azure Load Balancer.
    • Se você estiver usando a ID do Microsoft Entra para gerenciar logons SSH, o usuário deverá receber a função Login de Administrador de Máquina Virtual ou Logon de 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 o logon do Microsoft Entra.
  4. Verifique a Integridade do Recurso de VM.
  5. Reinicie a VM.
  6. Reimplante a VM.

Caso você precise de etapas e explicações mais detalhadas para solução de problemas, continue lendo.

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

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

  • Portal do Azure – excelente se você precisar redefinir rapidamente as credenciais de usuário ou configurações de SSH ou 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á um console interativo para sua VM. Na verdade, situações de "não é possível SSH" são especificamente o que o console serial foi projetado para ajudar a resolver. Mais detalhes abaixo.
  • Usar Executar Comando 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á retornada 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 – criar e reutilizar os arquivos de definição json para redefinir as credenciais de usuário ou configuração do SSH.

Após cada etapa de solução de problemas, tente se conectar à VM novamente. Caso você ainda não consiga conectar, tente a próxima etapa.

Use o Portal do Azure

O portal do Azure fornece uma maneira rápida para redefinir as credenciais de usuário ou configuração do SSH sem instalar as ferramentas no 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.

Redefinir a configuração de SSH

Para redefinir a configuração de SSH, selecione Reset configuration only, na seção Modo, conforme mostrado na captura de tela anterior e, em seguida, selecione Atualizar. Quando 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, conforme mostrado na captura de tela anterior. Especifique o nome de usuário e uma chave SSH ou a nova senha, depois, selecione Atualizar.

Você também pode criar um usuário com privilégios sudo na VM nesse menu. Insira um novo nome de usuário e a senha associada ou a chave SSH e, em seguida, selecione Atualizar.

Verificar as regras de segurança

Use a 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 examinar as regras de grupo de segurança efetivas para garantir que a regra "Permitir" NSG existe e é 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.

Verificar o roteamento

Use a funcionalidade Próximo salto do Observador de Rede para confirmar que uma rota não está impedindo que o tráfego seja roteado de ou para uma máquina virtual. Você também pode examinar as rotas efetivas para ver todas as rotas efetivas para uma interface de rede. Para saber mais, confira Usar regras efetivas para solucionar problemas de fluxo de tráfego de VM.

Usar o Console Serial da VM do Azure

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

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

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

sudo systemctl status sshd.service

Consulte o exemplo de saída a seguir. Verifique o status do Active serviço na linha 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 esse comando não estiver disponível ou retornar resultados inesperados, use outros comandos disponíveis. Você pode usar o ss comando como root ou por meio do sudo comando para verificar se o serviço SSH está em execução em sua VM.

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

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

Observação

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

Se houver alguma saída, o SSH está ativo e funcionando. Veja 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 --listen --tcp --process –numeric argumentos. A saída mostra que o processo SSHD 829 está escutando em 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

or

grep -i listen /etc/ssh/sshd_config

A saída terá a aparência a seguir:

Port 22

Qualquer linha que comece com # na saída é um comentário e pode ser ignorada 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 é ouvir todos os endereços IP no sistema, na porta 22.

Usar o Run Command 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 que foram 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 você ainda não fez isso, instale a versão mais recente da CLI do Azure e entre na conta Azure usando login az.

Se você criar e carregar uma imagem de disco Linux personalizada, verifique se o Agente Linux do Microsoft Azure versão 2.0.5 ou posterior está instalado. Para VMs criadas usando imagens da galeria, é possível que essa extensão de acesso já esteja instalada e configurada para você.

Redefinir a configuração de SSH

Inicialmente, você pode tentar redefinir a configuração de SSH para valores padrão e a reinicialização do servidor SSH na VM. Isso não muda o nome, a senha ou as chaves SSH da conta de usuário. O exemplo a seguir usa az vm user reset-ssh para redefinir a configuração de SSH na VM denominada 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 de myUsername para o valor especificado em myPassword, 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 usar autenticação de chave SSH, você poderá 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

Usar a extensão VMAccess

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

Redefinir SSHD

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

{
    "reset_ssh":True
}

Usando a CLI do Azure, você chama em seguida a extensão VMAccessForLinux para redefinir sua conexão SSHD ao especificar o arquivo json. O exemplo a seguir usa az vm extension set para redefinir SSHD na VM denominada 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 para um determinado usuário. Para redefinir a senha de um usuário, crie um arquivo chamado settings.json. O exemplo a seguir redefine as credenciais para myUsername para o valor especificado em myPassword. Digite as seguintes linhas no seu arquivo de 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 para myUsername para o valor especificado em myPassword, na VM denominada myVM em myResourceGroup. Digite as seguintes linhas no seu arquivo de settings.json, usando seus próprios valores:

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

Depois de criar o 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 denominada 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 a configuração de SSH

A configuração SSHD em si pode estar definida incorretamente ou o serviço encontrou um erro. Você pode redefinir o SSHD para garantir que a configuração de SSH em si é válida. Redefinir SSHD deve ser a primeira etapa de solução de problemas para você realizar.

O exemplo a seguir redefine o SSHD na VM denominada myVM no grupo de recursos chamado myResourceGroup. Use seus próprios nomes de grupo de recursos e de VM, 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 determinado usuário. O exemplo a seguir redefine as credenciais para 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 usar autenticação de chave SSH, você poderá 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 denominada 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ê tiver redefinido as credenciais de usuário e a configuração do SSH ou encontrado um erro ao fazer isso, você poderá tentar reiniciar a VM para solucionar problemas de computação subjacentes.

Portal do Azure

Para reiniciar uma VM usando o portal do Azure, selecione sua VM e, então, 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

Reimplantar uma VM

Você pode reimplantar uma VM para outro nó no Azure, o que pode corrigir possíveis problemas de rede subjacentes. Para obter informações sobre como reimplantar uma VM, consulte Reimplantar Máquina Virtual em um novo nó do Azure.

Observação

Após a conclusão dessa operação, os dados de disco efêmeros 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 Reimplantar, como no seguinte exemplo:

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.