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 16.
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ą.
- Zresetuj konfigurację protokołu SSH.
- Zresetuj poświadczenia użytkownika.
- 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).
- Sprawdź kondycję zasobu maszyny wirtualnej.
- Uruchom ponownie maszynę wirtualną.
- 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:
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 16.
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 myResourceGroup
systemie . 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 myPassword
pliku 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 myUsername
myVM
w myResourceGroup
systemie . 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 myResourceGroup
pliku . 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 myPassword
pliku 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 myResourceGroup
pliku . 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 myPassword
pliku 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:
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 16.
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:
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 materiały
- Jeśli nadal nie możesz nawiązać protokołu SSH z maszyną wirtualną po wykonaniu poniższych kroków, zobacz bardziej szczegółowe kroki rozwiązywania problemów, aby zapoznać się z dodatkowymi krokami w celu rozwiązania problemu.
- Aby uzyskać więcej informacji na temat rozwiązywania problemów z dostępem do aplikacji, zobacz Rozwiązywanie problemów z dostępem do aplikacji działającej na maszynie wirtualnej platformy Azure
- Aby uzyskać więcej informacji na temat rozwiązywania problemów z maszynami wirtualnymi utworzonymi przy użyciu klasycznego modelu wdrażania, zobacz Jak zresetować hasło lub protokół SSH dla maszyn wirtualnych opartych na systemie Linux.
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.