🔒 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:
- Instalacja OpenSSH - prosty proces z wykorzystaniem menedżera pakietów apt.
- Podstawowa konfiguracja - dostosowanie pliku konfiguracyjnego sshd_config dla lepszego bezpieczeństwa.
- Autoryzacja kluczem - wdrożenie logowania za pomocą par kluczy zamiast haseł.
- 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:
- Szyfrowanie danych - cała komunikacja jest zaszyfrowana
- Silne uwierzytelnianie - wsparcie dla różnych metod uwierzytelniania
- Integralność danych - ochrona przed modyfikacją danych w trakcie transmisji
- Przekazywanie protokołów - bezpieczne tunelowanie innych protokołów
- 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:
- Lokalizację zapisu kluczy (domyślnie
.ssh/id_rsa
w katalogu domowym) - 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:
- Instalację OpenSSH na Ubuntu 20.04 - prosty proces przy użyciu apt
- Podstawową konfigurację bezpieczeństwa - zmiana portu, ograniczenie dostępu, limity czasowe
- Uwierzytelnianie kluczem SSH - bezpieczniejszą alternatywę dla haseł
- Zaawansowane zabezpieczenia - Fail2Ban, firewall, 2FA
- Optymalizację wydajności - utrzymywanie połączeń, kompresja danych
- 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?
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