SSH (Secure Shell) to szyfrowany protokół sieciowy, który pozwala bezpiecznie połączyć się ze zdalnym serwerem, dostać konsolę (powłokę) i wykonywać na nim polecenia tak, jakbyś siedział przy jego klawiaturze. Cały ruch — login, hasło, komendy i ich wynik — leci przez zaszyfrowany tunel, więc nawet jeśli ktoś podsłuchuje sieć, zobaczy tylko bełkot. Domyślnie SSH nasłuchuje na porcie 22 (TCP). Dziś w użyciu jest praktycznie wyłącznie wersja SSH-2, opisana w RFC 4251 — starszy SSH-1 ma znane dziury i nikt rozsądny go już nie odpala.
Pod maską SSH robi trzy rzeczy. Najpierw warstwa transportowa szyfruje połączenie i weryfikuje tożsamość serwera (po jego kluczu — stąd słynne pytanie o fingerprint przy pierwszym połączeniu). Potem warstwa uwierzytelniania sprawdza, czy to naprawdę Ty — hasłem albo, znacznie lepiej, parą kluczy. Na koniec warstwa połączenia multipleksuje wszystko w jednym tunelu, dzięki czemu jedna sesja obsłuży naraz konsolę, kopiowanie plików i przekierowanie portów.
Jak wygląda to w praktyce
Najpopularniejsza implementacja to OpenSSH — masz ją na każdym Linuksie, macOS i nowszym Windowsie. Logowanie wygląda banalnie:
Zamiast hasła stosuj klucze. Generujesz parę poleceniem ssh-keygen -t ed25519, klucz publiczny wgrywasz na serwer (ssh-copy-id pawel@serwer), a klucz prywatny zostaje u Ciebie. Od tej pory logujesz się bez wpisywania hasła, a do tego SSH obsłuży kopiowanie plików (scp, rsync) czy tunelowanie portów (ssh -L 8080:localhost:80 serwer). To samo SSH stoi za git push na GitHuba.
Na co uważać
- Klucz prywatny to Twój dowód osobisty — nie wrzucaj go do repo ani na Slacka. Zabezpiecz passphrase.
- Pierwsze połączenie pyta o fingerprint serwera. Nie klikaj
yesna ślepo — to jedyny moment, gdy łapiesz podstawiony serwer (atak MITM). - Wyłącz logowanie hasłem i roota na produkcji (
PasswordAuthentication no,PermitRootLogin nowsshd_config). Boty skanują port 22 non stop. - Mit: zmiana portu z 22 na inny to nie zabezpieczenie, tylko mniej hałasu w logach. Realnej ochrony daje uwierzytelnianie kluczem.
Pojęcia powiązane: OpenSSH, klucze publiczny/prywatny, SSH-keygen, SCP i SFTP, tunelowanie portów (port forwarding), TLS, VPN, plik sshd_config oraz known_hosts.