Rozwiązywanie problemów z połączeniami SSH z maszyną wirtualną platformy Azure z systemem Linux, które kończą się niepowodzeniem, błędami lub odmową

Ten artykuł pomaga znaleźć i rozwiązać problemy występujące z powodu błędów protokołu Secure Shell (SSH), niepowodzeń połączenia SSH lub odmowy połączenia SSH podczas próby nawiązania połączenia z maszyną wirtualną z systemem Linux. Aby rozwiązać problemy z połączeniem, możesz użyć Azure Portal, interfejsu wiersza polecenia platformy Azure lub rozszerzenia dostępu maszyny wirtualnej dla systemu Linux.

Uwaga

Czy ten artykuł był pomocny? Twoje dane wejściowe są dla nas ważne. Użyj przycisku Opinie na tej stronie, aby poinformować nas, jak dobrze działa ten artykuł dla Ciebie lub jak możemy go ulepszyć.

Szybkie kroki rozwiązywania problemów

Po każdym kroku rozwiązywania problemów spróbuj ponownie nawiązać połączenie z maszyną wirtualną.

  1. Zresetuj konfigurację protokołu SSH.
  2. Zresetuj poświadczenia użytkownika.
  3. Sprawdź, czy reguły sieciowej grupy zabezpieczeń zezwalają na ruch SSH i przypisanie roli.
    • Upewnij się, że istnieje reguła sieciowej grupy zabezpieczeń umożliwiająca ruch SSH (domyślnie port TCP 22).
    • Nie można używać przekierowywania/mapowania portów bez użycia modułu równoważenia obciążenia platformy Azure.
    • Jeśli używasz Tożsamość Microsoft Entra do zarządzania identyfikatorami logowania SSH, użytkownikowi musi zostać przypisana rola Logowanie administratora maszyny wirtualnej lub Logowanie użytkownika maszyny wirtualnej w grupie zasobów zawierającej maszynę wirtualną i skojarzone z nią zasoby. W przeciwnym razie zostanie odebrany błąd "Odmowa uprawnień (publickey)". Aby uzyskać więcej informacji, zobacz Konfigurowanie przypisań ról dla maszyny wirtualnej używającej Microsoft Entra logowania.
  4. Sprawdź kondycję zasobu maszyny wirtualnej.
    • Upewnij się, że maszyna wirtualna zgłasza, że jest w dobrej kondycji.
    • Jeśli włączono diagnostykę rozruchu, sprawdź, czy maszyna wirtualna nie zgłasza błędów rozruchu w dziennikach.
  5. Uruchom ponownie maszynę wirtualną.
  6. Ponownie wdróż maszynę wirtualną.

Kontynuuj czytanie, aby uzyskać bardziej szczegółowe instrukcje i wyjaśnienia dotyczące rozwiązywania problemów.

Dostępne metody rozwiązywania problemów z połączeniem SSH

Poświadczenia, konfigurację protokołu SSH lub rozwiązywanie problemów ze stanem usługi SSH można zresetować przy użyciu jednej z następujących metod:

Po każdym kroku rozwiązywania problemów spróbuj ponownie nawiązać połączenie z maszyną wirtualną. Jeśli nadal nie możesz nawiązać połączenia, spróbuj wykonać następny krok.

Korzystanie z Azure Portal

Azure Portal zapewnia szybki sposób resetowania konfiguracji protokołu SSH lub poświadczeń użytkownika bez instalowania jakichkolwiek narzędzi na komputerze lokalnym.

Aby rozpocząć, wybierz maszynę wirtualną w Azure Portal. Przewiń w dół do sekcji Pomoc i wybierz pozycję Resetuj hasło , jak w poniższym przykładzie:

Zrzut ekranu przedstawiający resetowanie konfiguracji lub poświadczeń S S H w Azure Portal.

Resetowanie konfiguracji protokołu SSH

Aby zresetować konfigurację protokołu SSH, wybierz pozycję Reset configuration onlyw sekcji Tryb , tak jak na poprzednim zrzucie ekranu, a następnie wybierz pozycję Aktualizuj. Po zakończeniu tej akcji spróbuj ponownie uzyskać dostęp do maszyny wirtualnej.

Resetowanie poświadczeń SSH dla użytkownika

