🔒 Jak zainstalować i skonfigurować serwer OpenSSH na Ubuntu 20.04

SSH (Secure Shell) to podstawowy protokół używany do bezpiecznego zarządzania serwerami zdalnymi. Umożliwia szyfrowane połączenie, dzięki czemu administracja serwerem staje się zarówno wygodna, jak i bezpieczna. Ten przewodnik przeprowadzi Cię przez proces instalacji i konfiguracji serwera OpenSSH na Ubuntu 20.04, z naciskiem na najlepsze praktyki bezpieczeństwa, które pomogą ochronić Twój serwer przed nieautoryzowanym dostępem.

⚡ Ekspresowe Podsumowanie:

  1. Instalacja OpenSSH - prosty proces z wykorzystaniem menedżera pakietów apt.
  2. Podstawowa konfiguracja - dostosowanie pliku konfiguracyjnego sshd_config dla lepszego bezpieczeństwa.
  3. Autoryzacja kluczem - wdrożenie logowania za pomocą par kluczy zamiast haseł.
  4. Zaawansowane zabezpieczenia - konfiguracja firewalla, 2FA i innych mechanizmów ochronnych.

🗺️ Spis Treści - Twoja Mapa Drogowa


📋 Podstawowe informacje o SSH i OpenSSH

Przed przystąpieniem do instalacji, warto zrozumieć czym jest SSH i OpenSSH oraz dlaczego są tak istotne w administracji serwerami.

Czym jest SSH?

SSH (Secure Shell) to protokół sieciowy, który umożliwia:

  • Bezpieczny zdalny dostęp do serwerów i urządzeń
  • Szyfrowaną komunikację między klientem a serwerem
  • Tunelowanie innych protokołów (np. FTP, HTTP)
  • Przekazywanie portów (port forwarding) dla zwiększenia bezpieczeństwa
  • Zdalne wykonywanie poleceń bez konieczności logowania interaktywnego

Czym jest OpenSSH?

OpenSSH to najpopularniejsza, darmowa implementacja protokołu SSH, która:

  • Jest dostępna dla większości systemów operacyjnych
  • Obsługuje SSH w wersji 2 (bezpieczniejsza niż SSH w wersji 1)
  • Oferuje zaawansowane funkcje bezpieczeństwa
  • Jest rozwijana przez społeczność OpenBSD
  • Stała się standardem de facto w świecie serwerów Linux/Unix

Dlaczego warto używać SSH?

W przeciwieństwie do starszych protokołów takich jak Telnet czy rsh, SSH zapewnia:

  1. Szyfrowanie danych - cała komunikacja jest zaszyfrowana
  2. Silne uwierzytelnianie - wsparcie dla różnych metod uwierzytelniania
  3. Integralność danych - ochrona przed modyfikacją danych w trakcie transmisji
  4. Przekazywanie protokołów - bezpieczne tunelowanie innych protokołów
  5. Kompresję danych - opcjonalna kompresja dla wolniejszych łączy

🛠️ Instalacja serwera OpenSSH na Ubuntu 20.04

Proces instalacji OpenSSH na Ubuntu 20.04 jest prosty i wymaga wykonania kilku poleceń w terminalu.

Przygotowanie systemu

Przed instalacją, warto zaktualizować listy pakietów i sam system:

# Aktualizacja list pakietów
sudo apt update

# Aktualizacja zainstalowanych pakietów
sudo apt upgrade -y

Instalacja pakietu openssh-server

OpenSSH Server można zainstalować za pomocą menedżera pakietów apt:

# Instalacja serwera OpenSSH
sudo apt install openssh-server -y

Weryfikacja instalacji

Po zainstalowaniu, warto sprawdzić, czy serwer działa poprawnie:

# Sprawdzenie statusu usługi SSH
sudo systemctl status ssh

Poprawnie działający serwer SSH powinien wyświetlić status "active (running)", podobny do poniższego:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-04-27 14:23:45 UTC; 35s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1252 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1253 (sshd)
      Tasks: 1 (limit: 4665)
     Memory: 6.8M
     CGroup: /system.slice/ssh.service
             └─1253 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Zarządzanie usługą SSH

Podstawowe polecenia do zarządzania usługą SSH:

# Zatrzymanie serwera SSH
sudo systemctl stop ssh

# Uruchomienie serwera SSH
sudo systemctl start ssh

# Restart serwera SSH
sudo systemctl restart ssh

# Załadowanie ponowne konfiguracji bez restartu
sudo systemctl reload ssh

# Włączenie autostartu przy uruchomieniu systemu
sudo systemctl enable ssh

# Wyłączenie autostartu
sudo systemctl disable ssh

✨ Pro Tip: Po każdej zmianie konfiguracji, warto sprawdzić jej poprawność poleceniem sudo sshd -t zanim zrestartujemy usługę. Pozwoli to uniknąć potencjalnego odcięcia dostępu do serwera przez błędną konfigurację.

🔧 Podstawowa konfiguracja serwera SSH

Po zainstalowaniu serwera OpenSSH, należy dostosować jego konfigurację, aby zwiększyć bezpieczeństwo i dostosować działanie do własnych potrzeb.

Lokalizacja pliku konfiguracyjnego

Główny plik konfiguracyjny serwera SSH znajduje się w:

/etc/ssh/sshd_config

Przed edycją konfiguracji, zawsze warto utworzyć kopię zapasową:

# Utworzenie kopii zapasowej pliku konfiguracyjnego
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Podstawowe ustawienia bezpieczeństwa

Otwórz plik konfiguracyjny do edycji:

sudo nano /etc/ssh/sshd_config

Oto najważniejsze ustawienia, które warto zmodyfikować:

1. Zmiana domyślnego portu

Domyślnie SSH działa na porcie 22. Zmiana na inny port może zmniejszyć liczbę automatycznych ataków:

# Zmiana domyślnego portu (wybierz numer pomiędzy 1024 a 65535)
Port 2222

2. Ograniczenie logowania jako root

Wyłączenie bezpośredniego logowania na konto root:

# Wyłączenie logowania jako root
PermitRootLogin no

3. Ograniczenie wersji protokołu

Upewnij się, że używana jest tylko nowsza, bezpieczniejsza wersja protokołu SSH:

# Używaj tylko protokołu SSH w wersji 2
Protocol 2

4. Ustawienie limitów czasowych

Konfiguracja limitów czasowych pomaga w automatycznym rozłączaniu nieaktywnych sesji:

# Limit czasu bezczynności (w sekundach)
ClientAliveInterval 300
ClientAliveCountMax 2

Powyższe ustawienia spowodują rozłączenie sesji po 10 minutach bezczynności (300 sekund * 2).

5. Ograniczenie dostępu dla określonych użytkowników

Można ograniczyć dostęp SSH tylko do określonych użytkowników:

# Zezwól na logowanie tylko określonym użytkownikom
AllowUsers admin webmaster john

lub wykluczyć określonych użytkowników:

# Zabroń logowania określonym użytkownikom
DenyUsers guest test nobody

Po wprowadzeniu zmian, zapisz plik (w nano: Ctrl+O, Enter, Ctrl+X) i zrestartuj usługę SSH:

# Sprawdzenie poprawności konfiguracji
sudo sshd -t

# Restart usługi SSH
sudo systemctl restart ssh

Uwaga: Jeśli zmieniłeś port SSH, pamiętaj, że przy kolejnych połączeniach będziesz musiał określić ten port za pomocą opcji -p:

ssh użytkownik@adres-serwera -p 2222

🔑 Konfiguracja uwierzytelniania kluczem SSH

Jednym z najbezpieczniejszych sposobów uwierzytelniania w SSH jest używanie par kluczy zamiast haseł. Ten mechanizm wykorzystuje kryptografię asymetryczną, gdzie:

  • Klucz prywatny - przechowywany na komputerze klienta, musi być trzymany w tajemnicy
  • Klucz publiczny - umieszczany na serwerze, używany do weryfikacji

Generowanie pary kluczy SSH

Na swoim lokalnym komputerze (nie na serwerze) wygeneruj parę kluczy:

# Generowanie pary kluczy RSA o długości 4096 bitów
ssh-keygen -t rsa -b 4096 -C "twój_email@domena.pl"

