Troubleshoot SSH connections to an Azure Linux VM that fails, errors out, or is refused (Rozwiązywanie problemów dotyczących połączeń SSH z maszyną wirtualną z systemem Linux — niepowodzenia, błędy lub odmowa połączenia)

Dotyczy: ✔️ maszyny wirtualne z systemem Linux

Ten artykuł ułatwia znajdowanie i rozwiązywanie problemów występujących z powodu błędów protokołu Secure Shell (SSH), niepowodzeń połączenia SSH lub odmowy protokołu 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ć witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub rozszerzenia dostępu do 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ł 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ń zezwalającą na ruch SSH (domyślnie port TCP 22).
    • Nie można użyć przekierowania/mapowania portów bez korzystania z modułu równoważenia obciążenia platformy Azure.
    • Jeśli używasz identyfikatora Entra firmy Microsoft do zarządzania nazwami logowania SSH, użytkownik musi mieć przypisaną rolę Identyfikator logowania administratora maszyny wirtualnej lub Identyfikator logowania użytkownika maszyny wirtualnej w grupie zasobów, która zawiera maszynę wirtualną i skojarzone z nią zasoby. W przeciwnym razie zostanie wyświetlony błąd "Odmowa uprawnień (publickey)". Aby uzyskać więcej informacji, zobacz Configure role assignments for the VM that uses Microsoft Entra login (Konfigurowanie przypisań ról dla maszyny wirtualnej korzystającej z logowania firmy Microsoft Entra).
  4. Sprawdź kondycję zasobu maszyny wirtualnej.
    • Upewnij się, że maszyna wirtualna 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

Możesz zresetować poświadczenia, konfigurację SSH lub rozwiązać problemy ze stanem usługi SSH przy użyciu jednej z następujących metod:

  • Witryna Azure Portal — doskonałe rozwiązanie, jeśli musisz szybko zresetować konfigurację SSH lub klucz SSH i nie masz zainstalowanych narzędzi platformy Azure.
  • Konsola szeregowa maszyny wirtualnej platformy Azure — konsola szeregowa maszyny wirtualnej będzie działać niezależnie od konfiguracji protokołu SSH i udostępni interaktywną konsolę maszyny wirtualnej. W rzeczywistości sytuacje "nie mogą SSH" są w szczególności tym, co konsola szeregowa została zaprojektowana, aby pomóc rozwiązać problem. Więcej szczegółów można znaleźć poniżej.
  • Użyj polecenia Uruchom za pośrednictwem witryny Azure Portal — możesz uruchamiać podstawowe polecenia przy użyciu funkcji Uruchom polecenie za pośrednictwem witryny Azure Portal. Dane wyjściowe zostaną zwrócone do portalu.
  • Interfejs wiersza polecenia platformy Azure — jeśli jesteś już w wierszu polecenia, szybko zresetuj konfigurację lub poświadczenia SSH.
  • Rozszerzenie Azure VMAccessForLinux — tworzenie i ponowne używanie plików definicji json w celu zresetowania konfiguracji SSH lub poświadczeń użytkownika.

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 witryny Azure Portal

Witryna Azure Portal umożliwia szybkie resetowanie konfiguracji SSH lub poświadczeń użytkownika bez instalowania narzędzi na komputerze lokalnym.

Aby rozpocząć, wybierz maszynę wirtualną w witrynie 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 witrynie Azure Portal.

Resetowanie konfiguracji protokołu SSH

Aby zresetować konfigurację protokołu SSH, wybierz pozycję Reset configuration only w sekcji Tryb, 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.

Reset SSH credentials for a user (Resetowanie poświadczeń protokołu SSH użytkownika)

Aby zresetować poświadczenia istniejącego użytkownika, wybierz pozycję Reset SSH public key lub Reset password w sekcji Tryb , tak 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 sprawdzić, 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 dla portu SSH (domyślnie 22) istnieje priorytetowa reguła ruchu przychodzącego sieciowej grupy zabezpieczeń "Zezwalaj". Aby uzyskać więcej informacji, zobacz Używanie obowiązujących reguł zabezpieczeń do rozwiązywania problemów z przepływem ruchu maszyny wirtualnej.

Sprawdzanie routingu

Użyj funkcji Następnego przeskoku usługi 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 maszyny wirtualnej.

Korzystanie z konsoli szeregowej maszyny wirtualnej platformy Azure

Konsola szeregowa maszyny wirtualnej platformy Azure zapewnia dostęp do konsoli tekstowej 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 dokładniej rozwiązać problemy z łącznością SSH.

Sprawdź, 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 Active wiersza w danych wyjściowych. Dane wyjściowe pokazują również port i adresy IP, na których jest nasłuchiwana.

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ć ss polecenie za pomocą polecenia sudo:

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