Aby zresetować poświadczenia istniejącego użytkownika, wybierz pozycję Reset SSH public key albo Reset password w sekcji Tryb , jak na powyższym zrzucie ekranu. Określ nazwę użytkownika i klucz SSH lub nowe hasło, a następnie wybierz pozycję Aktualizuj.

Możesz również utworzyć użytkownika z uprawnieniami sudo na maszynie wirtualnej z tego menu. Wprowadź nową nazwę użytkownika i skojarzone hasło lub klucz SSH, a następnie wybierz pozycję Aktualizuj.

Sprawdzanie reguł zabezpieczeń

Użyj funkcji weryfikacji przepływu adresów IP , aby potwierdzić, czy reguła w sieciowej grupie zabezpieczeń blokuje ruch do lub z maszyny wirtualnej. Możesz również przejrzeć obowiązujące reguły grupy zabezpieczeń, aby upewnić się, że istnieje reguła ruchu przychodzącego sieciowej grupy zabezpieczeń "Zezwalaj" i ma priorytet dla portu SSH (domyślnie 22). Aby uzyskać więcej informacji, zobacz Używanie obowiązujących reguł zabezpieczeń do rozwiązywania problemów z przepływem ruchu maszyn wirtualnych.

Sprawdzanie routingu

Użyj funkcji następnego przeskoku Network Watcher, aby potwierdzić, że trasa nie uniemożliwia kierowania ruchu do lub z maszyny wirtualnej. Możesz również przejrzeć obowiązujące trasy, aby wyświetlić wszystkie obowiązujące trasy dla interfejsu sieciowego. Aby uzyskać więcej informacji, zobacz Używanie skutecznych tras do rozwiązywania problemów z przepływem ruchu maszyn wirtualnych.

Korzystanie z konsoli szeregowej maszyny wirtualnej platformy Azure

Konsola szeregowa maszyny wirtualnej platformy Azure zapewnia dostęp do konsoli opartej na tekście dla maszyn wirtualnych z systemem Linux. Konsola umożliwia rozwiązywanie problemów z połączeniem SSH w interaktywnej powłoce. Upewnij się, że spełniono wymagania wstępne dotyczące korzystania z konsoli szeregowej i wypróbuj poniższe polecenia, aby dalej rozwiązywać problemy z łącznością SSH.

Sprawdzanie, czy usługa SSH jest uruchomiona

Aby sprawdzić stan usługi, użyj następującego polecenia, które jest dostępne w większości bieżących dystrybucji systemu Linux:

sudo systemctl status sshd.service

Zobacz poniższy przykład danych wyjściowych. Sprawdź stan usługi z wiersza Active w danych wyjściowych. Dane wyjściowe pokazują również nasłuchiwane porty i adresy IP.

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.

Jeśli to polecenie nie jest dostępne lub zwraca nieoczekiwane wyniki, użyj innych dostępnych poleceń. Możesz użyć ss polecenia jako głównego lub za pomocą sudo polecenia, aby sprawdzić, czy usługa SSH jest uruchomiona na maszynie wirtualnej.

W poniższym przykładzie pokazano, jak uruchomić polecenie za ss pomocą sudopolecenia :

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

Uwaga

Zalecamy wykonanie polecenia, ss ponieważ netstat polecenie jest przestarzałe i nie zawsze jest dostępne w nowoczesnych dystrybucjach.

Jeśli są jakieś dane wyjściowe, protokół SSH jest uruchomiony. Zobacz następujący przykład danych wyjściowych:

$ 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 jest skróconą formą --listen --tcp --process –numeric argumentów. Dane wyjściowe pokazują, że proces SSHD 829 nasłuchuje zarówno na adresach IPv4, jak i IPv6.

Sprawdź, na którym porcie działa protokół SSH

Powyższe dane wyjściowe polecenia pokazują, że proces SSHD nasłuchuje na porcie 22. Gdy proces SSHD zostanie skonfigurowany do uruchamiania na innym porcie, port zostanie wyświetlony w danych wyjściowych. Aby sprawdzić, czy zmiana została wprowadzona w standardowym pliku konfiguracji, sprawdź domyślny plik konfiguracji /etc/ssh/sshd_config przy użyciu jednego z następujących poleceń:

grep -i port /etc/ssh/sshd_config

lub

grep -i listen /etc/ssh/sshd_config

