SSH, czyli Secure Shell, to protokół sieciowy zapewniający bezpieczny dostęp do komputerów oddalonych w sieci.
Komputery nawiązują ze sobą kontakt za pośrednictwem sieci. Specjaliści od sieci opracowali zbiór reguł umożliwiających komunikację z innymi maszynami, tworząc protokoły takie jak Telnet. Telnet umożliwia jednemu użytkownikowi przejęcie kontroli nad innym komputerem.
Jednakże, te protokoły nie zapewniają bezpieczeństwa, co oznacza, że każdy w sieci może przechwycić i odczytać przesyłane dane. W połowie lat 90. XX wieku, wprowadzono bardziej bezpieczny protokół o nazwie SSH, który stał się następcą protokołu Telnet.
Jeżeli pracujesz jako programista lub administrator systemów, prawdopodobnie korzystałeś z SSH przynajmniej raz. Jeżeli nie, to warto nauczyć się z niego korzystać, ponieważ jest to jedna z podstawowych umiejętności w tej branży.
Czym jest SSH?
SSH, czyli Secure Shell, to protokół sieciowy, który pozwala nam na bezpieczne łączenie się i komunikowanie ze zdalnymi komputerami, a w szczególności z serwerami.
Oferuje on zaawansowane szyfrowanie i jest powszechnie stosowany przez administratorów sieci oraz programistów do zarządzania systemami i aplikacjami na odległość, wykonywania poleceń oraz wymiany plików.
Dlaczego potrzebujemy SSH?
Protokół SSH został stworzony w 1995 roku, aby zaradzić problemom związanym z bezpieczeństwem, które dotykały niezabezpieczone protokoły dostępu zdalnego takie jak rlogin, rsh, i Telnet.
Przyjrzyjmy się Telnetowi, który został opracowany w 1969 roku. Jest to prosty program działający w linii poleceń, który umożliwia dostęp do zdalnego serwera z dowolnego miejsca na świecie. Za jego pomocą można wysyłać polecenia, które są wykonywane na serwerze, tak jakbyśmy siedzieli bezpośrednio przed nim. Telnet przesyła i odbiera dane jako zwykły tekst poprzez sieć.
Polecenia, które można wykonywać, obejmują uruchamianie programów, tworzenie katalogów, przesyłanie i usuwanie plików oraz włączanie i wyłączanie usług.
Problemem z łączeniem się z inną maszyną w sieci jest to, że przesyłane dane przechodzą przez różne sieci. Niektóre z nich mogą być niebezpieczne, a dane mogą zostać przechwycone i zmodyfikowane, zanim dotrą do serwera docelowego.
W początkowych latach, gdy kwestie bezpieczeństwa nie były tak istotne, komunikacja odbywała się w formie zwykłego tekstu. Dane przesyłane przez internet między klientem a serwerem były łatwe do przechwycenia i odczytania, ponieważ nie były szyfrowane.
Z tego względu protokoły wykorzystujące zwykły tekst są bardzo podatne na ataki i nie można ich stosować do przesyłania poufnych danych, takich jak hasła czy tajemnice. SSH jest uznawany za bezpieczną alternatywę dla starszych protokołów sieciowych dostępu zdalnego.
Jak działa SSH?
SSH wykorzystuje architekturę klient-serwer do zapewnienia bezpiecznej komunikacji w sieci poprzez połączenie klienta SSH z serwerem SSH. Standardowo serwer SSH nasłuchuje na porcie TCP 22 (można to zmienić w celu zwiększenia bezpieczeństwa).
Protokół SSH wykorzystuje kryptografię klucza publicznego do uwierzytelniania klienta i serwera. Dodatkowo, używa silnego szyfrowania symetrycznego i algorytmów haszujących do wymiany wiadomości między klientem i serwerem, zapewniając prywatność i integralność danych.
Linux jest popularnym systemem operacyjnym dla serwerów zdalnych ze względu na swoje bezpieczeństwo i niezawodność. Wiele serwerów opartych na Linuksie działa w Internecie latami, bez poważnych awarii czy restartów.
Większość sesji SSH, czyli czasu, gdy mamy dostęp do zdalnego serwera, obejmuje dwie podstawowe operacje:
- Uwierzytelnianie
- Wykonanie polecenia
Serwery SSH mają różne metody uwierzytelniania klientów.
Dwa najpopularniejsze sposoby to:
Uwierzytelnianie hasłem, które jest standardową metodą używaną w OpenSSH. Jest to najprostszy sposób uwierzytelniania, ale nie najbezpieczniejszy.
Pomimo tego, że hasła są przesyłane do serwera w bezpieczny sposób, nowoczesne ataki brute force mogą je złamać.
Uwierzytelnianie kluczem, które jest jeszcze bezpieczniejsze, polega na generowaniu par kluczy SSH. Jest to niezawodna i bezpieczna alternatywa dla haseł.
Po pomyślnym uwierzytelnieniu klienta, między nim a serwerem nawiązywane jest bezpieczne połączenie.
Dostęp do zdalnego serwera za pomocą SSH
Użytkownicy systemów Mac/Linux mogą korzystać z terminala do wprowadzania i wykonywania poleceń SSH, ponieważ OpenSSH jest zazwyczaj domyślnie zainstalowane.
Użytkownicy systemu Windows muszą zainstalować program emulatora terminala, aby móc uruchamiać polecenia SSH. PuTTY to najpopularniejszy klient SSH dla systemu Windows.
Aby połączyć się ze zdalnym serwerem za pomocą SSH, trzeba znać co najmniej dwie rzeczy.
Podstawowa składnia polecenia SSH wygląda następująco:
$ ssh <nazwa-użytkownika> @ <host> -p <numer-portu>
Nazwa użytkownika to nazwa użytkownika na zdalnej maszynie (a nie na komputerze lokalnym), a host to adres IP lub nazwa domeny.
Spójrzmy na przykład łączenia się ze zdalnym serwerem, korzystając z OverTheWire, czyli darmowej strony z grami typu wargame.
Połączmy się z wyzwaniem bandit, używając SSH. Jest to jedno z wyzwań dostępnych na stronie, które uczy logowania przez SSH.
Dane logowania:
nazwa użytkownika i hasło: bandit0
host i port: bandit.labs.overthewire.org, 2220
Po wpisaniu poniższego polecenia i naciśnięciu klawisza Enter:
$ ssh [email protected] -p 2220
Zostaniesz poproszony o podanie hasła w celu uwierzytelnienia. Wpisz hasło i naciśnij Enter.
Jeżeli wpisane hasło jest poprawne, to zostaniesz pomyślnie zalogowany na zdalny serwer i twój terminal będzie wyglądał podobnie jak na powyższym obrazku.
Teraz możesz używać terminala zdalnej maszyny do wpisywania i wykonywania poleceń oraz przeprowadzania potrzebnych operacji.
Jeśli chcesz zakończyć sesję SSH, wpisz polecenie wyjścia:
$ exit
Po pomyślnym wylogowaniu z sesji SSH pojawi się komunikat „Połączenie zamknięte”.
Podsumowanie
Głównym powodem, dla którego SSH jest tak popularny, jest to, że cała komunikacja między serwerem a klientem jest szyfrowana.
Wiele osób uważa, że korzystanie z SSH jest skomplikowane, a zrozumienie jego działania nie jest łatwe, jednak jest to prostsze niż się wydaje. Teraz masz podstawową wiedzę o SSH, jego działaniu, aspektach bezpieczeństwa i jego znaczeniu w komunikacji.
Następnie, warto zapoznać się z dalszymi materiałami, aby stać się ekspertem w zarządzaniu systemami.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.