Solucionar problemas de conexão SSH no Azure VM do Linux devido a problemas de permissão e propriedade

Aplica-se a: ✔️ VMs Linux

Resumo

Este artigo fornece soluções para um problema em que a conexão com uma máquina virtual (VM) Linux via Secure Shell (SSH) falha porque o diretório /var/empty/sshd no RHEL, o diretório /var/lib/empty no SUSE ou o diretório /var/run/sshd no Ubuntu não existe, não pertence ao usuário root, ou é gravável por grupo ou por outros usuários.

Importante

Novo! Experimente a assistência de VM para resolver os principais problemas. Recomendamos que você execute VM assist para Windows ou VM assist para Linux. Essas ferramentas de diagnóstico baseadas em script ajudam a identificar problemas comuns que afetam o agente convidado da VM Azure e a integridade geral da VM.

Se você estiver enfrentando problemas de desempenho em VMs, execute essas ferramentas primeiro antes de entrar em contato com Suporte da Microsoft.

Sintomas

Quando você se conecta a uma máquina virtual (VM) Linux via SSH, a conexão falha. Você pode receber a seguinte mensagem de erro sobre o diretório afetado, dependendo da sua distribuição Linux.

sudo tail /var/log/messages
sshd: /var/empty/sshd must be owned by root and not group or world-writable.  

Motivo

Esse problema pode ocorrer se o diretório afetado não pertencer ao usuário root ou se for gravável pelo grupo ou acessível para o mundo.

Para resolver esse problema, use uma das seguintes resoluções:

Resolução 1: reparar a VM online

Aqui estão dois métodos para reparar a VM offline:

Use o console serial

  1. Conecte-se ao Console Serial da VM a partir do portal do Azure.

  2. Entre na VM usando uma conta administrativa local e sua credencial ou senha correspondente.

  3. Execute os seguintes comandos para resolver o problema de permissão e propriedade:

    sudo mkdir -p /var/empty/sshd
    sudo chmod 755 /var/empty/sshd
    sudo chown root:root /var/empty/sshd
    

Use a extensão "Run Command"

Observação

Esse método depende do agente de VM do Linux Azure (waagent). Portanto, verifique se o agente está instalado na VM e se o serviço está em execução.

No portal Azure, abra a janela Properties da VM para verificar o status do agente. Se o agente estiver ativado e tiver o status Pronto , siga estas etapas para alterar a permissão:

  1. Vá para o portal Azure, localize as configurações da VM e selecione Run Command em Operations.

  2. Execute o seguinte script de shell selecionando RunShellScript>Run:

    #!/bin/bash
    
    #Script to change permissions on a file
    mkdir -p /var/empty/sshd;chmod 755 /var/empty/sshd;chown root:root /var/empty/sshd
    

  1. Após a conclusão da execução do script, a janela do console de saída mostrará uma mensagem "Habilitar com êxito".

Se você puder se conectar à VM via SSH e quiser analisar os detalhes da execução do script de comando de execução, examine o arquivo handler.log no diretório /var/log/azure/run-command .

Resolução 2: Reparar a VM offline

Observação

  • Use essa resolução se o acesso ao console serial da VM não estiver disponível e o waagent não estiver pronto.
  • No Ubuntu, o diretório /var/run/sshd é executado na memória. Reiniciar a VM também corrigirá o problema. Portanto, a solução de problemas offline em VMs do Ubuntu não é necessária.

Aqui estão dois métodos para reparar a VM offline:

Usar az vm repair

O az vm repair, que faz parte da extensão vm-repair para o CLI do Azure, é descrito em Reparar uma Máquina Virtual Linux usando os comandos de reparo da Máquina Virtual do Azure.

Siga estas etapas para automatizar o processo offline manual:

Observação

Nas etapas a seguir, substitua os valores $RGNAME, $VMNAME, $USERNAME, $PASSWORD e repairdiskcopy de acordo.

  1. Use o comando az vm repair create para criar uma VM de reparo. A VM de reparo tem uma cópia do disco do sistema operacional para a VM problemática anexada.

    az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
    
  2. Faça login na VM de reparo. Monte e faça chroot no sistema de arquivos da cópia anexada do disco do sistema operacional. Siga as instruções detalhadas do chroot.

  3. Execute os seguintes comandos para resolver os problemas de permissão e propriedade:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. Depois que as alterações forem aplicadas, execute o comando a seguir az vm repair restore para executar uma troca automática de disco do sistema operacional com a VM original.

    az vm repair restore --verbose -g $RGNAME -n $VMNAME
    

Use o método manual

Se tanto o console serial quanto a abordagem az vm repair não se aplicarem a você ou falharem, o reparo deverá ser executado manualmente. Siga as etapas abaixo para anexar manualmente o disco do sistema operacional a uma VM de recuperação e trocar o disco do sistema operacional de volta para a VM original:

Assim que o disco do SO for anexado com sucesso à VM de recuperação, siga as instruções chroot detalhadas para montar e realizar o chroot nos sistemas de arquivos do disco do SO anexado. Em seguida, siga a etapa 3 na seção "Usar az vm repair" para resolver os problemas de permissão e propriedade.