Podczas generowania kluczy, zostaniesz poproszony o:

  1. Lokalizację zapisu kluczy (domyślnie .ssh/id_rsa w katalogu domowym)
  2. Hasło zabezpieczające klucz prywatny (opcjonalne, ale zalecane)

Kopiowanie klucza publicznego na serwer

Istnieje kilka sposobów na przesłanie klucza publicznego na serwer:

Metoda 1: Użycie ssh-copy-id (najłatwiejsza)

# Kopiowanie klucza na serwer SSH
ssh-copy-id -i ~/.ssh/id_rsa.pub użytkownik@adres-serwera

Jeśli zmieniłeś domyślny port SSH, użyj:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 użytkownik@adres-serwera

Metoda 2: Manualne kopiowanie

Jeśli ssh-copy-id nie jest dostępne, możesz skopiować klucz ręcznie:

# Wyświetl zawartość klucza publicznego
cat ~/.ssh/id_rsa.pub

Następnie połącz się z serwerem, utwórz odpowiedni katalog i plik, a następnie wklej zawartość klucza publicznego:

# Połączenie z serwerem
ssh użytkownik@adres-serwera

# Utworzenie katalogu .ssh jeśli nie istnieje
mkdir -p ~/.ssh

# Utworzenie lub dodanie do pliku authorized_keys
echo "skopiowana_zawartość_klucza_publicznego" >> ~/.ssh/authorized_keys

# Ustawienie odpowiednich uprawnień
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Konfiguracja serwera do używania tylko kluczy SSH

Po skonfigurowaniu logowania kluczem, można wyłączyć logowanie hasłem, aby dodatkowo zabezpieczyć serwer:

# Edycja pliku konfiguracyjnego
sudo nano /etc/ssh/sshd_config

Znajdź i zmodyfikuj lub dodaj następujące linie:

# Wyłączenie uwierzytelniania hasłem
PasswordAuthentication no

# Włączenie uwierzytelniania kluczem publicznym
PubkeyAuthentication yes

Zapisz zmiany i zrestartuj serwer SSH:

sudo systemctl restart ssh

✨ Pro Tip: Przed wyłączeniem logowania hasłem, koniecznie przetestuj logowanie za pomocą klucza w nowej sesji terminala. Unikniesz w ten sposób odcięcia dostępu do serwera!

🛡️ Zaawansowane zabezpieczenia serwera SSH

Oprócz podstawowych konfiguracji, warto wdrożyć dodatkowe zabezpieczenia, aby jeszcze bardziej zwiększyć bezpieczeństwo serwera SSH.

Konfiguracja firewalla (UFW)

Uncomplicated Firewall (UFW) to prosty interfejs dla iptables, który ułatwia konfigurację reguł firewalla:

# Instalacja UFW, jeśli nie jest zainstalowany
sudo apt install ufw -y

# Zezwolenie na połączenia SSH
sudo ufw allow 2222/tcp  # jeśli zmieniliśmy port na 2222, w przeciwnym razie użyj 22/tcp

# Włączenie firewalla
sudo ufw enable

# Sprawdzenie statusu
sudo ufw status

Ograniczenie dostępu SSH do określonych adresów IP

Jeśli łączysz się z serwerem zawsze z tych samych lokalizacji, rozważ ograniczenie dostępu SSH tylko do określonych adresów IP:

# Usunięcie ogólnej reguły dla SSH
sudo ufw delete allow 2222/tcp

# Dodanie reguły pozwalającej na dostęp tylko z określonego adresu IP
sudo ufw allow from 192.168.1.100 to any port 2222

Fail2Ban - ochrona przed atakami brute force

Fail2Ban to narzędzie monitorujące logi i blokujące adresy IP, z których pochodzą nieudane próby logowania:

# Instalacja Fail2Ban
sudo apt install fail2ban -y

# Utworzenie pliku konfiguracyjnego
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Edytuj sekcję [sshd] w pliku konfiguracyjnym:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

Uruchom lub zrestartuj usługę:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Dwuskładnikowe uwierzytelnianie (2FA)

Dla dodatkowej warstwy bezpieczeństwa, możesz skonfigurować uwierzytelnianie dwuskładnikowe:

# Instalacja Google Authenticator
sudo apt install libpam-google-authenticator -y

Uruchom program jako użytkownik (nie root):

