Kompletny przewodnik po konfiguracji SSH w Ubuntu | Instalacja, zwiększanie bezpieczeństwa i rozwiązywanie problemów

目次

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

  1. Pobierz i zainstaluj PuTTY ze oficjalnej strony .
  2. Otwórz PuTTY i wprowadź adres IP serwera w Host Name (or IP address) .
  3. Ustaw Connection type na SSH i kliknij Open .
  4. 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

  1. Edytuj plik konfiguracyjny SSH /etc/ssh/sshd_config .
    sudo nano /etc/ssh/sshd_config
    
  1. Znajdź następującą linię i zmień ją na PermitRootLogin no .
    PermitRootLogin no
    
  1. Zapisz plik i zrestartuj usługę SSH.
    sudo systemctl restart ssh
    
  1. 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

  1. Otwórz plik konfiguracyjny SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Dodaj następującą linię, określając dozwolonych użytkowników.
    AllowUsers user1 user2
    
  1. 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

  1. Otwórz plik konfiguracyjny SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Znajdź następującą linię i zmień ją na niestandardowy port (np. 2200 ).
    Port 2200
    
  1. 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

  1. Edytuj plik konfiguracyjny SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Dodaj wiele wpisów portów.
    Port 22
    Port 2200
    
  1. Zrestartuj SSH.
    sudo systemctl restart ssh
    
  1. 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.socket w 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) lub failed, 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

  1. Uruchom w trybie odzyskiwania poprzez menu GRUB.
  2. Zresetuj hasło przy użyciu następującego polecenia:
    passwd username
    
  1. 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

  1. Pobierz i zainstaluj PuTTY .
  2. Wprowadź adres IP serwera w polu Host Name (or IP address) .
  3. Wybierz SSH jako typ połączenia i kliknij Open .
  4. 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

Related

1. Wstęp Korzystając z SSH na Ubuntu, możesz bezpiecznie uzyskać dostęp i zarządzać swoim serwerem lub komputerem PC zda[…]