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

Uwaga

CentOS, do którego odwołuje się ten artykuł, jest dystrybucją systemu Linux i osiągnie koniec życia (EOL). Rozważ użycie i odpowiednio zaplanuj. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące końca życia systemu CentOS.

Ten artykuł zawiera rozwiązania problemu polegającego na tym, że 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 RHEL, katalog /var/lib/empty w usłudze 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 można go zapisywać na całym świecie.

Symptomy

Po nawiązaniu połączenia z maszyną wirtualną z systemem Linux za pośrednictwem protokołu SSH połączenie kończy się niepowodzeniem. 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 jest zapisywalny w formie grupy lub zapisywalny na całym świecie.

Aby rozwiązać ten problem, użyj jednej 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 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
    

Korzystanie z rozszerzenia "Uruchom polecenie"

Uwaga

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

W 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 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 polecenie 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. Po zakończeniu wykonywania skryptu w oknie konsoli wyjściowej 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 run-command, sprawdź plik handler.log w katalogu /var/log/azure/run-command .

Rozdzielczość 2. Naprawianie maszyny wirtualnej w trybie offline

Uwaga

  • Użyj tej rozdzielczości, jeśli dostęp do konsoli szeregowej maszyny wirtualnej nie jest dostępny, a waagent nie jest gotowy.
  • W systemie Ubuntu katalog /var/run/sshd działa w pamięci. Ponowne uruchomienie maszyny wirtualnej również rozwiąże problem. 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:

Używanie automatycznej naprawy systemu Azure Linux (ALAR)

Skrypty automatycznej naprawy systemu Azure Linux (ALAR) są częścią rozszerzenia naprawy maszyny wirtualnej opisanego w artykule Napraw maszynę wirtualną 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

W poniższych krokach odpowiednio zastąp $RGNAMEwartości , $VMNAME, $USERNAME, $PASSWORDi .repairdiskcopy

  1. Użyj polecenia az vm repair create , aby utworzyć maszynę wirtualną naprawczą. Naprawa maszyny wirtualnej 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 do systemu 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 przeprowadzić automatyczną wymianę dysku systemu operacyjnego z oryginalną maszyną wirtualną.

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

Używanie 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 do systemów plików dołączonego dysku systemu operacyjnego. Następnie wykonaj krok 3 w sekcji Korzystanie z automatycznej naprawy systemu Azure Linux (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 platformy Azure.