google-authenticator

Odpowiedz na pytania zgodnie z preferencjami, a następnie skonfiguruj PAM:

sudo nano /etc/pam.d/sshd

Dodaj na końcu pliku:

auth required pam_google_authenticator.so

Edytuj plik konfiguracyjny SSH:

sudo nano /etc/ssh/sshd_config

Zmień lub dodaj:

# Włączenie uwierzytelniania wieloczynnikowego
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Zrestartuj usługę SSH:

sudo systemctl restart ssh

📋 Optymalizacja wydajności i zarządzanie SSH

Oprócz bezpieczeństwa, warto też zoptymalizować działanie serwera SSH pod kątem wydajności i wygody użytkowania.

Utrzymywanie długotrwałych połączeń

Aby uniknąć przerywania długotrwałych połączeń, można skonfigurować cykliczne wysyłanie pakietów "keep-alive":

W pliku /etc/ssh/sshd_config na serwerze:

# Utrzymanie połączenia
ClientAliveInterval 60
ClientAliveCountMax 3

W pliku ~/.ssh/config na kliencie:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

Kompresja danych

Dla wolniejszych łączy, warto włączyć kompresję danych:

W pliku /etc/ssh/sshd_config na serwerze:

# Włączenie kompresji
Compression yes

Przekazywanie agenta SSH (SSH Agent Forwarding)

Aby ułatwić łączenie się z innymi serwerami za pośrednictwem obecnego połączenia SSH:

# Na kliencie
ssh -A użytkownik@adres-serwera

Lub w pliku ~/.ssh/config:

Host serwer-posredni
    HostName adres-serwera
    User użytkownik
    ForwardAgent yes

Konfiguracja zaawansowanego logowania

Możesz dostosować poziom logowania dla łatwiejszej diagnostyki:

# Poziom logowania (QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG)
LogLevel VERBOSE

Zarządzanie wieloma kluczami SSH

Jeśli używasz różnych kluczy dla różnych serwerów, warto skonfigurować plik ~/.ssh/config na kliencie:

# Domyślne ustawienia dla wszystkich hostów
Host *
    IdentitiesOnly yes
    ServerAliveInterval 60

# Konfiguracja dla konkretnego serwera
Host serwer1
    HostName serwer1.example.com
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_rsa_serwer1

# Konfiguracja dla innego serwera
Host serwer2
    HostName 192.168.1.100
    User webmaster
    Port 2222
    IdentityFile ~/.ssh/id_rsa_serwer2

✨ Pro Tip: Używanie różnych kluczy dla różnych serwerów zwiększa bezpieczeństwo - jeśli jeden klucz zostanie skompromitowany, pozostałe serwery pozostaną bezpieczne.

🔄 Typowe scenariusze użycia SSH

SSH to wszechstronne narzędzie, które może być wykorzystywane na wiele sposobów, nie tylko do logowania na zdalny serwer.

Bezpieczne kopiowanie plików przez SCP

SCP (Secure Copy Protocol) pozwala na bezpieczne kopiowanie plików między serwerami:

# Kopiowanie pliku na serwer
scp /scieżka/do/pliku.txt użytkownik@adres-serwera:/scieżka/docelowa/

# Kopiowanie pliku z serwera
scp użytkownik@adres-serwera:/scieżka/do/pliku.txt /lokalna/ścieżka/

# Kopiowanie całego katalogu
scp -r /lokalny/katalog/ użytkownik@adres-serwera:/zdalny/katalog/

Tunelowanie portów

SSH może tworzyć bezpieczne tunele dla innych usług:

# Lokalny forwarding - dostęp do zdalnej usługi przez port lokalny
# (np. dostęp do zdalnej bazy MySQL)
ssh -L 3306:localhost:3306 użytkownik@adres-serwera

# Zdalny forwarding - udostępnienie lokalnej usługi dla serwera
ssh -R 8080:localhost:80 użytkownik@adres-serwera

# Dynamiczny forwarding (SOCKS proxy)
ssh -D 1080 użytkownik@adres-serwera

Uruchamianie poleceń bez logowania

SSH umożliwia wykonanie pojedynczego polecenia bez pełnego logowania:

