Solucionar problemas em conexões SSH com uma VM Linux do Azure que falha, apresenta erro ou é recusada
Aplica-se a: ✔️ VMs 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.
- Redefinir a configuração SSH.
- Redefinir as credenciais para o usuário.
- 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.
- Verifique a saúde do recurso da VM.
- Certifique-se de que a VM reporte como íntegra.
- Se você tiver o diagnóstico de inicialização ativado, verifique se a VM não está relatando erros de inicialização nos logs.
- Reinicie a VM.
- 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:
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:
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:
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
- Se você ainda não conseguir fazer o SSH para sua VM depois de seguir as etapas posteriores, consulte as etapas de solução de problemas mais detalhadas para revisar as etapas adicionais para resolver seu problema.
- Para obter mais informações sobre como solucionar problemas de acesso a aplicativos, consulte Solucionar problemas de acesso a um aplicativo em execução em uma máquina virtual do Azure
- Para obter mais informações sobre como solucionar problemas de máquinas virtuais que foram criadas usando o modelo de implantação clássico, consulte Como redefinir uma senha ou SSH para máquinas virtuais baseadas em Linux.
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.