- 1 1. Wstęp
- 2 2. Podstawowa konfiguracja SSH
- 3 3. Ulepszanie bezpieczeństwa SSH
- 4 Podsumowanie
- 5 4. Zaawansowana konfiguracja SSH
- 6 Podsumowanie
- 7 5. Rozwiązywanie problemów z SSH
- 8 Podsumowanie
- 9 6. FAQ (Najczęściej zadawane pytania)
- 9.1 6.1 Jak zapobiec timeoutom SSH?
- 9.2 6.2 Co zrobić, jeśli zapomnę hasła SSH?
- 9.3 6.3 Jak używać SSH w systemie Windows?
- 9.4 6.4 Jak skonfigurować SSH w Ubuntu WSL (Windows Subsystem for Linux)?
- 9.5 6.5 Jakie dodatkowe środki bezpieczeństwa powinienem podjąć?
- 9.6 6.6 Jak monitorować logi SSH w czasie rzeczywistym?
- 9.7 6.7 Jak ułatwić korzystanie z SSH?
- 10 Podsumowanie
- 11 Powiązane artykuły
1. Wstęp
Konfiguracja SSH w Ubuntu jest niezbędna do zarządzania zdalnymi serwerami. SSH (Secure Shell) to protokół zapewniający bezpieczną, szyfrowaną komunikację, szeroko stosowany do zdalnego dostępu do serwerów, wykonywania poleceń oraz transferu plików.
W tym przewodniku omówimy wszystko – od podstawowej instalacji po zaawansowane ustawienia bezpieczeństwa SSH w Ubuntu.
1.1 Dlaczego warto skonfigurować SSH w Ubuntu?
1.1.1 Co to jest SSH?
SSH (Secure Shell) to protokół zaprojektowany do bezpiecznej komunikacji w sieci. Jest powszechnie używany do logowania się na zdalne serwery, przesyłania plików oraz tunelowania (przekierowywania portów). W przeciwieństwie do tradycyjnych protokołów, takich jak Telnet czy FTP, SSH szyfruje całą komunikację, co czyni go bardzo bezpiecznym.
1.1.2 Kiedy potrzebujesz SSH w Ubuntu?
SSH jest przydatny do zdalnego zarządzania w różnych scenariuszach, takich jak:
- Zarządzanie serwerami w chmurze – usługi chmurowe takie jak AWS, GCP i Vultr używają SSH do zdalnego dostępu do serwerów.
- Zdalne operacje w środowisku LAN – dostęp do wewnętrznych serwerów lub maszyn deweloperskich przez SSH w ramach pracy zdalnej.
- Zarządzanie urządzeniami IoT – zdalne sterowanie wbudowanymi urządzeniami, takimi jak Raspberry Pi.
Domyślnie SSH jest wyłączone w Ubuntu. Aby go używać, musisz zainstalować i skonfigurować go ręcznie.
2. Podstawowa konfiguracja SSH
Aby korzystać z SSH w Ubuntu, musisz zainstalować serwer SSH (OpenSSH) i odpowiednio go skonfigurować. W tej sekcji omówimy instalację, podstawowe ustawienia, konfigurację zapory oraz sposób łączenia się z serwerem.
2.1 Instalacja i uruchomienie OpenSSH
2.1.1 Co to jest OpenSSH?
OpenSSH (Open Secure Shell) to otwarto‑źródłowa implementacja protokołu SSH. Obsługuje połączenia zdalne, bezpieczny transfer plików (SCP i SFTP) oraz przekierowywanie portów.
2.1.2 Instalacja OpenSSH
Domyślnie Ubuntu nie zawiera preinstalowanego serwera SSH. Użyj poniższego polecenia, aby go zainstalować:
sudo apt update && sudo apt install -y openssh-server
To polecenie aktualizuje listę pakietów i instaluje serwer OpenSSH.
2.1.3 Uruchomienie i włączenie serwera SSH
Po instalacji uruchom serwer SSH i włącz go, aby startował przy uruchomieniu systemu.
sudo systemctl enable --now ssh
Opcja enable zapewnia automatyczne uruchomienie SSH przy starcie systemu.
2.1.4 Weryfikacja statusu SSH
Aby sprawdzić, czy serwer SSH działa, użyj:
systemctl status ssh
Jeśli zobaczysz wyjście podobne do poniższego, SSH działa prawidłowo:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago
Jeśli zobaczysz inactive (dead) lub failed, uruchom usługę ręcznie:
sudo systemctl start ssh
2.2 Konfiguracja zapory (UFW)
Ubuntu udostępnia ufw (Uncomplicated Firewall) do prostego zarządzania zaporą. Musisz skonfigurować UFW, aby zezwolić na połączenia SSH.
2.2.1 Sprawdzanie statusu UFW
Sprawdź aktualny stan zapory, używając:
sudo ufw status
Przykładowe wyjście (gdy UFW jest wyłączone):
Status: inactive
Przykładowe wyjście (gdy UFW jest włączone):
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2.2.2 Zezwalanie na ruch SSH
Aby zezwolić na połączenia SSH na domyślnym porcie 22, uruchom:
sudo ufw allow ssh
Alternatywnie, możesz podać port explicite:
sudo ufw allow 22/tcp
2.2.3 Włączanie UFW
Jeśli UFW jest wyłączone, włącz je poleceniem:
sudo ufw enable
Przed włączeniem UFW upewnij się, że ruch SSH jest dozwolony, w przeciwnym razie możesz się wykluczyć.
2.2.4 Weryfikacja ustawień UFW
Sprawdź, czy reguły zapory zostały poprawnie zastosowane:
sudo ufw status verbose
Przykładowe wyjście:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Jeśli widzisz to, SSH jest dozwolone przez zaporę ogniową.
2.3 Łączenie się z SSH
Po uruchomieniu serwera SSH możesz połączyć się z komputera klienckiego.
2.3.1 Łączenie z Linux/macOS
Na Linuxie lub macOS otwórz terminal i uruchom:
ssh username@server-ip-address
Przykład:
ssh user@192.168.1.100
Przy pierwszym połączeniu możesz zobaczyć ostrzeżenie bezpieczeństwa takie jak to:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?
Wpisz yes i naciśnij Enter, aby kontynuować.
2.3.2 Łączenie z Windows
Na Windowsie możesz użyć **PowerShell** lub **PuTTY** do połączenia przez SSH. Używanie PowerShell Windows 10 i nowsze zawierają klienta SSH w PowerShell. Połącz się za pomocą:
ssh username@server-ip-address
Używanie PuTTY
- Pobierz i zainstaluj PuTTY ze oficjalnej strony .
- Otwórz PuTTY i wprowadź adres IP serwera w
Host Name (or IP address). - Ustaw
Connection typenaSSHi kliknijOpen. - Wprowadź nazwę użytkownika i hasło, aby się połączyć.
3. Ulepszanie bezpieczeństwa SSH
SSH to potężne narzędzie do zdalnego dostępu, ale pozostawienie go z domyślnymi ustawieniami może stanowić ryzyko bezpieczeństwa. Atakujący często celują w serwery SSH za pomocą ataków brute force lub skanowania portów. Aby stworzyć bardziej bezpieczne środowisko SSH, konieczne jest zastosowanie odpowiednich konfiguracji bezpieczeństwa.
3.1 Wyłączanie logowania root
Domyślnie Ubuntu może pozwalać na logowanie root przez SSH. Ponieważ konto root ma pełne przywileje systemowe, jest to częsty cel dla atakujących. Wyłączenie logowania root i używanie zwykłego konta użytkownika zamiast tego znacząco poprawia bezpieczeństwo.
3.1.1 Kroki konfiguracji
- Edytuj plik konfiguracyjny SSH
/etc/ssh/sshd_config.sudo nano /etc/ssh/sshd_config
- Znajdź następującą linię i zmień ją na
PermitRootLogin no.PermitRootLogin no
- Zapisz plik i zrestartuj usługę SSH.
sudo systemctl restart ssh
- Sprawdź, czy ustawienie zostało zastosowane.
sudo grep PermitRootLogin /etc/ssh/sshd_config
Jeśli wynik pokazuje PermitRootLogin no, ustawienie zostało pomyślnie zastosowane.
3.2 Wyłączanie uwierzytelniania hasłem i włączanie uwierzytelniania kluczem publicznym
Używanie uwierzytelniania kluczem publicznym jest znacznie bezpieczniejsze niż poleganie na uwierzytelnianiu hasłem. Z uwierzytelnianiem kluczem publicznym nie musisz wprowadzać hasła, co zmniejsza ryzyko ataków brute force.
3.2.1 Generowanie pary kluczy SSH
Na swoim lokalnym PC wygeneruj parę kluczy SSH:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
To utworzy dwa pliki:
- Klucz prywatny (
id_rsa) → **Przechowuj to na swoim lokalnym PC (nigdy nie udostępniaj publicznie)**. - Klucz publiczny (
id_rsa.pub) → **Skopiuj to na serwer**.
3.2.2 Kopiowanie klucza publicznego na serwer
Użyj następującego polecenia, aby skopiować swój klucz publiczny na serwer:
ssh-copy-id username@server-ip-address
3.2.3 Wyłączanie uwierzytelniania hasłem
Edytuj plik konfiguracyjny SSH:
sudo nano /etc/ssh/sshd_config
Znajdź następującą linię i zmień ją na:
PasswordAuthentication no
Zrestartuj SSH, aby zastosować zmiany:
sudo systemctl restart ssh
3.3 Ograniczanie dostępu SSH do określonych użytkowników
Aby zwiększyć bezpieczeństwo, możesz ograniczyć dostęp SSH do określonych użytkowników.
3.3.1 Kroki konfiguracji
- Otwórz plik konfiguracyjny SSH.
sudo nano /etc/ssh/sshd_config
- Dodaj następującą linię, określając dozwolonych użytkowników.
AllowUsers user1 user2
- Zrestartuj SSH, aby zastosować zmiany.
sudo systemctl restart ssh
3.4 Zmiana portu SSH
Domyślny port SSH (22) jest często atakowany przez atakujących. Zmiana go na niestandardowy port może zmniejszyć ryzyko automatycznych ataków.
3.4.1 Kroki konfiguracji
- Otwórz plik konfiguracyjny SSH.
sudo nano /etc/ssh/sshd_config
- Znajdź następującą linię i zmień ją na niestandardowy port (np.
2200).Port 2200
- Zapisz plik i uruchom ponownie SSH.
sudo systemctl restart ssh
3.4.2 Aktualizacja ustawień zapory
Po zmianie portu SSH, zezwól na nowy port w UFW:
sudo ufw allow 2200/tcp
Sprawdź ustawienia:
sudo ufw status
3.5 Zapobieganie atakom brute force przy użyciu Fail2Ban
Fail2Ban to narzędzie, które wykrywa nieudane próby logowania SSH i tymczasowo blokuje atakujący adres IP.
3.5.1 Instalacja Fail2Ban
sudo apt install fail2ban -y
3.5.2 Tworzenie pliku konfiguracyjnego
Skopiuj domyślny plik konfiguracyjny:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Edytuj plik konfiguracyjny:
sudo nano /etc/fail2ban/jail.local
Zmodyfikuj sekcję SSH w następujący sposób:
[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600
3.5.3 Restartowanie Fail2Ban
Zrestartuj Fail2Ban, aby zastosować zmiany:
sudo systemctl restart fail2ban
3.5.4 Sprawdzanie listy zbanowanych
Aby sprawdzić, które IP są zbanowane:
sudo fail2ban-client status sshd
Podsumowanie
W tej sekcji omówiliśmy kluczowe ulepszenia bezpieczeństwa SSH, w tym:
- Wyłączanie logowania jako root
- Wyłączanie uwierzytelniania hasłem i włączanie uwierzytelniania kluczem publicznym
- Ograniczanie dostępu SSH do konkretnych użytkowników
- Zmiana portu SSH
- Używanie Fail2Ban do blokowania ataków brute force
Wdrażając te środki, możesz stworzyć bezpieczniejsze środowisko SSH.
4. Zaawansowana konfiguracja SSH
Po skonfigurowaniu zabezpieczeń SSH możesz skorzystać z zaawansowanych ustawień, aby poprawić użyteczność i bezpieczeństwo. Ta sekcja opisuje zarządzanie ssh.socket w Ubuntu 22.10 i nowszych, tunelowanie SSH (przekierowywanie portów), konfigurowanie wielu portów SSH oraz ograniczanie dostępu SSH do określonych adresów IP.
4.1 Używanie ssh.socket w Ubuntu 22.10 i nowszych
Od Ubuntu 22.10 zarządzanie usługą SSH może przejść z ssh.service na ssh.socket. Pozwala to na dynamiczne uruchamianie SSH w momencie otrzymania żądania połączenia, co zmniejsza zużycie zasobów.
4.1.1 Sprawdzanie statusu ssh.socket
Aby sprawdzić, czy ssh.socket jest włączony, uruchom:
sudo systemctl status ssh.socket
Przykładowy wynik (jeśli włączony):
● ssh.socket - OpenSSH Server Socket
Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
Active: active (listening) since Fri 2025-02-28 12:00:00 UTC
4.1.2 Włączanie lub wyłączanie ssh.socket
Jeśli ssh.socket jest wyłączony, włącz go poleceniem:
sudo systemctl enable --now ssh.socket
Aby powrócić do tradycyjnego ssh.service, wyłącz ssh.socket i włącz ssh.service:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
4.2 Tunelowanie SSH (przekierowywanie portów)
Tunelowanie SSH umożliwia bezpieczną transmisję danych między zdalnym serwerem a lokalnym komputerem, omijając zewnętrzne sieci.
4.2.1 Przekierowywanie portu lokalnego
Przydatne do bezpiecznego dostępu do zdalnych baz danych lub serwerów WWW.
Przykład: Łączenie się ze zdalnym serwerem MySQL (port 3306) z lokalnego komputera
ssh -L 3306:localhost:3306 username@server-ip-address
4.2.2 Przekierowywanie portu zdalnego
Udostępnia lokalną usługę zdalnemu serwerowi przez SSH.
Przykład: Przekierowanie lokalnego serwera WWW (port 80) na port 8080 na zdalnym serwerze
ssh -R 8080:localhost:80 username@server-ip-address
4.2.3 Dynamiczne przekierowywanie portu
Przekształca SSH w proxy SOCKS do anonimowego przeglądania sieci.
Przykład: Tworzenie proxy SOCKS na lokalnym porcie 1080
ssh -D 1080 username@server-ip-address
4.3 Nasłuchiwanie na wielu portach SSH
Domyślnie SSH nasłuchuje na jednym porcie (port 22). Konfiguracja wielu portów zapewnia większą elastyczność dostępu.
4.3.1 Kroki konfiguracji
- Edytuj plik konfiguracyjny SSH.
sudo nano /etc/ssh/sshd_config
- Dodaj wiele wpisów portów.
Port 22 Port 2200
- Zrestartuj SSH.
sudo systemctl restart ssh
- Zezwól na nowy port w zaporze.
sudo ufw allow 2200/tcp
4.4 Ograniczanie dostępu SSH do określonych adresów IP
Aby zwiększyć bezpieczeństwo, możesz ograniczyć dostęp SSH do określonych adresów IP.
4.4.1 Konfigurowanie /etc/hosts.allow
Zezwól na dostęp SSH tylko z wybranych adresów IP, edytując:
sudo nano /etc/hosts.allow
Dodaj następującą linię (zastąp 192.168.1.100 dozwolonym adresem IP):
sshd: 192.168.1.100
4.4.2 Konfigurowanie /etc/hosts.deny
Aby domyślnie zablokować wszystkie inne adresy IP:
sudo nano /etc/hosts.deny
sshd: ALL
To zapewnia, że tylko adresy IP wymienione w hosts.allow mogą uzyskać dostęp do SSH.
Podsumowanie
Ta sekcja obejmowała zaawansowane ustawienia SSH, w tym:
- Zarządzanie
ssh.socketw Ubuntu 22.10 i nowszych - Używanie tunelowania SSH (przekierowywanie portów) dla bezpiecznych połączeń
- Nasłuchiwanie na wielu portach SSH
- Ograniczanie dostępu SSH do określonych adresów IP
Stosowanie tych ustawień poprawia bezpieczeństwo i użyteczność SSH.
5. Rozwiązywanie problemów z SSH
Nawet przy prawidłowej konfiguracji mogą wystąpić problemy z SSH. Ta sekcja zawiera rozwiązania typowych problemów z SSH.
5.1 Nie można połączyć się z SSH
Jeśli otrzymujesz błąd Connection refused lub przekroczenie limitu czasu, sprawdź następujące elementy.
5.1.1 Usługa SSH nie działa
Sprawdź status usługi SSH:
sudo systemctl status ssh
Rozwiązanie:
- Jeśli
Active: inactive (dead)lubfailed, uruchom ponownie SSH.sudo systemctl restart ssh
- Włącz automatyczne uruchamianie SSH.
sudo systemctl enable ssh
5.1.2 Zapora blokuje SSH
Upewnij się, że SSH jest dozwolone w UFW:
sudo ufw status
Rozwiązanie: Jeśli SSH nie jest dozwolone:
sudo ufw allow 22/tcp
Jeśli używasz niestandardowego portu:
sudo ufw allow 2200/tcp
5.2 Błędy uwierzytelniania
Jeśli SSH odrzuca próby logowania, sprawdź następujące elementy:
5.2.1 Nieprawidłowa nazwa użytkownika lub hasło
Upewnij się, że używasz prawidłowej nazwy użytkownika:
ssh username@server-ip-address
5.2.2 Problemy z uwierzytelnianiem kluczem publicznym
Sprawdź, czy Twój klucz publiczny jest poprawnie zapisany w ~/.ssh/authorized_keys.
cat ~/.ssh/authorized_keys
5.2.3 Nieprawidłowe uprawnienia
Upewnij się, że katalog i pliki SSH mają prawidłowe uprawnienia:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Podsumowanie
Ta sekcja obejmowała typowe problemy z SSH i ich rozwiązania, w tym:
- Sprawdzanie, czy SSH działa
- Upewnianie się, że zapora nie blokuje SSH
- Naprawianie problemów z uwierzytelnianiem
Użyj tych kroków rozwiązywania problemów, aby szybko rozwiązać problemy z połączeniem SSH.
6. FAQ (Najczęściej zadawane pytania)
Ta sekcja odpowiada na typowe pytania związane z SSH oraz rozwiązania, które poprawią Twoje doświadczenia z SSH przy zachowaniu bezpieczeństwa.
6.1 Jak zapobiec timeoutom SSH?
Jeśli połączenia SSH rozłączają się po pewnym czasie nieaktywności, wypróbuj następujące ustawienia.
6.1.1 Konfiguracja po stronie serwera
Edytuj /etc/ssh/sshd_config i dodaj:
ClientAliveInterval 60
ClientAliveCountMax 3
Zrestartuj SSH, aby zastosować zmiany:
sudo systemctl restart ssh
6.1.2 Konfiguracja po stronie klienta
Zmodyfikuj lokalny plik konfiguracyjny SSH ~/.ssh/config:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
6.2 Co zrobić, jeśli zapomnę hasła SSH?
6.2.1 Jeśli masz fizyczny dostęp do serwera
- Uruchom w trybie odzyskiwania poprzez menu GRUB.
- Zresetuj hasło przy użyciu następującego polecenia:
passwd username
- Zrestartuj system.
6.2.2 Jeśli nie masz fizycznego dostępu do serwera (np. Cloud VPS)
- Skorzystaj z funkcji konsoli dostawcy chmury, aby uzyskać dostęp do serwera.
- Skonfiguruj uwierzytelnianie kluczem SSH zamiast polegać na hasłach.
6.3 Jak używać SSH w systemie Windows?
6.3.1 Korzystanie z PowerShell
Windows 10 i nowsze zawierają wbudowanego klienta SSH. Otwórz PowerShell i uruchom:
ssh username@server-ip-address
6.3.2 Korzystanie z PuTTY
- Pobierz i zainstaluj PuTTY .
- Wprowadź adres IP serwera w polu
Host Name (or IP address). - Wybierz
SSHjako typ połączenia i kliknijOpen. - Zaloguj się używając swojej nazwy użytkownika i hasła.
6.4 Jak skonfigurować SSH w Ubuntu WSL (Windows Subsystem for Linux)?
Aby włączyć SSH w WSL, wykonaj następujące kroki.
6.4.1 Instalacja serwera SSH
sudo apt update && sudo apt install openssh-server
6.4.2 Konfiguracja SSH
Edytuj /etc/ssh/sshd_config i włącz uwierzytelnianie hasłem:
PasswordAuthentication yes
Ponieważ WSL domyślnie nie używa systemd, uruchom SSH ręcznie:
sudo service ssh start
6.5 Jakie dodatkowe środki bezpieczeństwa powinienem podjąć?
6.5.1 Instalacja Fail2Ban
Zapobiegaj atakom brute‑force, instalując Fail2Ban:
sudo apt install fail2ban -y
Edytuj plik konfiguracyjny /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
Zrestartuj Fail2Ban:
sudo systemctl restart fail2ban
6.5.2 Zmiana portu SSH
Zmień /etc/ssh/sshd_config, aby zmienić domyślny port SSH:
Port 2200
Zrestartuj SSH i zaktualizuj ustawienia zapory:
sudo ufw allow 2200/tcp
6.6 Jak monitorować logi SSH w czasie rzeczywistym?
Aby wyświetlać logi SSH w czasie rzeczywistym, użyj:
sudo journalctl -u ssh -f
Aby sprawdzić wcześniejsze logi:
sudo cat /var/log/auth.log | grep ssh
6.7 Jak ułatwić korzystanie z SSH?
6.7.1 Używanie .ssh/config do łatwego logowania
Zapisz często używane połączenia SSH w ~/.ssh/config:
Host myserver
HostName 192.168.1.100
User user
Port 2200
IdentityFile ~/.ssh/id_rsa
Teraz możesz połączyć się używając:
ssh myserver
6.7.2 Używanie ssh-agent aby uniknąć wielokrotnego wpisywania hasła
Uruchom:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
To umożliwia połączenia SSH bez wprowadzania hasła przy każdej próbie.
Podsumowanie
Ta sekcja zawierała odpowiedzi na typowe pytania dotyczące SSH, obejmując:
- Zapobieganie timeoutom SSH
- Odzyskiwanie po zapomnianym haśle
- Używanie SSH w Windows i WSL
- Stosowanie dodatkowych środków bezpieczeństwa
- Monitorowanie logów SSH
- Ułatwianie korzystania z SSH
Stosując te wskazówki, możesz stworzyć bezpieczne i wydajne środowisko SSH do zdalnego zarządzania serwerami.
Powiązane artykuły
1. Wstęp Korzystając z SSH na Ubuntu, możesz bezpiecznie uzyskać dostęp i zarządzać swoim serwerem lub komputerem PC zda[…]


![Jak sprawdzić, zmienić i przełączyć wersje Pythona w Ubuntu [Kompletny przewodnik]](https://www.linux.digibeatrix.com/wp-content/uploads/2025/02/36b84d2ec91b0993972a29a44e5757c7-375x214.webp)
![Jak sprawdzić wersję CUDA w Ubuntu [Łatwy przewodnik po poleceniach]](https://www.linux.digibeatrix.com/wp-content/uploads/2025/03/7ad0e7fe124605dc3cd746565dc1d108-375x214.webp)