SSH (Secure Shell) to szyfrowany protokół do zdalnego logowania i zarządzania serwerem. Wpisujesz komendę na swoim komputerze, a wykonuje się ona na serwerze po drugiej stronie internetu. Każdy admin VPS albo Linuxa używa SSH codziennie. ssh user@adres-ip-serwera, hasło albo klucz, jesteś na serwerze. Cała komunikacja idzie szyfrowana, podsłuchiwacz w sieci nie zobaczy ani komend, ani haseł. SSH zastąpił nieszyfrowanego Telneta i jest standardem od 1995 roku (port 22).
Spis treści
ToggleJak SSH działa pod spodem
SSH używa kryptografii asymetrycznej do ustanowienia bezpiecznego kanału. Klient (twój komputer) łączy się z serwerem na port 22. Serwer wysyła klucz publiczny, klient weryfikuje tożsamość serwera (przy pierwszym połączeniu pojawia się „Are you sure you want to continue connecting?”, akceptujesz, klucz się zapisuje). Klient i serwer negocjują klucz sesji do szyfrowania symetrycznego (AES-256). Od tej chwili cała komunikacja jest szyfrowana. Klient uwierzytelnia się: hasłem albo kluczem SSH (klucz prywatny lokalnie, klucz publiczny na serwerze).
Jak się połączyć
macOS i Linux. Terminal masz w systemie. Otwierasz i wpisujesz:
ssh root@123.456.789.10
Zamieniasz root na nazwę użytkownika i 123.456.789.10 na IP serwera (dostałeś od hostingu). Przy pierwszym połączeniu wpisujesz yes (akceptacja klucza serwera). Hasło, prompt, jesteś w środku.
Windows. Windows 10 i 11 ma wbudowanego klienta SSH. Otwierasz PowerShell albo CMD i piszesz ssh user@IP. Alternatywa: PuTTY (putty.org), graficzny klient. Wpisujesz IP, port 22, Open, login i hasło.
Klucze SSH: logowanie bez hasła
Hasła są wygodne, ale boty próbują tysięcy kombinacji na minutę i czasem trafią. Klucze SSH są bezpieczniejsze i wygodniejsze, bo logujesz się bez wpisywania niczego.
Generowanie klucza:
# Na SWOIM komputerze (nie na serwerze)
ssh-keygen -t ed25519 -C "twoj@email.com"
Dostajesz parę: klucz prywatny (~/.ssh/id_ed25519, którego nigdy nikomu nie pokazujesz) i klucz publiczny (~/.ssh/id_ed25519.pub, ten wgrywasz na serwer).
Wgranie klucza na serwer:
ssh-copy-id user@IP_SERWERA
Albo ręcznie: kopiujesz zawartość id_ed25519.pub i na serwerze wklejasz do ~/.ssh/authorized_keys.
Wyłączenie logowania hasłem (po skonfigurowaniu kluczy):
sudo nano /etc/ssh/sshd_config
# Zmień:
PasswordAuthentication no
# Restart:
sudo systemctl restart sshd
Od tego momentu zalogujesz się tylko kluczem. Brute-force na hasło przestaje istnieć.
Jak zabezpieczyć SSH
Klucze zamiast haseł. Najważniejsza rzecz, opisana wyżej. Robisz to raz i masz spokój.
Zmiana portu SSH. Domyślny port 22 jest skanowany przez boty bez przerwy. Zmiana na niestandardowy (2222, 49152): /etc/ssh/sshd_config, Port 2222, restart sshd. Łączysz się ssh -p 2222 user@IP. To security through obscurity, nie ochroni przed ukierunkowanym atakiem, ale zatrzymuje 99% automatycznych skanów.
Fail2ban. sudo apt install fail2ban. Automatycznie banuje IP po kilku nieudanych próbach (np. 5 błędów w 10 minut, ban na godzinę). Konfig w /etc/fail2ban/jail.local.
Firewall (UFW). Ogranicz SSH do swojego IP: sudo ufw allow from TWOJ_IP to any port 22. Zablokuj resztę. Ryzyko: jeśli twój IP się zmieni, tracisz dostęp. Trzymaj plan B (konsola awaryjna w panelu hostingu).
Nie pracuj jako root. Utwórz zwykłego użytkownika z sudo. Zablokuj logowanie roota przez SSH: PermitRootLogin no w sshd_config.
Co realnie robisz przez SSH
Zarządzanie serwerem. Aktualizacje (apt update && apt upgrade), instalacja oprogramowania (apt install nginx), konfiguracja Nginxa, MySQL, PHP, monitoring przez htop, df, free.
Transfer plików (SCP, SFTP). SCP: scp plik.zip user@IP:/var/www/, kopia pliku przez SSH. SFTP: FileZilla w trybie SFTP, graficzne przeciąganie plików przez szyfrowane połączenie.
Tunelowanie. Przekierowanie portu: ssh -L 3306:localhost:3306 user@IP, łączysz się z MySQL-em na serwerze tak, jakby chodził lokalnie. Przydaje się przy bezpiecznym dostępie do baz i phpMyAdmina.
Git po SSH. Klonowanie: git clone git@github.com:user/repo.git, uwierzytelnienie kluczem, bez hasła przy każdym push i pull. Sam tak konfiguruję każdą nową maszynę po stawianiu, oszczędność wieczna.
SSH config: aliasy zamiast długich komend
Zamiast wbijać ssh -p 2222 mojuser@188.68.231.12 za każdym razem, dodajesz alias do ~/.ssh/config:
Host mojserwer
HostName 188.68.231.12
User mojuser
Port 2222
IdentityFile ~/.ssh/id_ed25519
Od teraz ssh mojserwer i jesteś. Możesz zdefiniować aliasy dla wszystkich swoich serwerów. To w zasadzie pierwsza rzecz, którą robię na nowym laptopie.
Najczęściej zadawane pytania
Czy SSH jest bezpieczny
Tak. SSH szyfruje całą komunikację (AES-256, ChaCha20). Nawet jeśli ktoś przechwytuje twój ruch, widzi tylko nieczytelny szum. Klucz SSH ed25519 jest praktycznie nie do złamania współczesnymi metodami. Słabe punkty: słabe hasła (dlatego klucze), niezaktualizowany OpenSSH (aktualizuj), klucz prywatny bez passphrase (dorzuć: ssh-keygen -p -f ~/.ssh/id_ed25519).
Co zrobić, kiedy SSH connection refused
Sprawdzasz po kolei: czy IP serwera jest poprawne, czy serwer w ogóle chodzi (panel hostingu), czy SSH działa (systemctl status sshd, ale potrzebujesz innego dostępu, np. konsoli w panelu), czy firewall nie blokuje portu 22, czy port SSH nie został zmieniony (spróbuj ssh -p 2222 user@IP). Najczęstsza przyczyna: firewall albo zmieniony port.
SSH a FTP
FTP wysyła pliki i hasła plaintextem. Każdy w sieci może to podsłuchać. SSH/SFTP szyfruje wszystko. FTP wymaga osobnego serwera (vsftpd, ProFTPD). SFTP działa przez SSH, więc jeśli masz SSH, masz SFTP bez dodatkowej konfiguracji. W 2026 nigdy nie używasz czystego FTP, tylko SFTP albo FTPS.