Dane wyjściowe będą wyglądać następująco:

Port 22

Każdy wiersz rozpoczynający się w danych wyjściowych # jest komentarzem i można go bezpiecznie zignorować. Jeśli nic nie zostanie zwrócone lub wiersze są komentarzami, zostanie użyta domyślna konfiguracja. Domyślna konfiguracja polega na nasłuchiwaniu wszystkich adresów IP w systemie na porcie 22.

Używanie polecenia Uruchom za pośrednictwem Azure Portal

Jeśli nie możesz uruchamiać poleceń za pośrednictwem konsoli szeregowej, na przykład gdy do uwierzytelniania są używane tylko klucze SSH, funkcja Uruchom polecenie może służyć do wydawania poleceń i wyświetlania danych wyjściowych. Wszystkie polecenia, które były wcześniej uruchamiane z konsoli szeregowej, można uruchamiać nieinterakcyjnie w sekcji Uruchom polecenie w Azure Portal. Dane wyjściowe zostaną zwrócone do Azure Portal. Nie ma potrzeby uruchamiania sudo poleceń w kontekście Uruchom polecenie.

Korzystanie z interfejsu wiersza polecenia platformy Azure

Jeśli jeszcze tego nie zrobiono, zainstaluj najnowszy interfejs wiersza polecenia platformy Azure i zaloguj się do konta platformy Azure przy użyciu polecenia az login.

Jeśli utworzono i przekazano niestandardowy obraz dysku z systemem Linux, upewnij się, że zainstalowano agenta Microsoft Azure Linux w wersji 2.0.5 lub nowszej. W przypadku maszyn wirtualnych utworzonych przy użyciu obrazów galerii to rozszerzenie dostępu jest już zainstalowane i skonfigurowane dla Ciebie.

Resetowanie konfiguracji protokołu SSH

Początkowo można spróbować zresetować konfigurację protokołu SSH do wartości domyślnych i ponownie uruchomić serwer SSH na maszynie wirtualnej. Nie zmienia to nazwy konta użytkownika, hasła ani kluczy SSH. W poniższym przykładzie użyto polecenia az vm user reset-ssh w celu zresetowania konfiguracji SSH na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm user reset-ssh --resource-group myResourceGroup --name myVM

Resetowanie poświadczeń SSH dla użytkownika

W poniższym przykładzie użyto polecenia az vm user update w celu zresetowania poświadczeń do myUsername wartości określonej w myPasswordpliku na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm user update --resource-group myResourceGroup --name myVM \
     --username myUsername --password myPassword

Jeśli używasz uwierzytelniania klucza SSH, możesz zresetować klucz SSH dla danego użytkownika. W poniższym przykładzie użyto polecenia az vm access set-linux-user w celu zaktualizowania klucza SSH przechowywanego dla ~/.ssh/id_rsa.pub użytkownika o nazwie myUsername, na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm user update --resource-group myResourceGroup --name myVM \
    --username myUsername --ssh-key-value ~/.ssh/id_rsa.pub

Korzystanie z rozszerzenia VMAccess

Rozszerzenie dostępu maszyny wirtualnej dla systemu Linux odczytuje w pliku json, który definiuje akcje do wykonania. Te akcje obejmują resetowanie SSHD, resetowanie klucza SSH lub dodawanie użytkownika. Nadal używasz interfejsu wiersza polecenia platformy Azure do wywoływania rozszerzenia VMAccess, ale w razie potrzeby możesz ponownie użyć plików json na wielu maszynach wirtualnych. Takie podejście umożliwia utworzenie repozytorium plików json, które następnie można wywołać dla danego scenariusza.

Resetowanie protokołu SSHD

Utwórz plik o nazwie settings.json o następującej zawartości:

{
    "reset_ssh":True
}

Za pomocą interfejsu wiersza polecenia platformy Azure wywołasz VMAccessForLinux rozszerzenie w celu zresetowania połączenia SSHD, określając plik json. W poniższym przykładzie użyto polecenia az vm extension set , aby zresetować dysk SSHD na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Resetowanie poświadczeń SSH dla użytkownika

Jeśli funkcja SSHD wydaje się działać poprawnie, możesz zresetować poświadczenia użytkownika daszka. Aby zresetować hasło użytkownika, utwórz plik o nazwie settings.json. Poniższy przykład resetuje poświadczenia dla myUsername wartości określonej w myPassword. Wprowadź następujące wiersze w settings.json pliku, używając własnych wartości:

