Secure Shell

Secure Shell (SSH) – standard protokołów komunikacyjnych używanych w sieciach komputerowych TCP/IP, w architekturze klient-serwer, a od wersji 2 nawet w architekturze serwer-klient.

W ścisłym znaczeniu SSH to tylko następca protokołu Telnet, służącego do terminalowego łączenia się ze zdalnymi komputerami. SSH różni się od Telnetu tym, że transfer wszelkich danych jest zaszyfrowany oraz możliwe jest rozpoznawanie użytkownika na wiele różnych sposobów. W szerszym znaczeniu SSH to wspólna nazwa dla całej rodziny protokołów, nie tylko terminalowych, lecz także służących do przesyłania plików (SCP, SFTP), zdalnej kontroli zasobów, tunelowania i wielu innych zastosowań. Wspólną cechą wszystkich tych protokołów jest identyczna z SSH technika szyfrowania danych i rozpoznawania użytkownika.
Obecnie protokoły z rodziny SSH praktycznie wyparły wszystkie inne mniej bezpieczne protokoły, takie, jak np. rlogin czy RSH.

Ogólne założenia protokołu SSH powstały w grupie roboczej IETF. W użyciu są obie jego wersje – 1 i 2. W wersji 2 możliwe jest użycie dowolnych sposobów szyfrowania danych i czterech różnych sposobów uwierzytelniania, podczas gdy SSH1 obsługiwało tylko stałą listę kilku sposobów szyfrowania i dwa sposoby rozpoznawania użytkownika (klucz RSA i zwykłe hasło). 

Wersja 2 została przeprojektowana od zera ze względu na ujawnione w wersji 1.5 podatności na ataki kryptoanalityczne, umożliwiające wstrzykiwanie komend do zaszyfrowanego strumienia SSH. W 2009 roku opublikowano kolejny atak tego typu na wersję 2. Problem został naprawiony w OpenSSH 5.2 za pomocą zmiany domyślnego trybu szyfrowania z CBC na CTR.

Najczęściej stosowany sposób szyfrowania to AES, choć część serwerów nadal używa szyfrowania Blowfish i technik z rodziny DES.

Uwierzytelnienie użytkownika może się opierać na haśle, kluczu (RSA, DSA) lub protokole Kerberos.

Protokoły z rodziny SSH korzystają zwykle z portu 22 protokołu TCP, choć często stosuje się porty o innych numerach w celu utrudnienia wykrycia serwera SSH.

Protokół SSH jest zaimplementowany w warstwie aplikacji modelu OSI w ramach połączenia TCP.

Zastosowanie 
SSH jest zwykle używany do zdalnego logowania z komputerem i wykonywania poleceń, ale obsługuje także tunele, przekazywanie portów TCP i X11. Możliwe jest przesyłanie plików przy użyciu protokołów przesyłania plików SSH (SFTP) lub SCP. SSH używa modelu klient-serwer.

Standardowy port TCP 22 został przypisany do kontaktowania się z serwerami SSH.

Program klienta SSH jest zwykle używany do nawiązywania połączeń z demonem SSH akceptującym połączenia zdalne. Oba są powszechnie obecne w większości nowoczesnych systemów operacyjnych, w tym w macOS, większości dystrybucji Linuksa, OpenBSD, FreeBSD, NetBSD, Solaris i OpenVMS. Warto zauważyć, że Windows jest jednym z niewielu nowoczesnych systemów operacyjnych na komputery / serwery, które domyślnie nie zawierają SSH. Dostępne są zamknięte, bezpłatne i otwarte oprogramowania (np. PuTTY i OpenSSH) o różnych poziomach złożoności i kompletności. Menedżer plików (np. Konqueror) może wykorzystać protokół FISH aby zapewnić graficzny interfejs użytkownika. Program WinSCP zapewnia podobne zarządzanie plikami (synchronizacja, kopiowanie, zdalne kasowanie) za pomocą PuTTY. Zarówno WinSCP jak i PuTTY są dostępne w pakiecie do uruchamiania bezpośrednio z dysku USB, bez konieczności instalacji na komputerze klienta. W systemie Windows konfiguracja serwera SSH zazwyczaj wymaga instalacji (np. poprzez Cygwin). 