Uwaga

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

Jeśli istnieją 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 jest uruchomiony protokół SSH

Powyższe dane wyjściowe polecenia pokazują, że proces SSHD nasłuchuje na porcie 22. Gdy proces SSHD jest 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

Dowolny wiersz rozpoczynający # się od w danych wyjściowych jest komentarzem i można go bezpiecznie zignorować. Jeśli nic nie zostanie zwrócone lub wiersze to komentarze, zostanie użyta domyślna konfiguracja. Domyślną konfiguracją jest nasłuchiwanie wszystkich adresów IP w systemie na porcie 22.

Korzystanie z polecenia Uruchom za pośrednictwem witryny 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 witrynie Azure Portal. Dane wyjściowe zostaną zwrócone do witryny 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 systemu Linux, upewnij się, że zainstalowano program Microsoft Azure Linux Agent 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żesz spróbować zresetować konfigurację SSH do wartości domyślnych i ponownie uruchomić serwer SSH na maszynie wirtualnej. Nie powoduje to zmiany nazwy konta użytkownika, hasła ani kluczy SSH. W poniższym przykładzie użyto polecenia az vm user reset-ssh do zresetowania konfiguracji SSH na maszynie wirtualnej o nazwie myVM w myResourceGroupsystemie . Użyj własnych wartości w następujący sposób:

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

Reset SSH credentials for a user (Resetowanie poświadczeń protokołu SSH użytkownika)

W poniższym przykładzie użyto polecenia az vm user update , aby zresetować poświadczenia dla 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 za pomocą 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 , na maszynie wirtualnej o nazwie myUsernamemyVM w myResourceGroupsystemie . 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 do maszyny wirtualnej dla systemu Linux odczytuje w pliku json, który definiuje akcje do wykonania. Te akcje obejmują resetowanie dysku 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 można następnie wywołać w przypadku konkretnych scenariuszy.

Resetowanie dysku SSHD

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

{
    "reset_ssh":True
}

Za pomocą interfejsu wiersza polecenia platformy Azure wywołasz VMAccessForLinux rozszerzenie, aby zresetować połączenie 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 myResourceGrouppliku . 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

Reset SSH credentials for a user (Resetowanie poświadczeń protokołu SSH użytkownika)

Jeśli dysk SSHD wydaje się działać poprawnie, możesz zresetować poświadczenia dla użytkownika dającego. 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 pliku myPassword. Wprowadź następujące wiersze do settings.json pliku, używając własnych wartości:

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

Możesz też 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 myPasswordpliku na maszynie wirtualnej o nazwie myVM w myResourceGroup. Wprowadź następujące wiersze do 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 myResourceGrouppliku . 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 konfiguracji protokołu SSH

Sama konfiguracja dysku SSHD może zostać nieprawidłowo skonfigurowana lub usługa napotkała błąd. Możesz zresetować dysk SSHD, aby upewnić się, że sama konfiguracja SSH jest prawidłowa. Zresetowanie dysku 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łasnych nazw maszyn wirtualnych i grup zasobów w następujący sposób:

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

Reset SSH credentials for a user (Resetowanie poświadczeń protokołu SSH użytkownika)

Jeśli dysk SSHD wydaje się działać poprawnie, możesz zresetować hasło dla użytkownika dającego. Poniższy przykład resetuje poświadczenia dla 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:

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

Jeśli używasz uwierzytelniania za pomocą klucza SSH, możesz zresetować klucz SSH dla danego użytkownika. Poniższy przykład aktualizuje klucz SSH przechowywany 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:

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ę 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 witryny 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 witrynie 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

Ponowne wdrażanie maszyny wirtualnej

Maszynę wirtualną można ponownie wdrożyć w innym węźle na platformie Azure, co może rozwiązać wszelkie podstawowe problemy z siecią. Aby uzyskać informacje na temat ponownego wdrażania maszyny wirtualnej, zobacz Ponowne wdrażanie maszyny wirtualnej w nowym węźle 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 witryny Azure Portal, wybierz maszynę wirtualną i przewiń w dół do sekcji Pomoc . Wybierz pozycję Wdróż ponownie, jak w poniższym przykładzie:

Zrzut ekranu przedstawiający ponowne wdrażanie maszyny wirtualnej w witrynie Azure Portal.

Interfejs wiersza polecenia platformy Azure

W poniższym przykładzie użyj polecenia az vm redeploy , aby ponownie wdrożyć 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 redeploy --resource-group myResourceGroup --name myVM

Dodatkowe zasoby

Skontaktuj się z nami, aby uzyskać pomoc

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