{
    "username":"myUsername", "password":"myPassword"
}

Aby zresetować klucz SSH dla użytkownika, najpierw utwórz plik o nazwie settings.json. Poniższy przykład resetuje poświadczenia dla myUsername wartości określonej w myPasswordprogramie na maszynie wirtualnej o nazwie myVM w myResourceGroup. Wprowadź następujące wiersze w settings.json pliku, używając własnych wartości:

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

Po utworzeniu pliku json użyj interfejsu wiersza polecenia platformy Azure, aby wywołać VMAccessForLinux rozszerzenie w celu zresetowania poświadczeń użytkownika SSH, określając plik json. Poniższy przykład resetuje poświadczenia na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Korzystanie z klasycznego interfejsu wiersza polecenia platformy Azure

Jeśli jeszcze tego nie zrobiono, zainstaluj klasyczny interfejs wiersza polecenia platformy Azure i połącz się z subskrypcją platformy Azure. Upewnij się, że używasz trybu Resource Manager w następujący sposób:

azure config mode arm

Jeśli utworzono i przekazano niestandardowy obraz dysku z systemem Linux, upewnij się, że zainstalowano agenta Microsoft Azure Linux w wersji 2.0.5 lub nowszej. W przypadku maszyn wirtualnych utworzonych przy użyciu obrazów galerii to rozszerzenie dostępu jest już zainstalowane i skonfigurowane dla Ciebie.

Resetowanie konfiguracji protokołu SSH

Sama konfiguracja SSHD może zostać błędnie skonfigurowana lub usługa napotkała błąd. Możesz zresetować dysk SSHD, aby upewnić się, że sama konfiguracja protokołu SSH jest prawidłowa. Resetowanie protokołu SSHD powinno być pierwszym krokiem rozwiązywania problemów.

Poniższy przykład resetuje dysk SSHD na maszynie wirtualnej o nazwie myVM w grupie zasobów o nazwie myResourceGroup. Użyj własnej maszyny wirtualnej i nazw grup zasobów w następujący sposób:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --reset-ssh

Resetowanie poświadczeń SSH dla użytkownika

Jeśli wydaje się, że funkcja SSHD działa poprawnie, możesz zresetować hasło dla użytkownika daszka. Poniższy przykład resetuje poświadczenia dla myUsername wartości określonej w myPasswordprogramie na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

azure vm reset-access --resource-group myResourceGroup --name myVM \
     --user-name myUsername --password myPassword

Jeśli używasz uwierzytelniania klucza SSH, możesz zresetować klucz SSH dla danego użytkownika. Poniższy przykład aktualizuje klucz SSH przechowywany w ~/.ssh/id_rsa.pub pliku dla użytkownika o nazwie myUsername, na maszynie wirtualnej o nazwie myVM w myResourceGroup. Użyj własnych wartości w następujący sposób:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub

Ponowne uruchamianie maszyny wirtualnej

Jeśli zresetowano konfigurację protokołu SSH i poświadczenia użytkownika lub wystąpił błąd, możesz spróbować ponownie uruchomić maszynę wirtualną, aby rozwiązać podstawowe problemy z obliczeniami.

Azure Portal

Aby ponownie uruchomić maszynę wirtualną przy użyciu Azure Portal, wybierz maszynę wirtualną, a następnie wybierz pozycję Uruchom ponownie, jak w poniższym przykładzie:

Zrzut ekranu przedstawiający ponowne uruchomienie maszyny wirtualnej w Azure Portal.

Interfejs wiersza polecenia platformy Azure

W poniższym przykładzie użyto polecenia az vm restart , aby ponownie uruchomić maszynę wirtualną o nazwie myVM w grupie zasobów o nazwie myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm restart --resource-group myResourceGroup --name myVM

Klasyczny interfejs wiersza polecenia platformy Azure

Ważna

Klasyczne maszyny wirtualne zostaną wycofane 1 września 2023 r.

Jeśli używasz zasobów IaaS z usługi ASM, zakończ migrację do 1 września 2023 r. Zachęcamy do dokonania zmiany wcześniej, aby skorzystać z wielu ulepszeń funkcji w usłudze Azure Resource Manager.