# Wykonanie pojedynczego polecenia
ssh użytkownik@adres-serwera "df -h"

# Wykonanie kilku poleceń
ssh użytkownik@adres-serwera "cd /var/www && ls -la && du -sh"

Automatyzacja zadań poprzez SSH

Używając kluczy SSH i skryptów, można automatyzować zadania:

#!/bin/bash
# Przykładowy skrypt do aktualizacji wielu serwerów

SERVERS=("serwer1.example.com" "serwer2.example.com" "serwer3.example.com")

for server in "${SERVERS[@]}"; do
    echo "Aktualizacja serwera $server..."
    ssh admin@$server "sudo apt update && sudo apt upgrade -y"
done

X11 Forwarding - zdalne aplikacje graficzne

SSH umożliwia uruchamianie aplikacji graficznych z serwera na lokalnym ekranie:

# Włączenie X11 Forwarding
ssh -X użytkownik@adres-serwera

# Po zalogowaniu możesz uruchamiać aplikacje graficzne, np.:
firefox

❓ FAQ - Odpowiedzi na Twoje Pytania

Jak sprawdzić, kto jest zalogowany przez SSH na moim serwerze?
Użyj polecenia who lub w, aby zobaczyć listę zalogowanych użytkowników wraz z ich adresami IP i czasem logowania.

Czy mogę zmienić port SSH na liczbę poniżej 1024?
Tak, ale porty poniżej 1024 są tzw. portami uprzywilejowanymi i wymagają uprawnień roota. Zaleca się wybór portu powyżej 1024 do 65535, aby uniknąć konfliktu z istniejącymi usługami.

Jak rozwiązać problem z uprawnieniami kluczy SSH?
Najczęstszym powodem problemów z kluczami SSH są nieprawidłowe uprawnienia. Klucz prywatny (id_rsa) powinien mieć uprawnienia 600 (odczyt/zapis tylko dla właściciela), a katalog .ssh powinien mieć uprawnienia 700. Użyj poleceń:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Jak korzystać z SSH, jeśli mój dostawca internetu blokuje port 22?
Skonfiguruj serwer SSH do nasłuchiwania na alternatywnym porcie, np. 443 (HTTPS), który rzadko jest blokowany:

# W pliku /etc/ssh/sshd_config
Port 443

Następnie połącz się używając -p 443 w poleceniu SSH.

Jak zabezpieczyć klucze SSH przed utratą?
Zawsze przechowuj kopie zapasowe kluczy w bezpiecznym miejscu, najlepiej na zaszyfrowanym nośniku. Możesz także użyć hasła do zabezpieczenia klucza prywatnego podczas jego generowania.

🏁 Podsumowanie - Bezpieczny serwer SSH

Prawidłowo skonfigurowany serwer SSH jest fundamentem bezpiecznej administracji zdalnej. W tym przewodniku omówiliśmy:

  1. Instalację OpenSSH na Ubuntu 20.04 - prosty proces przy użyciu apt
  2. Podstawową konfigurację bezpieczeństwa - zmiana portu, ograniczenie dostępu, limity czasowe
  3. Uwierzytelnianie kluczem SSH - bezpieczniejszą alternatywę dla haseł
  4. Zaawansowane zabezpieczenia - Fail2Ban, firewall, 2FA
  5. Optymalizację wydajności - utrzymywanie połączeń, kompresja danych
  6. Przykłady praktycznego wykorzystania SSH - kopiowanie plików, tunelowanie portów, automatyzacja

Pamiętaj, że bezpieczeństwo to proces, a nie jednorazowe zadanie. Regularne aktualizacje, monitorowanie logów i dostosowywanie konfiguracji do zmieniających się warunków są kluczowe dla utrzymania odpowiedniego poziomu ochrony.

🚀 Potrzebujesz profesjonalnego hostingu z bezpiecznym dostępem SSH?

Sprawdź ofertę serwerów VPS IQHost - dostarczamy niezawodne, wydajne i bezpieczne środowisko z pełnym dostępem SSH. Nasze rozwiązania są idealne zarówno dla początkujących, jak i doświadczonych administratorów.

Bezpieczeństwo i wygoda administracji idą w parze z profesjonalnym hostingiem - wybierz IQHost dla swojego następnego projektu.

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy