Secure Shell
Debugowanie problemów z ssh
Szukaj…
Klucz prywatny nie jest akceptowany (debugowanie klientów OpenSSH)
Domyślnie większość informacji jest ukryta przed użytkownikiem. Możesz użyć przełączników -v , aby uzyskać pełny dziennik próby połączenia, który zwykle wskaże problem, pokazując, dlaczego zachowanie jest inne niż się spodziewasz.
Załóżmy, że łączysz się z serwerem example.com za pomocą ssh (lub innego klienta OpenSSH, takiego jak sftp lub scp ), a twój klucz prywatny nie jest akceptowany przez serwer, a serwer prosi o hasło (lub odrzuca połączenie):
$ ssh example.com
[email protected]'s password:
Spróbuj uruchomić ssh z przełącznikami -vvv , które wypiszą wszystkie komunikaty debugowania. Będzie to dużo informacji, ale po pewnym czasie łatwo zrozumieć, że:
$ ssh -vvv example.com
Najczęstszym problemem jest to, że klucz nie znajduje się w oczekiwanej lokalizacji. Możesz oczekiwać, że pojawią się podobne wiersze, narzekające na brakujące pliki. Sprawdzanie, czy plik został naprawdę odczytany, to dobry początek:
debug1: identity file /home/username/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/username/.ssh/id_dsa-cert type -1
Możemy przejść do części uwierzytelniania. Klucz może być oferowany, ale odrzucany przez serwer z powodu problemów z konfiguracją serwera. Dziennik może wyglądać mniej więcej tak:
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: username@localhost
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
ZMIENIŁO SIĘ ZDALNA IDENTYFIKACJA HOSTA!
Częstym błędem przy użyciu ssh jest zobaczenie błędu jak
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:L5ri/Xdgpuals893ej1z5F1wlg1n2YNeBf/tsABX+QQ.
Please contact your system administrator.
Add correct host key in /Users/username/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/username/.ssh/known_hosts:12
RSA host key for *IP address* has changed and you have requested strict checking.
Host key verification failed.
Oznacza to, że wcześniej łączyłeś się z tym samym serwerem i został on zidentyfikowany za pomocą różnych kluczy hosta. Jeśli masz świadomość, że zmieniłeś klucze serwera, przeinstalowałeś serwer lub administrator serwera ogłosił pewne zmiany, zazwyczaj możesz usunąć stary klucz i pozwolić ssh na zapisanie nowego.
Stary klucz można w przejrzysty sposób usunąć za pomocą ssh-keygen :
ssh-keygen -R *IP address*
A następne połączenie powinno poprosić o zweryfikowanie nowego odcisku palca:
ssh192.168.0.128
The authenticity of host '192.168.0.128 (192.168.0.128)' can't be established.
ECDSA key fingerprint is SHA256:L5ri/Xdgpuals893ej1z5F1wlg1n2YNeBf/tsABX+QQ.
Are you sure you want to continue connecting (yes/no)?
Jeśli nie znasz żadnego z powyższych, najlepiej skontaktować się z administratorem serwera, aby upewnić się, że wszystko jest w porządku. Jeśli nie, potencjalny atakujący może uzyskać zarówno informacje uwierzytelniające, jak i wszystkie przesłane dane!
Połączenie odrzucone
Błąd „Odmowa połączenia” wystąpi, jeśli klient wyśle żądanie połączenia do zdalnego hosta serwera, a zdalny host odpowie, że odmawia przyjęcia żądania. Błąd „Odmowa połączenia” zasadniczo oznacza, że komputer nie przyjmuje połączeń z żądanym adresem IP i portem.
„Odmowa połączenia” może być spowodowana zaporą sieciową, która blokuje żądania połączenia. Zaporę skonfigurowaną do blokowania połączeń z określonym punktem końcowym można ustawić tak, aby odrzucała żądania połączenia - w takim przypadku klient nigdy nie otrzyma odpowiedzi i ostatecznie przekroczy limit czasu. Lub zapora może odpowiedzieć na żądania połączenia z odpowiedzią odmową.
Oprócz zapór ogniowych, w przypadku SSH „odmowa połączenia” ma kilka możliwych przyczyn:
Do połączenia możesz użyć niewłaściwego numeru portu. Standardowy numer portu dla SSH to 22, ale niektóre osoby uruchamiają usługę ssh na innym porcie, aby powstrzymać nieautoryzowane próby dostępu.
Być może próbujesz połączyć się z niewłaściwym komputerem. Być może źle wpisałeś nazwę hosta lub adres IP. Lub komputer może używać dynamicznie przypisywanego adresu, który się zmienił.
Proces serwera ssh może nie być uruchomiony:
- Być może nie został jeszcze uruchomiony, jeśli system jest w trakcie uruchamiania.
- Być może zostało wyłączone; np. gdy system jest w trybie pojedynczego użytkownika.
- Być może został źle skonfigurowany, co powoduje, że nie można go uruchomić.
- Komputer może nie mieć skonfigurowanego serwera SSH. Systemy MS Windows zazwyczaj nie zawierają serwera SSH. W niektórych systemach Linux serwer SSH może być elementem opcjonalnym. OS X zawiera serwer SSH, ale domyślnie jest wyłączony.
Proces serwera SSH może nie nasłuchiwać połączeń na określonym interfejsie IP, z którym próbujesz się połączyć. Większość komputerów ma co najmniej dwa interfejsy IP, interfejs „localhost” i jeden lub więcej interfejsów sieciowych. Z każdym aktywnym interfejsem powiązany jest adres IP. Serwer SSH jest zazwyczaj skonfigurowany do akceptowania połączeń na dowolnym interfejsie IP. Ale można go skonfigurować tak, aby akceptował połączenia tylko na określonych interfejsach. W takim przypadku komputer odrzuci połączenia z adresem IP, którego serwer SSH nie słucha, nawet jeśli żądanie połączenia ma właściwy port.
Serwer może mieć zaległości w żądaniach połączeń z tym samym portem. Jest to rzadkie i niezwykłe, ale jeśli host odbiera żądania połączenia szybciej, niż można je obsłużyć, ostatecznie zacznie odrzucać nowe żądania połączenia.
Należy zauważyć, że zapór na bok, „odmowa połączenia” oznacza, że komunikujesz się z komputerem zdalnym - to po prostu nie jest zaakceptowaniem żądania połączenia.
Przekroczono limit czasu połączenia
Błąd „Przekroczono limit czasu połączenia” występuje, gdy system zdalny nie reaguje na próbę otwarcia połączenia TCP / IP przez klienta. Najczęstsze przyczyny to:
- Zapora sieciowa blokuje próbę połączenia na używanym porcie:
- Zapora może znajdować się po stronie klienta, blokując połączenia wychodzące, po stronie serwera, blokując połączenia przychodzące lub gdzieś indziej na ścieżce.
- Problem root może polegać na tym, że używasz niewłaściwego numeru portu.
- Host, z którym próbujesz się połączyć, może być offline.
- Pewna część sieci między klientem a serwerem może być wyłączona lub zakłócona.
- Może występować problem z routingiem sieciowym.
Diagnozowanie pierwotnej przyczyny przekroczenia limitu czasu połączenia jest trudne.
ssh_exchange_identification: read: Resetowanie połączenia przez peer
Ten komunikat o błędzie może zostać wygenerowany przez klienta ssh OpenSSH. Oznacza to, że połączenie TCP między klientem a serwerem zostało nieprawidłowo zamknięte przez serwer natychmiast po zaakceptowaniu. Typowe przyczyny tego komunikatu to:
- Proces serwera SSH działa nieprawidłowo - na przykład się zawiesił.
- Zapora, router lub inne urządzenie sieciowe między klientem a serwerem zakłóca połączenie SSH.
Frazy w komunikacie o błędzie wskazują konkretnie, co się stało:
ssh_exchange_identification: 1. Po nawiązaniu połączenia przez klienta SSH z serwerem SSH, pierwszym krokiem do uruchomienia protokołu SSH jest przesłanie przez serwer wersji oprogramowania do klienta. Błąd zawierający „ssh_exchange_identification” wskazuje, że błąd wystąpił natychmiast po nawiązaniu połączenia TCP, podczas gdy klient czekał na wersję oprogramowania z serwera.
Resetowanie połączenia: Resetowanie połączenia oznacza, że połączenie TCP zostało „nienormalnie zamknięte”. Możesz to zrobić, jeśli proces oprogramowania utrzymujący jedno z połączeń TCP ulegnie awarii. Zapory sieciowe można skonfigurować tak, aby używały resetowania połączeń jako sposobu blokowania połączeń TCP.
przez peer oznacza, że połączenie TCP zostało zamknięte z „drugiego końca” połączenia. W tym przypadku „drugim końcem” jest zdalny serwer SSH.
Pamiętaj, że ten błąd nie oznacza żadnego niepowodzenia uwierzytelnienia. Serwer zamknął połączenie TCP natychmiast po zaakceptowaniu. Klient i serwer jeszcze nie wymienili żadnych danych. Serwer nie wysłał jeszcze klucza hosta do klienta, a klient nie próbował jeszcze uwierzytelnić się na serwerze.
ssh_exchange_identification: Połączenie zamknięte przez zdalny host
Ten komunikat o błędzie może zostać wygenerowany przez klienta ssh OpenSSH. Oznacza to, że połączenie TCP między klientem a serwerem zostało zamknięte przez serwer natychmiast po zaakceptowaniu. Ten komunikat ogólnie wskazuje, że serwer SSH został skonfigurowany tak, aby nie akceptował połączeń z klienta z jakiegoś powodu:
- Serwer może być skonfigurowany do odrzucania połączeń z adresu IP klienta.
- Serwer może być skonfigurowany z ograniczeniem liczby aktywnych połączeń SSH.
- Klient mógł połączyć się z czymś, co nie jest serwerem SSH.
Frazy w komunikacie o błędzie wskazują konkretnie, co się stało:
ssh_exchange_identification: 1. Po nawiązaniu połączenia przez klienta SSH z serwerem SSH, pierwszym krokiem do uruchomienia protokołu SSH jest przesłanie przez serwer wersji oprogramowania do klienta. Błąd zawierający „ssh_exchange_identification” wskazuje, że błąd wystąpił natychmiast po nawiązaniu połączenia TCP, gdy klient czekał na wersję oprogramowania z serwera.
Połączenie zamknięte: Oznacza to, że połączenie TCP zostało zamknięte w normalny sposób. Wskazuje, że serwer SSH celowo zamknął połączenie. Jest to w przeciwieństwie do „Resetowania połączenia”, co może wskazywać, że serwer SSH uległ awarii lub działał nieprawidłowo.
przez zdalny host oznacza, że połączenie TCP zostało zamknięte z „drugiego końca” połączenia. W tym przypadku „drugim końcem” jest zdalny serwer SSH.
Pamiętaj, że ten błąd nie oznacza żadnego niepowodzenia uwierzytelnienia. Serwer zamknął połączenie TCP natychmiast po zaakceptowaniu. Klient i serwer jeszcze nie wymienili żadnych danych. Serwer nie wysłał jeszcze klucza hosta do klienta, a klient nie próbował jeszcze uwierzytelnić się na serwerze.