SSH jest ważny dla przetwarzania danych w chmurze, aby rozwiązać problemy z łącznością, unikając problemów bezpieczeństwa związanych z eksponowaniem wirtualnej maszyny w chmurze. Tunel SSH może zapewnić bezpieczną ścieżkę przez Internet, poprzez zaporę ogniową do maszyny wirtualnej.

Historia i rozwój

Wersja 1.x 
W 1995 roku Tatu Ylönen, naukowiec z Technicznego Uniwersytetu Helsińskiego w Finlandii, zaprojektował pierwszą wersję protokołu (obecnie nazywaną SSH-1), spowodowany przez atak węszący na sieć uniwersytecką. Celem SSH było zastąpienie wcześniejszych protokołów rlogin, Telnet, FTP i rsh, które nie zapewniały silnego uwierzytelnienia ani gwarancji poufności. Ylönen opublikował swoje narzędzie jako freeware w lipcu 1995 roku i szybko zyskało popularność. Pod koniec 1995 roku baza użytkowników SSH wzrosła do 20 000 użytkowników w 50 krajach.

W grudniu 1995 roku Ylönen założył SSH Communications Security, aby promować i rozwijać SSH. Oryginalna wersja oprogramowania SSH używała różnych darmowych programów, takich jak GNU libgmp, ale późniejsze wersje wydane przez SSH Communications Security ewoluowały coraz bardziej w zamknięte oprogramowanie.

Oszacowano, że do roku 2000 liczba użytkowników wzrosła do 2 milionów.

Wersja 2.x 
„Secsh” był oficjalną nazwą IETF (Internet Engineering Task Force) dla odpowiedzialnej za drugą wersję protokołu SSH. W 2006 roku ulepszona wersja protokołu – SSH-2, została przyjęta jako standard. Ta wersja jest niekompatybilna z SSH-1. Lepsze bezpieczeństwo odbywa się poprzez protokół Diffiego-Hellmana i silne sprawdzanie integralności za pomocą kodów uwierzytelniania wiadomości. Nowe funkcje SSH-2 obejmują możliwość uruchamiania dowolnej liczby sesji na jednym połączeniu SSH.

OpenSSH i OSSH 
W 1999 roku deweloperzy, chcąc mieć dostępną wersję darmową oprogramowania, powrócili do starszej wersji 1.2.12 oryginalnego programu SSH, który był ostatnim wydanym na licencji open source. Następnie z tej bazy kodu opracowano OSSH. W następnej kolejności programiści OpenBSD rozwinęli kod Grönvalla i pracowali nad nim tworząc OpenSSH, który został wydany wraz z wersją 2.6 OpenBSD. Od tej wersji zaczęto przenosić OpenSSH do innych systemów operacyjnych.

Od roku 2005, OpenSSH był najbardziej popularną implementacją SSH, domyślnie spotykaną w wielu systemach operacyjnych. OSSH tymczasem stał się przestarzały. OpenSSH nadal obsługuje protokół SSH-2, po usunięciu obsługi SSH-1 z kodu źródłowego z wersją OpenSSH 7.6.

Zobacz też 

 SCP
 SSHFS - system plików
 Tunel (informatyka)

Przypisy

Linki zewnętrzne 
 Grupa robocza IETF zajmująca się SSH
 
 
 
 
 
 WebSSH
 PuTTY - klient SSH dla Windows
 SSHWindows - serwer SSH dla Windows
 Programy do SSH oparte na implementacji ssh.com
 Strona projektu OpenSSH.
 
 

Protokoły kryptograficzne
Protokoły warstwy aplikacji