SSP1XNE
Laboratorium/Serwer SSH

LAB 04 · ADMINISTRACJA LINUX

Uruchom SSH.
Zarządzaj serwerem zdalnie.

Od pierwszego połączenia do logowania kluczem.
Zainstaluj usługę, skonfiguruj dostęp i sprawdź każdy etap.

Ubuntu Server 24.04 LTSLinux / Windows 1145–60 minut + ćwiczenie dodatkowe
Zacznij zadanie ↓
Cel zadania

Połączysz się z serwerem jako uczen, potwierdzisz jego tożsamość, skonfigurujesz logowanie kluczem i prześlesz plik szyfrowanym połączeniem.

01 / LABORATORIUM SSH

Poznaj SSH i przygotuj stanowisko.

SSH (Secure Shell) tworzy szyfrowane połączenie ze zdalnym komputerem. Klient ssh działa na stacji roboczej, a serwer sshd przyjmuje połączenia i uruchamia sesję po uwierzytelnieniu użytkownika. Domyślny port to 22/TCP.

KLIENTLinux / Windows 1110.0.0.20/24Terminal lub PowerShell
↔
SZYFROWANE POŁĄCZENIESSH · TCP 22sesja / pliki / polecenia
↔
SERWERUbuntu Server 24.04 LTS10.0.0.10/24OpenSSH · konto uczen

Pracuj na własnej maszynie laboratoryjnej. Potrzebujesz konta z sudo, dostępu do konsoli serwera oraz Internetu do instalacji pakietów. Obie maszyny powinny mieć połączenie w tej samej sieci. W maszynach wirtualnych użyj wspólnej sieci wewnętrznej lub host-only; dostęp do Internetu możesz zapewnić drugim interfejsem NAT.

Adresy są przykładowe. Ustaw je zgodnie ze swoją pracownią; instrukcję znajdziesz w lekcji o Netplanie. Konto uczen jest zwykłym kontem przeznaczonym do ćwiczeń.

SERWER · ustal adres i wersję systemu
ip -br address
ip route
cat /etc/os-release
Zachowaj drogę powrotu

Przed zmianami w dostępie pozostaw otwartą sesję i konsolę serwera. Nową konfigurację sprawdzaj w drugim terminalu. Nie zamykaj działającej sesji, dopóki nowe logowanie się nie powiedzie.

02 / LABORATORIUM SSH

Zainstaluj serwer i sprawdź port.

SERWER · instalacja
sudo apt update
sudo apt install openssh-server
systemctl status ssh.socket ssh.service --no-pager
sudo ss -ltnp 'sport = :22'

Wynik ss powinien zawierać LISTEN na porcie 22. W Ubuntu 24.04 port może obsługiwać ssh.socket; usługa uruchamia się po nadejściu połączenia. Sam stan inactive usługi przed pierwszym połączeniem nie rozstrzyga, czy SSH działa.

Jeśli nie ma nasłuchu, sprawdź komunikaty w systemctl status. W instalacji korzystającej z aktywacji gniazdem uruchom:

SERWER · tryb ssh.socket
sudo systemctl enable --now ssh.socket

Jeśli system jest skonfigurowany do klasycznego trybu usługi i nie używa ssh.socket, uruchom sudo systemctl enable --now ssh.service. Zachowaj istniejący tryb pracy.

Przygotuj konto i zaporę.

Jeżeli konto uczen jeszcze nie istnieje, utwórz je i ustaw własne hasło. Do zwykłego logowania SSH nie potrzebuje uprawnień administratora.

SERWER · konto laboratoryjne
id uczen
# Tylko jeśli konto nie istnieje:
sudo adduser uczen
SERWER · sprawdź UFW i dodaj regułę dla klienta
sudo ufw status verbose
sudo ufw allow from 10.0.0.20 to any port 22 proto tcp

Jeśli UFW jest nieaktywny, sama reguła nie włącza filtrowania. Włączenie sudo ufw enable wykonuj przy konsoli dopiero po dodaniu reguł dla wszystkich potrzebnych usług. Sprawdź również zaporę maszyny wirtualnej lub dostawcy serwera.

03 / LABORATORIUM SSH

Wykonaj pierwsze logowanie.

Na Linuxie klienta doinstalujesz poleceniem sudo apt install openssh-client. W Windows 11 otwórz PowerShell i sprawdź ssh -V. Jeżeli polecenia brakuje, dodaj funkcję opcjonalną „Klient OpenSSH”.

KLIENT · Linux lub PowerShell
ssh uczen@10.0.0.10

Przy pierwszym połączeniu klient pokaże odcisk klucza hosta. Porównaj go z wynikiem uzyskanym bezpośrednio przy konsoli serwera:

SERWER · odcisk klucza hosta Ed25519
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Porównuj ten sam typ klucza i cały odcisk SHA256:…. Dopiero po potwierdzeniu wpisz yes i hasło konta uczen. Podczas wpisywania hasła terminal nie pokazuje znaków — to normalne.

PO ZALOGOWANIU · polecenia wykonywane na serwerze
whoami
hostname
ip -br address
exit

Oczekiwany wynik whoami to uczen, a nazwa hosta powinna należeć do serwera. exit zamyka sesję i wraca do terminala klienta.

04 / LABORATORIUM SSH

Ustaw podstawowe zasady dostępu.

Konfiguracja serwera znajduje się w /etc/ssh/sshd_config i dołączanych plikach /etc/ssh/sshd_config.d/*.conf. Konfiguracja klienta ~/.ssh/config ma inną rolę: zapisuje parametry połączeń.

Zachowaj kopię konfiguracji w katalogu domowym administratora. Nie umieszczaj kopii z rozszerzeniem .conf w katalogu dołączanym.

SERWER · kopia i edycja
sudo tar -czf "$HOME/ssh-config-$(date +%Y%m%d-%H%M%S).tar.gz" /etc/ssh/sshd_config /etc/ssh/sshd_config.d
sudo nano /etc/ssh/sshd_config.d/00-laboratorium.conf
/etc/ssh/sshd_config.d/00-laboratorium.conf · etap nauki
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication yes
KbdInteractiveAuthentication no
PermitEmptyPasswords no
MaxAuthTries 3
X11Forwarding no

Na tym etapie hasło pozostaje dostępne do nauki i instalacji klucza. PermitRootLogin no wyłącza bezpośrednie logowanie roota, a MaxAuthTries ogranicza próby w jednym połączeniu. Nie blokuje kolejnych połączeń.

OpenSSH dla większości opcji przyjmuje pierwszą odczytaną wartość. Sprawdź położenie Include w pliku głównym, wcześniejsze pliki i ewentualne bloki Match. Rozstrzygający jest wynik sshd -T.

SERWER · walidacja i ustawienia dla klienta
sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T -C user=uczen,host=stacja,addr=10.0.0.20 | grep -E '^(permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|maxauthtries|x11forwarding) '

sshd -t przy poprawnej składni kończy się bez komunikatu. Jeśli wystąpi błąd, popraw go przed restartem. Gdy wyniki są zgodne z celem, zastosuj ustawienia:

SERWER · zastosuj, a potem sprawdź drugi terminal
sudo systemctl restart ssh.service

W drugim terminalu ponów ssh uczen@10.0.0.10. Zmiany zasad uwierzytelniania nie wymagają zmiany portu ani restartowania gniazda.

05 / LABORATORIUM SSH

Przejdź od hasła do klucza.

Para kluczy składa się z klucza prywatnego na kliencie i publicznego na serwerze. Plik .pub można przekazać administratorowi. Klucz prywatny zachowaj u siebie i zabezpiecz frazą hasłową.

KLIENT LINUX · nowa para o osobnej nazwie
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_lab -C "uczen-laboratorium"
ssh-copy-id -i ~/.ssh/id_ed25519_lab.pub uczen@10.0.0.10

Nie nadpisuj istniejącego klucza. Jeżeli podana nazwa już istnieje, użyj innej albo świadomie wykorzystaj istniejącą parę.

KLIENT WINDOWS · PowerShell
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_ed25519_lab" -C "uczen-laboratorium"
scp "$env:USERPROFILE\.ssh\id_ed25519_lab.pub" uczen@10.0.0.10:lab-key.pub
ssh uczen@10.0.0.10

Po zalogowaniu z Windowsa dopisz przesłany klucz do konta uczen. Nie zastępuj wcześniejszych wpisów:

SERWER · sesja użytkownika uczen
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat ~/lab-key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Udowodnij, że działa klucz.

W nowym terminalu klienta wymuś uwierzytelnienie publicznym kluczem. Prośba o frazę klucza prywatnego jest prawidłowa; hasło konta serwera nie powinno być potrzebne.

KLIENT LINUX · test bez powrotu do hasła
ssh -i ~/.ssh/id_ed25519_lab -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no -o KbdInteractiveAuthentication=no uczen@10.0.0.10
KLIENT WINDOWS · ten sam test
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_lab" -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no -o KbdInteractiveAuthentication=no uczen@10.0.0.10

Dopiero po udanym teście edytuj 00-laboratorium.conf: zmień PasswordAuthentication yes na PasswordAuthentication no, pozostaw KbdInteractiveAuthentication no. Sprawdź sshd -t i sshd -T -C …, zrestartuj usługę i wykonaj jeszcze jeden test w nowej sesji.

Dwa różne klucze

Klucz hosta potwierdza tożsamość serwera. Klucz użytkownika potwierdza Twoją tożsamość wobec serwera. Zmiana klucza hosta nie jest zwykłym błędem hasła.

06 / LABORATORIUM SSH

Prześlij plik i zapisz wygodny skrót.

KLIENT LINUX · utwórz raport i prześlij go
printf 'Laboratorium SSH\n' > raport-ssh.txt
scp -i ~/.ssh/id_ed25519_lab raport-ssh.txt uczen@10.0.0.10:~/
sftp -i ~/.ssh/id_ed25519_lab uczen@10.0.0.10

W sesji SFTP polecenie ls pokazuje pliki serwera, lls pliki klienta, get raport-ssh.txt raport-z-serwera.txt pobiera raport, a bye kończy sesję. W PowerShell również dostępne są scp i sftp; jako ścieżkę klucza podaj "$env:USERPROFILE\.ssh\id_ed25519_lab".

KLIENT · wpis w ~/.ssh/config (Windows: %USERPROFILE%\.ssh\config)
Host lab-ssh
    HostName 10.0.0.10
    User uczen
    Port 22
    IdentityFile ~/.ssh/id_ed25519_lab
    IdentitiesOnly yes
KLIENT · połączenie i zdalne polecenie
ssh lab-ssh
ssh lab-ssh "hostname; whoami; uptime"

Zdalne polecenie wykonuje się na serwerze, a jego wynik wraca do terminala klienta. Plik config w Windows nie powinien mieć rozszerzenia .txt.

07 / LABORATORIUM SSH

Ćwiczenie dodatkowe: port 2222.

Wykonaj przy konsoli serwera po ukończeniu części podstawowej. Zmiana portu ogranicza część automatycznego szumu, ale nie zastępuje kluczy i kontroli dostępu. Najpierw dodaj regułę zapory:

SERWER · dopuść klienta na nowym porcie
sudo ufw allow from 10.0.0.20 to any port 2222 proto tcp

Dodaj Port 2222 w pliku laboratoryjnym. Przejrzyj inne aktywne dyrektywy Port: mogą wskazywać dodatkowe porty. Sprawdź sudo /usr/sbin/sshd -t i sudo /usr/sbin/sshd -T | grep ^port.

W Ubuntu 24.04 LTS przy aktywnym ssh.socket przeładuj generator systemd i uruchom ponownie gniazdo oraz usługę:

SERWER · Ubuntu 24.04 z aktywnym ssh.socket
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket ssh.service
sudo ss -ltnp 'sport = :2222'

W klasycznym trybie bez aktywnego gniazda wystarczy sudo systemctl restart ssh.service. Starsze wydania Ubuntu mogą wymagać konfiguracji ListenStream w nadpisaniu ssh.socket — ten wariant ćwiczenia dotyczy Ubuntu 24.04.

KLIENT · test nowego portu
ssh -p 2222 -i ~/.ssh/id_ed25519_lab uczen@10.0.0.10
scp -P 2222 -i ~/.ssh/id_ed25519_lab raport-ssh.txt uczen@10.0.0.10:~/

ssh używa małego -p, natomiast scp i sftp dużego -P. Zaktualizuj też Port w konfiguracji klienta. Usuń starą regułę UFW dopiero po udanym teście i sprawdzeniu, że inne usługi jej nie potrzebują.

08 / LABORATORIUM SSH

Znajdź przyczynę problemu.

Objaw → prawdopodobna przyczyna → sprawdzenie
ObjawCo sprawdzić
Connection refusedBrak nasłuchu albo odrzucenie połączenia. Sprawdź port, ss, usługę i gniazdo.
Connection timed outAdres, trasa, sieć VM i zapory. Ping może być blokowany; sprawdź również TCP.
Permission denied (publickey)Nazwa konta, wybrany klucz, zawartość authorized_keys, właściciel i uprawnienia katalogu.
Too many authentication failuresAgent oferuje zbyt wiele kluczy. Wybierz -i i -o IdentitiesOnly=yes.
REMOTE HOST IDENTIFICATION HAS CHANGEDZweryfikuj nowy odcisk przy konsoli. Przyczyną może być reinstalacja, inny serwer albo podszywanie się.
Port nadal wynosi 22Sprawdź sshd -T, nadpisania ssh.socket, przeładowanie systemd i rzeczywisty nasłuch.
KLIENT · szczegóły połączenia
ssh -vvv -i ~/.ssh/id_ed25519_lab -o IdentitiesOnly=yes uczen@10.0.0.10
WINDOWS · test TCP w PowerShell
Test-NetConnection 10.0.0.10 -Port 22
SERWER · dziennik i nasłuch
sudo journalctl -u ssh.service -u ssh.socket -n 60 --no-pager
sudo ss -ltnp
sudo ufw status numbered

Uprawnienia poprawiaj na koncie, do którego się logujesz: chmod 700 ~/.ssh i chmod 600 ~/.ssh/authorized_keys. Pliki powinny należeć do tego użytkownika. Nie używaj chmod 777.

Serwer został świadomie przeinstalowany — co z known_hosts?

Po potwierdzeniu nowego odcisku usuń wyłącznie stary wpis dla tego serwera. Dla portu 22 użyj ssh-keygen -R 10.0.0.10, a dla 2222: ssh-keygen -R '[10.0.0.10]:2222'. Połącz się ponownie i porównaj odcisk. Nie wyłączaj sprawdzania klucza hosta.

Zmiana konfiguracji odcięła nowe logowania.

Użyj pozostawionej sesji lub konsoli. Cofnij ostatnią zmianę w pliku laboratoryjnym, sprawdź sudo /usr/sbin/sshd -t, zastosuj właściwy dla swojego trybu restart i skontroluj port. Kopia archiwum pozwala odtworzyć poprzednią konfigurację. Przed zamknięciem konsoli sprawdź nową sesję klienta.

09 / LABORATORIUM SSH

Sprawdź działanie po instalacji.

Wykonaj testy na dwóch komputerach. Zapisz wyniki w raporcie. Instalacja pakietu jest pierwszym etapem; działanie usługi potwierdzają nowe połączenie i wykonane zdalnie polecenia.

Testy odbiorcze serwera SSH
Test i miejsce wykonaniaOczekiwany wynik
SERWER: dpkg-query -W -f='${Status}\n' openssh-serverWynik zawiera install ok installed.
SERWER: sudo ss -ltnp 'sport = :22'Wiersz LISTEN dla portu 22; przy ćwiczeniu dodatkowym sprawdź 2222.
KLIENT: ssh uczen@10.0.0.10Po potwierdzeniu odcisku i uwierzytelnieniu pojawia się powłoka serwera.
SESJA SSH: whoami i hostnameKonto uczen oraz nazwa właściwego serwera.
KLIENT: nowa sesja z wymuszonym publickeyLogowanie działa przy wyłączonych metodach hasłowych klienta.
KLIENT: scp oraz SFTP getRaport można przesłać i pobrać; pobrany plik ma tę samą treść.

Po przesłaniu raportu sprawdź na serwerze cat ~/raport-ssh.txt. Po pobraniu użyj na Linuxie cmp raport-ssh.txt raport-z-serwera.txt: brak komunikatu i kod zakończenia 0 oznaczają identyczne pliki. W Windows porównaj wyniki Get-FileHash dla obu plików.

10 / LABORATORIUM SSH

Wykonaj zadanie i zbierz dowody.

ZADANIE SAMODZIELNE · 45–60 MINUT

Uruchom OpenSSH na Ubuntu Server, zaloguj konto uczen z drugiego komputera, sprawdź odcisk hosta i prześlij raport. Następnie skonfiguruj logowanie kluczem i wyłącz uwierzytelnianie hasłem. Zapisz wyniki oraz krótkie wyjaśnienie każdego testu.

Pytania kontrolne.

  1. Czym różni się klient SSH od serwera sshd?
  2. Czym różni się klucz hosta od klucza użytkownika?
  3. Dlaczego klucz prywatny zostaje na stacji roboczej?
  4. Dlaczego sprawdzamy nową sesję przed zamknięciem starej?
  5. Jaką rolę pełni ssh.socket i dlaczego po zmianie portu sprawdzamy ss?
Odpowiedzi i kryteria zaliczenia

Klient inicjuje połączenie, serwer je przyjmuje. Klucz hosta identyfikuje serwer, a klucz użytkownika służy do uwierzytelnienia konta. Klucz prywatny umożliwia potwierdzenie tożsamości, dlatego jego ujawnienie zagraża dostępowi. Druga sesja wykrywa utratę możliwości logowania. Gniazdo systemd może nasłuchiwać i uruchamiać usługę; wynik ss pokazuje faktyczny port. Zaliczenie wymaga dowodów z sześciu punktów listy, bez publikowania haseł i kluczy prywatnych.

11 / LABORATORIUM SSH

Dokumentacja do dalszej pracy.

Scenariusz podstawowy: Ubuntu Server 24.04 LTS, port 22, klient Linux lub Windows 11. Materiał przygotowany 12.10.2026. Wyniki poleceń zależą od konfiguracji stanowiska.