Udostępnij za pośrednictwem


Rozwiązywanie problemów z połączeniem SSH na maszynie wirtualnej z systemem Linux platformy Azure z powodu problemów z uprawnieniami i własnością

Dotyczy: ✔️ maszyny wirtualne z systemem Linux

Uwaga 16.

CentOS, do których odwołuje się ten artykuł, jest dystrybucją systemu Linux i osiągnie koniec życia (EOL). Rozważ odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz CentOS End Of Life guidance (Wskazówki dotyczące zakończenia życia systemu CentOS).

Ten artykuł zawiera rozwiązania problemu, w którym nawiązywanie połączenia z maszyną wirtualną z systemem Linux za pośrednictwem protokołu Secure Shell (SSH) kończy się niepowodzeniem, ponieważ katalog /var/empty/sshd w systemie RHEL, katalog /var/lib/empty w systemie SUSE lub katalog /var/run/sshd w systemie Ubuntu, nie istnieje lub nie jest własnością użytkownika głównego lub jest zapisywalny w grupie lub zapisywalny na świecie.

Symptomy

Po nawiązaniu połączenia z maszyną wirtualną z systemem Linux za pośrednictwem protokołu SSH połączenie nie powiedzie się. W zależności od dystrybucji systemu Linux może zostać wyświetlony następujący komunikat o błędzie dotyczący katalogu, którego dotyczy problem.

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

Przyczyna

Ten problem może wystąpić, jeśli katalog, którego dotyczy problem, nie jest własnością użytkownika głównego, lub jeśli jest zapisywalny lub zapisywalny w grupie.

Aby rozwiązać ten problem, użyj jednego z następujących rozwiązań:

Rozwiązanie 1. Naprawianie maszyny wirtualnej w trybie online

Poniżej przedstawiono dwie metody naprawy maszyny wirtualnej w trybie offline:

Korzystanie z konsoli szeregowej

  1. Połącz się z konsolą szeregową maszyny wirtualnej z witryny Azure Portal.

  2. Zaloguj się do maszyny wirtualnej przy użyciu lokalnego konta administracyjnego i odpowiedniego poświadczenia lub hasła.

  3. Uruchom następujące polecenia, aby rozwiązać problem z uprawnieniami i własnością:

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

Używanie rozszerzenia "Uruchom polecenie"

Uwaga 16.

Ta metoda opiera się na agencie maszyny wirtualnej z systemem Linux platformy Azure (waagent). W związku z tym upewnij się, że agent jest zainstalowany na maszynie wirtualnej i że jego usługa jest uruchomiona.

W witrynie Azure Portal otwórz okno Właściwości maszyny wirtualnej, aby sprawdzić stan agenta. Jeśli agent jest włączony i ma stan Gotowe , wykonaj następujące kroki, aby zmienić uprawnienie:

  1. Przejdź do witryny Azure Portal, znajdź ustawienia maszyny wirtualnej, a następnie wybierz pozycję Uruchom polecenie w obszarze Operacje.

  2. Wykonaj następujący skrypt powłoki, wybierając pozycję Uruchom skrypt RunShellScript>:

    #!/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. Po zakończeniu wykonywania skryptu w oknie konsoli danych wyjściowych zostanie wyświetlony komunikat "Włącz powiodło się".

Jeśli możesz nawiązać połączenie z maszyną wirtualną za pośrednictwem protokołu SSH i chcesz przeanalizować szczegóły wykonywania skryptu Uruchom polecenie, sprawdź plik handler.log w katalogu /var/log/azure/run-command .

Rozwiązanie 2. Naprawa maszyny wirtualnej w trybie offline

Uwaga 16.

  • Użyj tego rozwiązania, jeśli dostęp do konsoli szeregowej maszyny wirtualnej jest niedostępny i agent waagent nie jest gotowy.
  • W systemie Ubuntu katalog /var/run/sshd jest uruchamiany w pamięci. Ponowne uruchomienie maszyny wirtualnej spowoduje również rozwiązanie problemu. W związku z tym rozwiązywanie problemów w trybie offline na maszynach wirtualnych z systemem Ubuntu nie jest konieczne.

Poniżej przedstawiono dwie metody naprawy maszyny wirtualnej w trybie offline:

Korzystanie z automatycznej naprawy systemu Linux platformy Azure (ALAR)

Skrypty automatycznej naprawy systemu Linux (ALAR) platformy Azure są częścią rozszerzenia naprawy maszyny wirtualnej opisanego w temacie Naprawianie maszyny wirtualnej z systemem Linux przy użyciu poleceń naprawy maszyny wirtualnej platformy Azure.

Wykonaj następujące kroki, aby zautomatyzować proces ręcznego trybu offline:

Uwaga 16.

W poniższych krokach zastąp $RGNAMEodpowiednio wartości , $VMNAME, $USERNAME$PASSWORD, i repairdiskcopy .

  1. Użyj polecenia az vm repair create, aby utworzyć maszynę wirtualną naprawy. Maszyna wirtualna naprawy ma kopię dysku systemu operacyjnego dla problematycznej maszyny wirtualnej dołączonej.

    az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
    
  2. Zaloguj się do naprawy maszyny wirtualnej. Zainstaluj i chroot w systemie plików dołączonej kopii dysku systemu operacyjnego. Postępuj zgodnie ze szczegółowymi instrukcjami chroot.

  3. Uruchom następujące polecenia, aby rozwiązać problemy z uprawnieniami i własnością:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. Po zastosowaniu zmian uruchom następujące az vm repair restore polecenie, aby wykonać automatyczną zamianę dysku systemu operacyjnego na oryginalną maszynę wirtualną.

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

Korzystanie z metody ręcznej

Jeśli zarówno konsola szeregowa, jak i podejście ALAR nie mają zastosowania do Ciebie lub kończą się niepowodzeniem, naprawa musi zostać wykonana ręcznie. Wykonaj poniższe kroki, aby ręcznie dołączyć dysk systemu operacyjnego do maszyny wirtualnej odzyskiwania i zamienić dysk systemu operacyjnego z powrotem na oryginalną maszynę wirtualną:

Po pomyślnym dołączeniu dysku systemu operacyjnego do maszyny wirtualnej odzyskiwania postępuj zgodnie ze szczegółowymi instrukcjami chroot, aby zainstalować i chroot w systemach plików dołączonego dysku systemu operacyjnego. Następnie wykonaj krok 3 w sekcji Używanie usługi Azure Linux Auto Repair (ALAR), aby rozwiązać problemy z uprawnieniami i własnością.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.