Domyślny port SSH to 22 (TCP), zarejestrowany przez IANA. Można go zmienić, edytując dyrektywę Port w pliku /etc/ssh/sshd_config i restartując usługę SSH. Zmiana portu to security through obscurity - ogranicza hałas botów w logach, ale nie zastępuje kluczy SSH, fail2ban i firewalla. Zawsze otwórz port w firewallu przed restartem.
W skrócie: poniżej rozkładam trzy rzeczy naraz. Najpierw czym jest port 22 i jak sprawdzić, na czym faktycznie nasłuchuje Twój serwer. Potem zmianę portu krok po kroku, z komendami gotowymi do wklejenia dla Ubuntu, Debiana i RHEL. Na końcu - jak przy tej zmianie nie zamknąć sobie dostępu do maszyny, bo to najczęstszy sposób, w jaki ludzie blokują się na własnym VPS.
Jaki jest domyślny port SSH i dlaczego akurat 22
Domyślny port SSH to 22/TCP. Ten numer przypisała protokołowi IANA jeszcze w latach 90., gdy SSH zastępował niebezpieczne, niezaszyfrowane narzędzia zdalnego dostępu. Sąsiaduje w tablicy z portem 21 (FTP) i 23 (Telnet), którego SSH miał wyprzeć - jeśli chcesz szybko sprawdzić, czy dany port w ogóle odpowiada, opisuję to w tekście o poleceniu telnet do sprawdzania portów, zarezerwowanym dla usług systemowych, i właśnie dlatego klient ssh user@host bez żadnej dodatkowej flagi próbuje połączyć się od razu na 22.
Konkret: to serwer decyduje, na jakim porcie nasłuchuje - demon sshd z pakietu OpenSSH czyta ten numer z pliku /etc/ssh/sshd_config. Zanim cokolwiek zmienisz, warto sprawdzić stan faktyczny, a nie zakładać.
Sprawdź, na jakim porcie działa SSH:
sudo ss -tlnp | grep ssh
grep -i port /etc/ssh/sshd_config
Pierwsza komenda pokazuje, na czym sshd realnie słucha w tej chwili. Druga - co jest zapisane w konfiguracji. To rozróżnienie bywa ważne, bo po edycji pliku bez restartu usługi te dwie odpowiedzi się rozjadą. Cały temat kluczy, uwierzytelniania i konfiguracji demona rozkładam szerzej w przewodniku po administracji serwerem przez SSH i systemy z socket activation nie startują SSH bezpośrednio - robi to jednostka ssh.socket, a ona ma własną definicję portu, która nadpisuje sshd_config. Jeśli zmieniłeś port w pliku konfiguracyjnym, a sshd uparcie słucha na 22, to niemal na pewno ten mechanizm. Popraw port w socket:
sudo systemctl edit ssh.socket
W otwartym override dopisz:
[Socket]
ListenStream=
ListenStream=49222
Pusta linia ListenStream= czyści domyślną wartość, druga ustawia właściwą. Potem przeładuj konfigurację i zrestartuj gniazdo:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
CentOS, RHEL i AlmaLinux - firewalld plus SELinux
Na rodzinie RHEL pamiętaj o dwóch bramkach naraz. Otwarcie portu w firewalld (Krok 3) załatwia tylko połowę sprawy - drugą jest kontekst SELinux z Kroku 4. Pominięcie semanage to klasyczny objaw, w którym firewall przepuszcza ruch, a połączenie i tak jest odrzucane. Kolejność: firewalld, potem SELinux, na końcu restart usługi.
Docker - port zmieniasz po stronie hosta
W kontenerze zasada jest inna. sshd wewnątrz kontenera zwykle zostaje na 22, a numer, którym łączysz się z zewnątrz, ustawiasz w mapowaniu portów podczas uruchamiania:
docker run -p 2222:22 moj-obraz
Tu host wystawia 2222 i przekierowuje ruch na port 22 w kontenerze. Nie ruszasz sshd_config w obrazie - zmieniasz mapowanie. To ta sama logika co przy każdym przekierowaniu portu do kontenera.
Hardening SSH - co zrobić poza zmianą portu
Tu zaczyna się realne bezpieczeństwo. Zmiana portu ucisza logi, ale to poniższe faktycznie trzyma napastnika z dala od serwera. Krok po kroku, od najważniejszego.
Klucze SSH zamiast haseł to podstawa. Wygeneruj parę kluczy, wgraj publiczny na serwer, a potem wyłącz logowanie hasłem w sshd_config:
PasswordAuthentication no
Od tej chwili nawet poprawny login i hasło nie wpuszczą nikogo bez prywatnego klucza - a to jego zgadnięcie jest praktycznie niemożliwe. Konfigurację kluczy krok po kroku rozkładam w przewodniku po SSH albo zestaw szyfrowany tunel SSH.
Lockout to najgorszy scenariusz - zamknąłeś jedyną sesję, a nowy port nie działa. Nie panikuj i nie kombinuj zdalnie, bo nie masz jak. Każdy porządny dostawca VPS daje w panelu konsolę webową (VNC albo serial), która łączy się z maszyną z pominięciem SSH. Logujesz się przez nią, cofasz zmianę w sshd_config, restartujesz usługę i jesteś z powrotem. To dokładnie ta sytuacja, przed którą chroni Cię trzymanie starej sesji otwartej do samego końca.
FAQ
Jaki jest domyślny port SSH?
Domyślny port SSH to 22 w protokole TCP. Numer przypisała protokołowi organizacja IANA i to na nim nasłuchuje demon sshd od razu po instalacji OpenSSH. Klient ssh user@host bez dodatkowej flagi próbuje połączyć się właśnie na port 22.
Czy zmiana portu SSH zwiększa bezpieczeństwo?
Tylko pozornie. Przeniesienie SSH na inny port ogranicza automatyczne skanowanie i szum botów w logach, ale nie zatrzyma nikogo, kto puści nmap. To security through obscurity. Realne bezpieczeństwo dają klucze SSH, wyłączone logowanie hasłem i fail2ban, nie sam numer portu.
Jak sprawdzić, na którym porcie działa SSH?
Użyj polecenia sudo ss -tlnp | grep ssh, które pokazuje, na czym demon faktycznie nasłuchuje w tej chwili. Konfigurację zapisaną w pliku sprawdzisz przez grep -i port /etc/ssh/sshd_config. Jeśli obie odpowiedzi się różnią, prawdopodobnie brakuje restartu usługi.
Jak połączyć się z SSH na innym porcie?
Dodaj flagę -p z numerem portu: ssh -p 49222 user@host. Żeby nie wpisywać jej za każdym razem, zapisz port w pliku ~/.ssh/config po stronie klienta, dopisując linię Port 49222 w bloku danego hosta. Od tej pory łączysz się samą nazwą hosta.
Dlaczego po zmianie portu dostaję connection refused?
Trzy typowe przyczyny. Firewall nie przepuszcza nowego portu - otwórz go w UFW lub firewalld. Usługa nie wstała po restarcie - sprawdź journalctl -u ssh. Albo klient nadal łączy się na 22 - wtedy dodaj -p z właściwym numerem. Na RHEL dochodzi jeszcze brak kontekstu SELinux.
Jaki port wybrać zamiast 22?
Dowolny wolny z zakresu 1024-65535, powyżej well-known ports. Popularny jest 2222, ale skoro chodzi o odsianie automatów, lepszy bywa losowy numer powyżej 10000. Przed użyciem sprawdź poleceniem ss -tlnp, czy port nie jest już zajęty przez inną usługę.
Podsumowanie i następne kroki
Skrót całości: domyślny port SSH to 22, zmieniasz go dyrektywą Port w /etc/ssh/sshd_config, ale zawsze najpierw otwierasz nowy port w firewallu i nie zamykasz starej sesji, dopóki nowy port nie odpowie. Na nowszym Ubuntu pamiętaj o ssh.socket, na RHEL o SELinux.
Najważniejsze: sama zmiana portu to kosmetyka. Prawdziwe zabezpieczenie serwera to klucze SSH, wyłączone logowanie hasłem, fail2ban i wąski firewall - port jest tylko dodatkiem, który ucisza logi. Pełną administrację, od kluczy po tunelowanie, zbieram w przewodniku po SSH i tunelu SSH.
To zależy od ruchu: jeśli dopiero stawiasz serwer pod SSH albo DevOps i zastanawiasz się, gdzie, przejrzyj porównanie hostingów VPS dla DevOps - kto stawia własny serwer, ten i tak od pierwszego dnia będzie go zabezpieczał, więc warto zacząć od dostawcy, który daje pełną kontrolę nad SSH i firewallem.