Aby uzyskać więcej informacji, zobacz Migrowanie zasobów IaaS do usługi Azure Resource Manager do 1 września 2023 r.

Poniższy przykład powoduje ponowne uruchomienie maszyny wirtualnej o nazwie myVM w grupie zasobów o nazwie myResourceGroup. Użyj własnych wartości w następujący sposób:

azure vm restart --resource-group myResourceGroup --name myVM

Ponowne wdrażanie maszyny wirtualnej

Możesz ponownie wdrożyć maszynę wirtualną do innego węzła na platformie Azure, co może rozwiązać wszelkie podstawowe problemy z siecią. Aby uzyskać informacje o ponownym wdrożeniu maszyny wirtualnej, zobacz Ponowne wdrażanie maszyny wirtualnej do nowego węzła platformy Azure.

Uwaga

Po zakończeniu tej operacji dane dysku efemerycznego zostaną utracone, a dynamiczne adresy IP skojarzone z maszyną wirtualną zostaną zaktualizowane.

Azure Portal

Aby ponownie wdrożyć maszynę wirtualną przy użyciu Azure Portal, wybierz maszynę wirtualną i przewiń w dół do sekcji Pomoc. Wybierz pozycję Ponownie wdróż w następującym przykładzie:

Zrzut ekranu przedstawiający ponowne wdrożenie maszyny wirtualnej w Azure Portal.

Interfejs wiersza polecenia platformy Azure

W poniższym przykładzie użyto polecenia az vm redeploy w celu ponownego wdrożenia maszyny wirtualnej o nazwie myVM w grupie zasobów o nazwie myResourceGroup. Użyj własnych wartości w następujący sposób:

az vm redeploy --resource-group myResourceGroup --name myVM

Klasyczny interfejs wiersza polecenia platformy Azure

W poniższym przykładzie ponownie wdrożono maszynę wirtualną o nazwie myVM w grupie zasobów o nazwie myResourceGroup. Użyj własnych wartości w następujący sposób:

azure vm redeploy --resource-group myResourceGroup --name myVM

Maszyny wirtualne utworzone przy użyciu klasycznego modelu wdrażania

Ważna

Klasyczne maszyny wirtualne zostaną wycofane 1 września 2023 r.

Jeśli używasz zasobów IaaS z usługi ASM, zakończ migrację do 1 września 2023 r. Zachęcamy do dokonania zmiany wcześniej, aby skorzystać z wielu ulepszeń funkcji w usłudze Azure Resource Manager.

Aby uzyskać więcej informacji, zobacz Migrowanie zasobów IaaS do usługi Azure Resource Manager do 1 września 2023 r.

Spróbuj wykonać te kroki, aby rozwiązać najczęstsze błędy połączeń SSH dla maszyn wirtualnych, które zostały utworzone przy użyciu klasycznego modelu wdrażania. Po każdym kroku spróbuj ponownie nawiązać połączenie z maszyną wirtualną.

  • Zresetuj dostęp zdalny z Azure Portal. Na Azure Portal wybierz maszynę wirtualną, a następnie wybierz pozycję Resetuj zdalne....

  • Uruchom ponownie maszynę wirtualną. Na Azure Portal wybierz maszynę wirtualną i wybierz pozycję Uruchom ponownie.

  • Ponownie wdróż maszynę wirtualną do nowego węzła platformy Azure. Aby uzyskać informacje o sposobie ponownego wdrażania maszyny wirtualnej, zobacz Ponowne wdrażanie maszyny wirtualnej do nowego węzła platformy Azure.

    Po zakończeniu tej operacji dane dysku efemerycznego zostaną utracone, a dynamiczne adresy IP skojarzone z maszyną wirtualną zostaną zaktualizowane.

  • Postępuj zgodnie z instrukcjami w temacie How to reset a password or SSH for Linux-based virtual machines to:

    • Zresetuj hasło lub klucz SSH.
    • Utwórz konto użytkownika sudo .
    • Zresetuj konfigurację protokołu SSH.
  • Sprawdź kondycję zasobów maszyny wirtualnej pod kątem problemów z platformą.
    Wybierz maszynę wirtualną i przewiń w dół pozycję Ustawienia>Sprawdź kondycję.

Dodatkowe materiały

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.