1/50 Narzędzia do zdalnych połączeń i testów sieciowych

SSH, SCP, PuTTY, VNC, konsola szeregowa, screen/tmux

Prezentacja obejmuje praktyczne narzędzia do zdalnej administracji systemami i urządzeniami sieciowymi.

Omówione zostaną: SSH jako bezpieczny protokół zdalnego terminala, SCP do kopiowania plików, klient PuTTY z uwzględnieniem zagrożeń protokołu Telnet, połączenia konsolowe przez port szeregowy, VNC do zdalnego pulpitu graficznego oraz zaawansowane narzędzia takie jak screen, tmux, SuperPuTTY i MobaXterm.

Każde narzędzie zostanie zaprezentowane od instalacji i podstawowej konfiguracji przez praktyczne przykłady użycia, aż po dobre praktyki bezpieczeństwa.

Prezentacja przeznaczona jest dla osób rozpoczynających pracę z sieciami, które chcą poznać standardowe narzędzia pracy administratora.

Wybór odpowiedniego narzędzia do zdalnego dostępu powinien być podyktowany przede wszystkim wymaganiami bezpieczeństwa oraz charakterem wykonywanych zadań administracyjnych. Administrator sieci w codziennej pracy styka się z wieloma różnorodnymi systemami operacyjnymi i urządzeniami sieciowymi, z których każde może wymagać innego protokołu komunikacyjnego. W środowiskach produkcyjnych najczęściej spotyka się systemy Linux zarządzane przez SSH, urządzenia sieciowe Cisco dostępne przez konsolę szeregową oraz serwery Windows administrowane przez RDP. Niezwykle istotna jest znajomość wad i zalet każdego z omawianych narzędzi, ponieważ niewłaściwy wybór protokołu może prowadzić do poważnych luk bezpieczeństwa. Współczesny administrator musi także umieć łączyć różne narzędzia w celu uzyskania optymalnego efektu, na przykład tunelując VNC przez SSH dla zapewnienia szyfrowania transmisji graficznej.

Rozwój technologii zdalnego dostępu stale postępuje, czego przykładem są nowoczesne rozwiązania takie jak WireGuard do tworzenia bezpiecznych tuneli VPN czy narzędzia oparte na WebSockets dla dostępu przez przeglądarkę internetową. Umiejętność sprawnego poruszania się między konsolą tekstową a interfejsem graficznym wyróżnia doświadczonego administratora od początkującego technika. Warto również zwrócić uwagę na aspekt automatyzacji, który pozwala na wykonywanie powtarzalnych czynności na wielu serwerach jednocześnie bez konieczności ręcznego logowania do każdego z osobna. Prezentowane w tym materiale zagadnienia stanowią solidną podstawę do dalszego samodzielnego pogłębiania wiedzy z zakresu zdalnej administracji systemami.

W codziennej praktyce nieoceniona okazuje się umiejętność szybkiego diagnozowania problemów z łącznością i konfiguracją protokołów zdalnego dostępu. Znajomość mechanizmów uwierzytelniania i szyfrowania pozwala świadomie dobierać parametry połączeń w zależności od wrażliwości przesyłanych danych. Opanowanie przedstawionych narzędzi stanowi inwestycję, która zwraca się wielokrotnie w postaci oszczędności czasu i podniesienia poziomu bezpieczeństwa zarządzanej infrastruktury.

2/50 Streszczenie

SSH (Secure Shell) to bezpieczny protokół zdalnego logowania.

SCP to narzędzie do bezpiecznego kopiowania plików wykorzystujące SSH.

PuTTY jest popularnym klientem SSH i Telnet dla systemu Windows.

Telnet, historyczny protokół terminalowy, jest niebezpieczny ze względu na brak szyfrowania.

Połączenie konsolowe przez port szeregowy (RS-232) służy do lokalnej administracji urządzeniami sieciowymi, szczególnie w sytuacjach awaryjnych.

VNC umożliwia zdalny dostęp do pulpitu graficznego.

Narzędzia takie jak screen, tmux, SuperPuTTY i MobaXterm zwiększają produktywność administratora poprzez zarządzanie wieloma sesjami i połączeniami jednocześnie.

Celem niniejszej prezentacji jest kompleksowe przedstawienie ekosystemu narzędzi wykorzystywanych w codziennej pracy administratora sieci i systemów informatycznych. Każde z omawianych narzędzi zostało zaprojektowane z myślą o konkretnym zastosowaniu, a znajomość ich wszystkich pozwala na elastyczne dopasowanie metody pracy do bieżących potrzeb. Bezpieczna zdalna administracja wymaga nie tylko znajomości składni poleceń, ale przede wszystkim zrozumienia zasad działania protokołów leżących u podstaw poszczególnych narzędzi. W materiale położono szczególny nacisk na aspekty bezpieczeństwa, ponieważ każdy otwarty port zdalnego dostępu stanowi potencjalny wektor ataku dla osób niepowołanych.

Wybór pomiędzy poszczególnymi narzędziami zależy od wielu czynników, w tym od systemu operacyjnego, polityki bezpieczeństwa organizacji oraz indywidualnych preferencji administratora. Nie bez znaczenia pozostaje również kwestia skalowalności, czyli możliwości zarządzania wieloma połączeniami jednocześnie w ujednolicony sposób. Nowoczesne środowiska chmurowe dodatkowo komplikują obraz, wprowadzając własne narzędzia dostępu, takie jak AWS Systems Manager Session Manager czy Azure Bastion, które integrują się z zarządzaną infrastrukturą.

Studenci kierunków informatycznych powinni potraktować tę prezentację jako punkt wyjścia do samodzielnych eksperymentów laboratoryjnych. Praktyczne przećwiczenie każdego z omawianych narzędzi w kontrolowanym środowisku maszyn wirtualnych pozwoli na wyrobienie prawidłowych nawyków administracyjnych. Zrozumienie różnic między poszczególnymi protokołami i narzędziami stanowi klucz do efektywnego i bezpiecznego zarządzania współczesną infrastrukturą IT.

3/50 Literatura

Źródła wiedzy

  • SSH Mastery – Michael W. Lucas, Tilted Windmill Press
  • Linux. Biblia administratora – Evi Nemeth i in., wyd. Helion
  • Dokumentacja OpenSSHman ssh, man sshd_config, www.openssh.com
  • Dokumentacja PuTTY – www.putty.org
  • tmux: Productive Mouse-Free Development – Brian P. Hogan, Pragmatic Bookshelf

Wybór odpowiedniej literatury ma kluczowe znaczenie dla efektywnego przyswajania wiedzy z zakresu sieci komputerowych i zdalnej administracji. Poza wymienionymi w slajdzie pozycjami warto sięgnąć po dokumentację RFC definiującą protokoły SSH oraz Telnet, które stanowią autorytatywne źródło informacji o ich działaniu. W przypadku praktycznej nauki narzędzi takich jak tmux czy screen nieocenione okazują się interaktywne poradniki dostępne w terminalu po wpisaniu polecenia man, które szczegółowo opisują każdą dostępną opcję.

Społeczność open source wokół projektu OpenSSH regularnie publikuje wpisy na blogach technicznych oraz poradniki w formie artykułów, które często zawierają praktyczne przykłady konfiguracji niedostępne w oficjalnej dokumentacji. Warto również śledzić repozytoria kodu źródłowego poszczególnych projektów, gdzie w sekcji Issues można znaleźć dyskusje na temat rozwiązywania konkretnych problemów konfiguracyjnych. Dla osób preferujących naukę przez praktykę doskonałym uzupełnieniem literatury są gotowe scenariusze laboratoryjne dostępne na platformach typu GitHub, które pozwalają na odtworzenie rzeczywistych środowisk sieciowych.

W przypadku literatury anglojęzycznej należy zwracać uwagę na datę wydania, ponieważ dziedzina zdalnej administracji dynamicznie się zmienia. Książki wydane przed upowszechnieniem się protokołu SSH w wersji 2 mogą zawierać nieaktualne informacje dotyczące bezpieczeństwa. Najlepszą strategią jest łączenie klasycznych podręczników z bieżącymi źródłami internetowymi, co zapewnia zarówno solidne podstawy teoretyczne, jak i wiedzę o najnowszych trendach i zagrożeniach.

4/50 Dlaczego potrzebujemy zdalnych połączeń?
Kluczowe korzyści: oszczędność czasu i kosztów podróży, szybka reakcja na awarie, centralizacja zarządzania, możliwość pracy zdalnej, automatyzacja zadań administracyjnych.

Współczesne środowiska IT składają się z setek lub tysięcy serwerów, urządzeń sieciowych i stacji roboczych, często rozproszonych geograficznie.

Fizyczny dostęp do każdego z nich byłby niepraktyczny, kosztowny i czasochłonny.

Zdalne połączenia pozwalają administratorowi zarządzać całą infrastrukturą z jednego miejsca.

Przykłady zastosowań: administracja serwerami Linux w chmurze, konfiguracja routerów i przełączników Cisco w oddziałach firmy, zdalna pomoc techniczna, kopiowanie plików konfiguracyjnych między serwerami, monitorowanie i diagnostyka systemów w czasie rzeczywistym.

Konieczność stosowania zdalnych połączeń wynika wprost z ewolucji architektur informatycznych, które z pojedynczych serwerów w serwerowni przekształciły się w rozproszone geograficznie klastry obliczeniowe i chmury publiczne. Każda minuta przestoju usługi generuje wymierne straty finansowe, co wymusza na administratorach możliwość natychmiastowej reakcji na awarie niezależnie od pory dnia i miejsca pobytu. Zdalne zarządzanie pozwala również na centralizację wiedzy specjalistycznej w zespole, gdzie najbardziej doświadczeni administratorzy mogą wspierać mniej doświadczonych kolegów bez konieczności podróży do oddziałów terenowych.

W dobie transformacji cyfrowej i powszechnej pracy zdalnej umiejętność bezpiecznego łączenia się z zasobami firmowymi stała się jedną z kluczowych kompetencji nie tylko administratorów, ale także zwykłych użytkowników. Przedsiębiorstwa coraz częściej wdrażają modele hybrydowe, w których część infrastruktury znajduje się w lokalnym centrum danych, a część w chmurze publicznej, co wymaga spójnych mechanizmów zdalnego dostępu. Automatyzacja zadań administracyjnych poprzez skrypty wykonywane zdalnie przez SSH przynosi wymierne oszczędności czasu i redukuje ryzyko błędów ludzkich podczas ręcznej konfiguracji setek urządzeń.

Należy jednak pamiętać o zasadzie najmniejszych uprawnień, zgodnie z którą każdy użytkownik i system powinien mieć dostęp tylko do tych zasobów, które są niezbędne do wykonywania jego zadań. Regularna rotacja haseł i kluczy dostępu, a także monitorowanie logów połączeń zdalnych stanowią podstawę bezpieczeństwa w środowiskach wieloserwerowych. Wprowadzenie uwierzytelniania wieloskładnikowego dla połączeń administracyjnych dodatkowo podnosi poziom bezpieczeństwa i utrudnia potencjalnym atakującym przejęcie kontroli nad infrastrukturą.

5/50 SSH – Secure Shell
Definicja: SSH – protokół warstwy aplikacji (TCP/IP) zapewniający szyfrowane zdalne logowanie i wykonywanie poleceń w systemie docelowym.

SSH (Secure Shell)

Domyślnie działa na porcie 22.

Zapewnia szyfrowane połączenie terminalowe, bezpieczny transfer plików (SFTP, SCP) oraz tunelowanie innych protokołów.

Protokół został opracowany w 1995 roku przez Tatu Ylönena jako odpowiedź na zagrożenia związane z niezaszyfrowanymi protokołami Telnet i rlogin.

Obecnie standardem jest OpenSSH, rozwijany przez projekt OpenBSD, dostępny na wszystkich systemach Unix/Linux, macOS i Windows.

Protokół SSH zrewolucjonizował sposób zarządzania systemami Unixowymi i Linuxowymi, wprowadzając szyfrowanie tam, gdzie wcześniej królował jawny tekst. Przed pojawieniem się SSH administratorzy musieli polegać na protokołach takich jak Telnet, rlogin czy rsh, które przesyłały wszystkie dane, włącznie z hasłami, w postaci niezaszyfrowanej. Pomysłodawca protokołu, fiński naukowiec Tatu Ylönen, stworzył pierwsze wdrożenie SSH po tym, jak w jego macierzystej uczelni przeprowadzono skuteczny atak snifferem na sieć lokalną. Od tego czasu protokół przeszedł długą ewolucję od wersji SSH-1 do obecnie obowiązującej SSH-2, która wyeliminowała szereg luk bezpieczeństwa wykrytych w pierwszej wersji.

Architektura warstwowa SSH stanowi o jego elastyczności i bezpieczeństwie. Warstwa transportowa odpowiada za negocjację algorytmów kryptograficznych i wymianę kluczy sesji, warstwa uwierzytelniania weryfikuje tożsamość użytkownika za pomocą hasła lub klucza publicznego, a warstwa połączenia umożliwia multipleksację wielu niezależnych kanałów w obrębie pojedynczej sesji. Dzięki takiej konstrukcji możliwe jest jednoczesne wykonywanie poleceń, przesyłanie plików i tunelowanie portów w ramach jednego połączenia SSH bez potrzeby nawiązywania osobnych sesji dla każdego zadania.

OpenSSH jako najpopularniejsza implementacja protokołu rozwijana jest przez zespół projektowy OpenBSD z naciskiem na bezpieczeństwo i stabilność kodu. W systemach Linux usługa sshd uruchamiana jest jako demon systemowy, a pliki konfiguracyjne znajdują się w katalogu /etc/ssh. W systemie Windows 10 i nowszych OpenSSH dostępny jest jako opcjonalna funkcja systemu, którą można zainstalować przez ustawienia lub PowerShell, co czyni go standardem zdalnego dostępu we współczesnych systemach operacyjnych.

6/50 Zasada działania SSH

SSH

Serwer (sshd) nasłuchuje na porcie 22 i oczekuje na połączenia od klientów.

Po nawiązaniu połączenia następuje negocjacja parametrów szyfrowania, uwierzytelnienie hosta (przez klucz publiczny serwera) i uwierzytelnienie użytkownika (hasło lub klucz publiczny).

Proces nawiązywania połączenia obejmuje: wymianę kluczy Diffie-Hellmana dla ustalenia wspólnego klucza sesji, szyfrowanie transmisji algorytmem symetrycznym, uwierzytelnienie serwera przez odcisk klucza (fingerprint) i uwierzytelnienie klienta (hasło lub klucz publiczny).

Nawiązywanie połączenia SSH przebiega zgodnie ze ściśle określonym protokołem, który można podzielić na trzy główne fazy widoczne po uruchomieniu klienta z opcją -v. W pierwszej fazie następuje negocjacja wersji protokołu i algorytmów kryptograficznych, gdzie klient i serwer uzgadniają wspólny zestaw obsługiwanych metod szyfrowania, wymiany kluczy i uwierzytelniania. Protokół Diffiego-Hellmana używany do ustalenia wspólnego klucza sesji chroni przed atakiem polegającym na podsłuchiwaniu wymiany kluczy, ponieważ nawet przechwycenie całej komunikacji nie pozwala na odtworzenie klucza sesji bez wiedzy o kluczach prywatnych uczestników.

Druga faza to uwierzytelnienie serwera, podczas którego klient porównuje odcisk klucza publicznego serwera z wartością zapisaną lokalnie w pliku known_hosts. Mechanizm ten zapobiega atakom Man-in-the-Middle, w których atakujący podszywa się pod serwer i przechwytuje dane logowania użytkownika. W przypadku pierwszego połączenia z nowym serwerem klient wyświetla odcisk klucza i prosi użytkownika o weryfikację, a administrator powinien porównać ten odcisk z wartością uzyskaną na serwerze za pomocą polecenia ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub.

Trzecia faza to uwierzytelnienie użytkownika, które może odbyć się przez hasło lub klucz publiczny. Uwierzytelnianie kluczem publicznym jest bezpieczniejsze, ponieważ klucz prywatny przechowywany na komputerze klienta jest chroniony hasłem, a sam proces logowania polega na podpisaniu losowych danych przez klienta i weryfikacji tego podpisu przez serwer za pomocą klucza publicznego użytkownika. Po pomyślnym uwierzytelnieniu obu stron tworzona jest szyfrowana sesja, w ramach której można wykonywać polecenia, przesyłać pliki i tworzyć tunele.

7/50 Instalacja OpenSSH Server na Debianie
sudo apt update
sudo apt install openssh-server -y
sudo systemctl status ssh

Instalacja serwera SSH w systemie Debian lub Ubuntu jest bardzo prosta:

Po instalacji serwer SSH uruchamia się automatycznie jako usługa systemd.

Sprawdzamy status:

Jeśli usługa nie jest uruchomiona: sudo systemctl enable --now ssh.

W przypadku zapory UFW: sudo ufw allow ssh.

Proces instalacji serwera OpenSSH w dystrybucjach opartych na systemie Debian jest jednym z pierwszych zadań, z jakimi mierzy się początkujący administrator Linux. Po wydaniu polecenia sudo apt install openssh-server menedżer pakietów pobiera i instaluje nie tylko sam plik wykonywalny sshd, ale także skrypt inicjalizacyjny dla systemd oraz domyślną konfigurację w pliku /etc/ssh/sshd_config. Już podczas instalacji generowane są klucze hosta dla algorytmów RSA, ECDSA i Ed25519, które umożliwiają identyfikację serwera i są przechowywane w katalogu /etc/ssh z odpowiednimi uprawnieniami dostępu.

Po zakończeniu instalacji usługa sshd uruchamia się automatycznie i rozpoczyna nasłuch na porcie 22, a status usługi można sprawdzić poleceniem systemctl status ssh. Na tym etapie warto zweryfikować, czy usługa nasłuchuje na wszystkich interfejsach sieciowych, czy tylko na wybranych, co można skonfigurować przez opcję ListenAddress w pliku sshd_config. W przypadku korzystania z zapory sieciowej UFW wystarczy wydać polecenie ufw allow ssh, które otwiera domyślny port 22 dla ruchu przychodzącego.

W środowisku produkcyjnym po instalacji zaleca się wykonanie podstawowego audytu bezpieczeństwa obejmującego sprawdzenie domyślnych ustawień PermitRootLogin i PasswordAuthentication. Należy również rozważyć zmianę domyślnego portu na niestandardowy, co utrudnia automatyczne skanowanie i ogranicza liczbę nieautoryzowanych prób logowania. Regularne aktualizowanie pakietu openssh-server za pomocą mechanizmu aktualizacji systemowych zapewnia ochronę przed nowo odkrytymi podatnościami w protokole i implementacji OpenSSH.

8/50 Weryfikacja działania SSH
sudo ss -tlnp | grep :22
ssh localhost
ssh 127.0.0.1

Test lokalny:

Sprawdzamy, czy serwer nasłuchuje na porcie 22:

Oczekiwany wynik: proces sshd nasłuchujący na porcie 22.

Przy pierwszym połączeniu z localhost pojawi się ostrzeżenie o nieznanym kluczu hosta – należy je zaakceptować, po czym zalogować się swoim hasłem.

Weryfikacja poprawności działania serwera SSH powinna być standardowym krokiem po instalacji oraz po każdej zmianie konfiguracji pliku sshd_config. Polecenie ss -tlnp z opcjami wyświetla wszystkie gniazda TCP nasłuchujące na określonym porcie wraz z identyfikatorem procesu pid, co pozwala jednoznacznie stwierdzić, czy to proces sshd nasłuchuje na porcie 22. W przypadku problemów z połączeniem warto sprawdzić, czy usługa sshd jest uruchomiona i czy nie ma konfliktu portów z inną aplikacją.

Test lokalny z użyciem ssh localhost lub ssh 127.0.0.1 umożliwia sprawdzenie pełnej ścieżki połączenia bez konieczności posiadania drugiego komputera w sieci. Po raz pierwszy łącząc się z localhostem, klient wyświetli ostrzeżenie o nieznanym kluczu hosta, ponieważ adres pętli lokalnej nie znajduje się jeszcze w pliku known_hosts. Zaakceptowanie klucza powoduje zapisanie jego odcisku w pliku known_hosts i od tego momentu każde kolejne połączenie będzie weryfikowane pod kątem zgodności klucza serwera.

Weryfikacja odcisku klucza hosta jest szczególnie istotna przy pierwszym połączeniu z nowym serwerem w sieci produkcyjnej. Administrator powinien porównać wyświetlany przez klienta odcisk klucza z wartością uzyskaną na serwerze za pomocą polecenia ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub. W przypadku niezgodności odcisków należy natychmiast przerwać połączenie i sprawdzić, czy serwer nie został skompromitowany lub czy nie doszło do ataku typu Man-in-the-Middle na poziomie sieci lokalnej.

9/50 Plik konfiguracyjny sshd_config
# Port nasłuchu (domyślnie 22, można zmienić)
Port 22

# Zezwolenie na logowanie roota (zalecane: prohibit-password)
PermitRootLogin prohibit-password

# Uwierzytelnianie hasłem (wyłączyć przy kluczach)
PasswordAuthentication yes

# Limit prób logowania
MaxAuthTries 3
Najważniejsze opcje:

Główny plik konfiguracyjny serwera SSH: /etc/ssh/sshd_config.

Po zmianie konfiguracji restart: sudo systemctl restart ssh.

Plik sshd_config znajdujący się w katalogu /etc/ssh jest dokumentem tekstowym, w którym każda linia zawiera dyrektywę konfiguracyjną w formacie klucz wartość. Linie rozpoczynające się od znaku hash są komentarzami i nie wpływają na działanie serwera, co pozwala na czytelne udokumentowanie wprowadzonych zmian. Po zmodyfikowaniu pliku należy zrestartować serwer SSH poleceniem systemctl restart ssh, aby nowe ustawienia zostały załadowane, przy czym restart nie zrywa istniejących połączeń, a jedynie wpływa na nowo nawiązywane sesje.

Wśród kilkudziesięciu dostępnych opcji konfiguracyjnych szczególną uwagę należy zwrócić na dyrektywy dotyczące bezpieczeństwa. PermitRootLogin należy ustawić na prohibit-password lub no w środowiskach produkcyjnych, aby uniemożliwić bezpośrednie logowanie na konto administratora przez SSH. Dyrektywy AllowUsers i AllowGroups umożliwiają precyzyjne określenie, którzy użytkownicy i grupy mają prawo logować się przez SSH, co znacząco ogranicza powierzchnię ataku.

Zaawansowani administratorzy często korzystają również z opcji Match do tworzenia warunkowych bloków konfiguracyjnych dla konkretnych użytkowników, grup lub adresów źródłowych. Możliwe jest na przykład zdefiniowanie innych limitów prędkości transmisji dla użytkowników kopiujących duże pliki lub wymuszenie uwierzytelniania dwuskładnikowego dla połączeń spoza sieci wewnętrznej. Warto pamiętać o opcji ClientAliveInterval i ClientAliveCountMax, które pozwalają na automatyczne zamykanie nieaktywnych sesji SSH, co zapobiega marnowaniu zasobów serwera przez porzucone połączenia.

10/50 Klient SSH z konsoli

Klient SSH jest domyślnie dostępny w każdym systemie Linux, macOS i Windows (PowerShell).

Podstawowe połączenie:

ssh user@192.168.1.100

Jeśli serwer nasłuchuje na niestandardowym porcie (np. 2222):

ssh -p 2222 user@192.168.1.100

Przydatne opcje: -v (verbose – diagnostyka), -C (kompresja), -i plik (wskazanie klucza prywatnego), -J host (połączenie przez skok).

Po zalogowaniu pracujemy w zdalnym terminalu.

Korzystanie z klienta SSH w konsoli systemowej to najczęstszy sposób nawiązywania zdalnych połączeń w środowiskach Linux i macOS, a od niedawna także w systemie Windows z PowerShell. Podstawowe wywołanie ssh user@host z domyślnym portem 22 jest wystarczające w większości przypadków, jednak znajomość dodatkowych opcji znacząco podnosi komfort i bezpieczeństwo pracy. Opcja -v zwiększa szczegółowość komunikatów diagnostycznych, co jest nieocenione przy rozwiązywaniu problemów z połączeniem, ponieważ wyświetla każdy etap negocjacji parametrów sesji.

Plik konfiguracyjny klienta ~/.ssh/config pozwala na definiowanie skrótów dla często odwiedzanych serwerów, co eliminuje konieczność zapamiętywania adresów IP i niestandardowych portów. W pliku tym można również zdefiniować domyślnego użytkownika dla danego hosta, ścieżkę do klucza prywatnego, a nawet reguły tunelowania portów, które będą automatycznie stosowane przy każdym połączeniu. Dla administratora zarządzającego dziesiątkami serwerów odpowiednio skonfigurowany plik config stanowi znaczną oszczędność czasu i redukuje ryzyko pomyłki przy ręcznym wpisywaniu parametrów.

Opcja -J umożliwiająca połączenie przez hosta skokowego jest szczególnie przydatna w środowiskach z wieloma strefami bezpieczeństwa, gdzie bezpośrednie połączenie z serwerem docelowym jest zablokowane przez firewalla. W takiej sytuacji administrator łączy się najpierw z hostem pośredniczącym, a ten przekazuje połączenie do docelowego serwera w wewnętrznej sieci. Warto również znać opcję -X do przekazywania sesji X11, która umożliwia uruchamianie aplikacji graficznych ze zdalnego serwera na lokalnym pulpicie Linux.

11/50 Gniazda sieciowe – adres IP i port
Zapamiętaj: SSH = port 22, Telnet = 23, HTTP = 80, HTTPS = 443. Znajomość standardowych portów to podstawa diagnostyki.

Każde połączenie sieciowe w protokole TCP identyfikowane jest przez parę (adres IP, numer portu) dla obu stron komunikacji.

Serwer SSH nasłuchuje na gnieździe 0.0.0.0:22 (wszystkie interfejsy, port 22).

Klient łączy się z gniazdem adres_serwera:22.

Gniazdo (socket) to abstrakcja programistyczna łącząca adres IP i port, umożliwiająca procesom komunikację przez sieć.

W systemie Linux polecenie ss -tlnp pokazuje wszystkie gniazda nasłuchujące.

Porty 0–1023 są zarezerwowane dla usług systemowych.

Pojęcie gniazda sieciowego jest fundamentalne dla zrozumienia komunikacji w sieciach TCP i może być mylące dla początkujących administratorów. Gniazdo to abstrakcyjny punkt końcowy komunikacji, który łączy w sobie adres IP hosta i numer portu TCP, tworząc unikalny identyfikator umożliwiający procesom wymianę danych przez sieć. W systemie Linux każde gniazdo jest reprezentowane przez deskryptor pliku w przestrzeni użytkownika, co oznacza, że operacje sieciowe są obsługiwane przez ten sam mechanizm systemowy co operacje na plikach lokalnych.

Polecenie ss jest nowoczesnym następcą starszego netstat i dostarcza znacznie więcej informacji o stanie gniazd sieciowych w formacie łatwiejszym do przetwarzania. Opcje -tlnp oznaczają kolejno gniazda TCP, gniazda nasłuchujące, pomijanie rozpoznawania nazw hostów oraz wyświetlanie identyfikatorów procesów przypisanych do poszczególnych gniazd. Dzięki znajomości tego polecenia administrator może szybko zidentyfikować, które usługi są dostępne w sieci, na jakich portach nasłuchują i z jakich procesów pochodzą.

Znajomość standardowych numerów portów przypisanych do najpopularniejszych usług sieciowych jest uważana za podstawę wiedzy sieciowej. Warto zapamiętać, że porty od 0 do 1023 nazywane są portami uprzywilejowanymi i mogą być otwierane tylko przez procesy z uprawnieniami roota, co stanowi mechanizm ochrony przed nieautoryzowanymi serwerami. Porty powyżej 1023 są dostępne dla zwykłych użytkowników i często wykorzystywane przez niestandardowe instalacje usług lub tymczasowe połączenia klienckie, których numery są przydzielane dynamicznie przez system operacyjny.

12/50 Łączenie bezpośrednie w sieci LAN
ssh jan@192.168.1.100

Z klienta (192.168.1.50) łączymy się:

Przed próbą SSH warto sprawdzić łączność: ping 192.168.1.100.

Jeśli ping działa, ale SSH nie – sprawdź port: telnet 192.168.1.100 22.

W sieci lokalnej (LAN) komputery komunikują się bezpośrednio, bez pośrednictwa routerów.

Jeśli serwer ma adres 192.168.1.100, a klient 192.168.1.50, połączenie jest nawiązywane bezpośrednio.

Przykład: Na serwerze (192.168.1.100) zainstalowano openssh-server.

Bezpośrednie połączenie SSH w sieci lokalnej jest najprostszym scenariuszem pracy zdalnej, ponieważ oba urządzenia znajdują się w tej samej podsieci i mogą komunikować się bez pośrednictwa routerów. W sieci LAN komputery wysyłają ramki bezpośrednio do siebie, a tłumaczenie adresu IP docelowego hosta na adres MAC wykonuje protokół ARP, rozwiązywany automatycznie przez te komputery; przełącznik przekazuje ramki wyłącznie na podstawie adresów MAC. Administrator powinien jednak pamiętać, że komunikacja w warstwie drugiej modelu OSI jest ograniczona do jednej domeny rozgłoszeniowej, a przekroczenie granicy podsieci wymaga już udziału routera.

Przed nawiązaniem połączenia SSH w sieci LAN warto wykonać kilka prostych testów diagnostycznych, które pozwolą odizolować ewentualne problemy. Polecenie ping sprawdza łączność w warstwie sieciowej, a pozytywny wynik oznacza, że host docelowy jest osiągalny i odpowiada na pakiety ICMP. Jeśli ping działa, ale SSH nie odpowiada, problem leży w warstwie aplikacji lub konfiguracji firewalla, co można sprawdzić za pomocą telnet 192.168.1.100 22, który testuje otwarcie portu docelowego na poziomie TCP.

W środowiskach laboratoryjnych często pomijanym, ale istotnym aspektem są zapory sieciowe wbudowane w systemy operacyjne. Zarówno Linux z iptables lub nftables, jak i Windows z Windows Defender Firewall domyślnie blokują ruch przychodzący na porcie 22, chyba że skonfigurowano odpowiednią regułę zezwalającą. Dlatego po instalacji serwera SSH na komputerze z aktywną zaporą należy ręcznie dodać regułę dopuszczającą ruch TCP na porcie 22 z zaufanych sieci źródłowych, co zapewnia bezpieczeństwo przy zachowaniu funkcjonalności zdalnego dostępu.

13/50 Połączenie przez NAT – problem
Problem: VM za NAT-em ma adres prywatny 10.0.2.15, który nie jest routowany w sieci hosta. Host nie może bezpośrednio połączyć się z VM, mimo że dzielą ten sam fizyczny komputer.

Wirtualne maszyny (VM) często działają w trybie NAT, co oznacza, że mają własną podsieć wewnętrzną (np. 10.0.2.0/24) i nie są bezpośrednio dostępne z sieci hosta.

Host (192.168.1.50) nie może połączyć się z VM (10.0.2.15), ponieważ te sieci są izolowane.

Tryb NAT w VirtualBox/VMware tworzy wirtualny router, który tłumaczy prywatne adresy IP maszyn wirtualnych na adres IP hosta.

VM ma dostęp do Internetu przez NAT, ale z zewnątrz jest niewidoczna.

Rozwiązaniem jest przekierowanie portów (port forwarding).

Problem dostępu do maszyn wirtualnych za translatorem NAT jest jednym z najczęstszych wyzwań, z jakimi spotykają się studenci podczas konfiguracji laboratoryjnych środowisk sieciowych. Hiperwizory takie jak VirtualBox domyślnie używają trybu NAT, w którym maszyna wirtualna otrzymuje adres IP z wewnętrznej podsieci hiperwizora i uzyskuje dostęp do sieci zewnętrznej przez mechanizm translacji adresów. Z punktu widzenia sieci zewnętrznej cały ruch pochodzi z adresu IP hosta fizycznego, a maszyna wirtualna jest całkowicie niewidoczna i niedostępna dla połączeń przychodzących.

Adresy z zakresu 10.0.0.0/8, do którego należy 10.0.2.15, są adresami prywatnymi zdefiniowanymi w RFC 1918 i nie są routowane w publicznym Internecie. W przypadku sieci lokalnej problem nie leży w routingu, ale w izolacji warstwy drugiej między interfejsem sieciowym hosta a interfejsem wewnętrznym hiperwizora. Host fizyczny nie wie, jak dotrzeć do podsieci 10.0.2.0/24, ponieważ jego tablica routingu nie zawiera wpisu dla tej sieci, a brama domyślna hosta również nie ma informacji o tej izolowanej podsieci.

Zrozumienie mechanizmu NAT ma kluczowe znaczenie nie tylko dla laboratoriów z maszynami wirtualnymi, ale także dla zrozumienia działania domowych routerów i translacji adresów w sieciach operatorów telekomunikacyjnych. W środowisku produkcyjnym problem dostępu do usług za NAT-em rozwiązuje się za pomocą przekierowania portów na routerze, co jest dokładnie tym samym mechanizmem co w przypadku maszyn wirtualnych. Różnica polega jedynie na skali i złożoności reguł, które w przypadku routerów produkcyjnych mogą obejmować tysiące przekierowań dla różnych usług i hostów.

14/50 Przekierowanie portów w VirtualBox
NazwaProtokółPort hostaAdres gościaPort gościa
SSHTCP222210.0.2.1522

Można też dodać regułę przez VBoxManage:

VBoxManage modifyvm "NazwaVM" --natpf1 "SSH,tcp,,2222,10.0.2.15,22"

Aby skonfigurować przekierowanie portów w VirtualBox: Ustawienia VM > Sieć > Adapter 1 > Zaawansowane > Przekierowanie portów.

Dodajemy regułę: nazwa (np. "SSH"), protokół TCP, port hosta 2222, adres gościa 10.0.2.15, port gościa 22.

Przekierowanie portów w VirtualBox jest mechanizmem, który pozwala na ominięcie ograniczeń trybu NAT i udostępnienie usług z maszyny wirtualnej na zewnątrz. Reguła przekierowania definiuje mapowanie pomiędzy portem na interfejsie hosta fizycznego a portem w maszynie wirtualnej, co oznacza, że ruch kierowany na adres IP hosta na określony port jest automatycznie przekazywany do maszyny wirtualnej. W praktyce oznacza to, że łącząc się z localhost:2222 na hoście, ruch jest tunelowany przez hiperwizor do portu 22 w maszynie wirtualnej o adresie 10.0.2.15.

Konfiguracja przekierowania przez interfejs graficzny VirtualBox jest intuicyjna i nie wymaga znajomości składni poleceń, jednak w przypadku zarządzania wieloma maszynami wirtualnymi wygodniejsze jest użycie narzędzia VBoxManage. Polecenie modifyvm z opcją natpf1 umożliwia dodawanie reguł przekierowania bezpośrednio z konsoli, co jest szczególnie przydatne w zautomatyzowanych scenariuszach wdrożeniowych z wykorzystaniem skryptów. W przypadku VMware Workstation analogiczną konfigurację wykonuje się w Virtual Network Editor, gdzie definiuje się reguły NAT dla poszczególnych sieci wirtualnych.

Wybierając port hosta do przekierowania, należy unikać portów już używanych przez inne usługi na hoście fizycznym, co mogłoby prowadzić do konfliktów. Dla połączeń SSH często stosuje się port 2222, który nie koliduje z żadną standardową usługą i jest łatwy do zapamiętania. Warto również pamiętać, że przekierowanie portów otwiera dostęp do maszyny wirtualnej dla wszystkich, którzy mają dostęp sieciowy do hosta fizycznego, dlatego w środowiskach laboratoryjnych należy stosować silne hasła lub uwierzytelnianie kluczami SSH.

15/50 Testowanie SSH przez NAT
ssh -p 2222 jan@127.0.0.1

Alternatywa: tryb mostkowany (bridged) – VM otrzymuje adres w sieci LAN hosta i jest bezpośrednio dostępna: ssh jan@192.168.1.150.

Po skonfigurowaniu przekierowania (host:2222 -> VM:22) łączymy się z VM z poziomu hosta przez adres pętli lokalnej:

Host przekierowuje ruch z localhost:2222 do VM na port 22.

Jeśli chcemy łączyć się z innego komputera w LAN, używamy adresu IP hosta zamiast 127.0.0.1.

Testowanie połączenia SSH przez NAT po skonfigurowaniu przekierowania portów jest kluczowym krokiem weryfikującym poprawność konfiguracji hiperwizora. Użycie adresu pętli lokalnej 127.0.0.1 z portem 2222 w poleceniu ssh -p 2222 jan@127.0.0.1 pozwala na sprawdzenie pełnej ścieżki transmisji przez mechanizm przekierowania. System operacyjny hosta kieruje pakiet na port 2222 interfejsu pętli lokalnej, hiperwizor przechwytuje go na podstawie reguły NAT i przekierowuje do maszyny wirtualnej na port 22.

Jeśli test z adresem pętli lokalnej zakończy się sukcesem, można przystąpić do testowania połączenia z innych komputerów w sieci LAN, używając adresu IP hosta fizycznego zamiast 127.0.0.1. W tym przypadku host fizyczny odbiera pakiet na swoim interfejsie sieciowym na porcie 2222 i przekierowuje go do maszyny wirtualnej zgodnie z regułą NAT. Należy jednak pamiętać o skonfigurowaniu zapory sieciowej na hoście, aby zezwalała na ruch przychodzący na porcie 2222 z zaufanych adresów źródłowych w sieci LAN.

Alternatywą dla przekierowania portów jest tryb mostkowany bridged, w którym maszyna wirtualna otrzymuje własny adres IP w sieci LAN hosta poprzez protokół DHCP. Tryb mostkowany jest prostszy w konfiguracji, ponieważ nie wymaga definiowania reguł przekierowania, ale zwiększa ryzyko bezpieczeństwa, ponieważ maszyna wirtualna staje się bezpośrednio dostępna dla wszystkich urządzeń w sieci LAN. Wybór między trybem NAT z przekierowaniem a trybem mostkowanym zależy od wymagań bezpieczeństwa i charakteru usług uruchomionych na maszynie wirtualnej.

16/50 Logowanie bez hasła – klucze SSH
# Krok 1: Generowanie pary kluczy na kliencie
ssh-keygen -t ed25519 -C "jan@laptop"

# Krok 2: Kopiowanie klucza publicznego na serwer
ssh-copy-id -p 2222 jan@127.0.0.1

Po tych krokach logowanie odbywa się bez hasła.

Klucz prywatny chroniony hasłem (passphrase) dodaje warstwę bezpieczeństwa.

Klucz publiczny trafia do ~/.ssh/authorized_keys na serwerze.

Uwierzytelnianie kluczami jest bezpieczniejsze niż hasła.

Dwa kroki: generacja pary kluczy na kliencie i kopiowanie klucza publicznego na serwer.

Uwierzytelnianie za pomocą kluczy SSH jest jedną z najważniejszych umiejętności, jakie powinien opanować każdy administrator systemów Linux, ponieważ eliminuje konieczność przesyłania hasła przez sieć. Generowanie pary kluczy poleceniem ssh-keygen tworzy dwa pliki: klucz prywatny przechowywany na komputerze klienta w pliku ~/.ssh/id_ed25519 oraz klucz publiczny, który można bezpiecznie kopiować na serwery. Wybór algorytmu Ed25519 jest obecnie rekomendowany ze względu na wysoki poziom bezpieczeństwa przy niewielkim rozmiarze klucza, co przekłada się na szybsze operacje kryptograficzne w porównaniu do starszych algorytmów RSA.

Klucz prywatny powinien być chroniony silnym hasłem passphrase, które szyfruje plik klucza na dysku i uniemożliwia jego wykorzystanie w przypadku kradzieży pliku. Po odblokowaniu klucza za pomocą hasła agent SSH ssh-agent przechowuje odblokowany klucz w pamięci operacyjnej i udostępnia go dla kolejnych połączeń bez konieczności ponownego wpisywania hasła. W systemach Linux agent SSH uruchamiany jest automatycznie w środowisku graficznym GNOME i KDE, a w Windows podobną funkcję pełni program Pageant dostarczany z pakietem PuTTY.

Po skopiowaniu klucza publicznego na serwer za pomocą ssh-copy-id trafia on do pliku ~/.ssh/authorized_keys w katalogu domowym użytkownika, gdzie każda linia zawiera jeden klucz publiczny uprawniony do logowania. W dużych środowiskach zarządzanie kluczami może być wyzwaniem, dlatego stosuje się scentralizowane rozwiązania takie jak SSH Certificate Authority, gdzie administrator podpisuje klucze użytkowników certyfikatem, eliminując konieczność ręcznego kopiowania kluczy na każdy serwer. Wdrożenie uwierzytelniania kluczami i wyłączenie logowania hasłem w pliku sshd_config znacząco podnosi bezpieczeństwo serwera SSH.

17/50 Wykonywanie poleceń zdalnie przez SSH
ssh jan@192.168.1.100 "uptime"
ssh jan@192.168.1.100 "df -h /"
ssh jan@192.168.1.100 "journalctl -u ssh --no-pager | tail -20"
for host in server1 server2 server3; do
  echo "=== $host ==="
  ssh jan@$host "uptime; free -h"
done

Wystarczy podać polecenie jako ostatni argument:

Przydatne w skryptach – pętla przez listę hostów:

Wykonywanie zdalnych poleceń przez SSH bez otwierania interaktywnej sesji terminalowej jest jedną z najpotężniejszych funkcji protokołu, umożliwiającą automatyzację praktycznie wszystkich zadań administracyjnych. Mechanizm ten działa poprzez przekazanie polecenia jako ostatniego argumentu wywołania ssh, które jest wykonywane na zdalnym hoście, a jego standardowe wyjście jest przesyłane z powrotem do klienta. W praktyce oznacza to, że administrator może sprawdzić obciążenie systemu, ilość wolnego miejsca na dysku czy stan usług na wielu serwerach bez konieczności interaktywnego logowania się do każdego z nich.

Połączenie zdalnego wykonywania poleceń z pętlami powłoki bash umożliwia tworzenie zaawansowanych skryptów administracyjnych, które w kilka sekund zbierają informacje ze wszystkich serwerów w infrastrukturze. Należy jednak pamiętać o odpowiednim cytowaniu poleceń zawierających znaki specjalne, ponieważ niewłaściwie użyte cudzysłowy mogą spowodować wykonanie polecenia na lokalnym hoście zamiast na zdalnym. W przypadku poleceń wymagających interakcji z użytkownikiem, takich jak edytory tekstu czy menedżery pakietów, opcja -t wymusza przydzielenie pseudo-terminala niezbędnego do poprawnej komunikacji między programem a użytkownikiem.

Zaawansowani administratorzy często łączą zdalne wykonywanie poleceń z narzędziami do orkiestracji, takimi jak Ansible, które wykorzystują SSH jako warstwę transportową do zarządzania konfiguracją tysięcy serwerów. W takich systemach każde zadanie jest definiowane w pliku YAML, a narzędzie orkiestracji automatycznie łączy się przez SSH z każdym hostem i wykonuje zdefiniowane polecenia, zbierając wyniki do centralnego raportu. Zrozumienie, jak działa zdalne wykonywanie poleceń na poziomie protokołu SSH, jest kluczowe do efektywnego korzystania z tych zaawansowanych narzędzi automatyzacji.

18/50 Tunelowanie SSH – przekazywanie portów
ssh -L 5901:localhost:5901 jan@192.168.1.100
# Teraz localhost:5901 tuneluje do VM:5901 przez SSH
ssh -D 1080 jan@192.168.1.100

Tunelowanie TCP przez SSH

Przekazywanie lokalne (-L): ruch z lokalnego portu przez SSH do docelowego hosta i portu widzianego z serwera.

Przekazywanie dynamiczne (-D): serwer SOCKS5 na localhost:1080.

Trzy typy: lokalne (-L), zdalne (-R) i dynamiczne (-D).

Tunelowanie SSH to zaawansowana funkcja protokołu, która pozwala na bezpieczne przesyłanie dowolnych danych TCP przez szyfrowany kanał SSH, co ma szczególne znaczenie dla protokołów nieoferujących własnego szyfrowania. Przekazywanie lokalne z opcją -L tworzy nasłuch na lokalnym porcie klienta i przekazuje cały ruch przez tunel SSH do docelowego hosta i portu widzianego z perspektywy serwera. Na przykład administrator może bezpiecznie korzystać z VNC lub protokołu HTTP na zdalnym serwerze bez obaw o przechwycenie transmisji, ponieważ cały ruch przechodzi przez szyfrowany kanał SSH.

Przekazywanie zdalne z opcją -R działa w przeciwnym kierunku, tworząc nasłuch na porcie serwera i przekierowując ruch do portu na komputerze klienta. Ta funkcja jest wykorzystywana między innymi do udostępniania lokalnego serwera WWW na zewnątrz przez publiczny serwer SSH lub do umożliwienia pracownikowi zdalnemu dostępu do usług w firmowej sieci wewnętrznej bez konfiguracji VPN. Przekazywanie dynamiczne z opcją -D tworzy serwer proxy SOCKS5 na lokalnym porcie, który pozwala na bezpieczne przeglądanie internetu przez publiczne sieci Wi-Fi bez obaw o podsłuchiwanie.

W praktyce tunelowanie SSH jest często wykorzystywane jako tymczasowe rozwiązanie zastępujące VPN w sytuacjach, gdy konfiguracja pełnej sieci prywatnej jest nieuzasadniona. Należy jednak pamiętać, że tunel SSH przekazuje tylko ruch TCP i nie obsługuje protokołów warstwy sieciowej, takich jak ICMP, co wyklucza możliwość pingowania przez tunel. W środowiskach korporacyjnych do stałego tunelowania między oddziałami firmy lepiej sprawdzają się rozwiązania VPN oparte na WireGuard lub OpenVPN, które oferują pełną łączność sieciową z szyfrowaniem na poziomie warstwy sieciowej.

19/50 Bezpieczeństwo SSH – dobre praktyki
  • Zmiana portu – utrudnia automatyczne skanowanie (np. Port 2222)
  • Wyłączenie logowania root – PermitRootLogin prohibit-password lub no
  • Uwierzytelnianie kluczami – PasswordAuthentication no po wdrożeniu kluczy
  • Ograniczenie użytkowników – AllowUsers jan adam
  • Limit prób – MaxAuthTries 3
  • fail2ban – blokada IP po nieudanych próbach: sudo apt install fail2ban
Najważniejsze zasady:

Bezpieczeństwo serwera SSH jest jednym z najważniejszych zagadnień w administracji systemami Linux, ponieważ SSH jest najczęściej używanym protokołem do zdalnego zarządzania i stanowi główną bramę do serwera. Ataki brute-force na serwery SSH są codziennością w Internecie, gdzie zautomatyzowane boty skanują całe zakresy adresów IP w poszukiwaniu serwerów z domyślną konfiguracją i słabymi hasłami. Wprowadzenie kilku podstawowych zabezpieczeń, takich jak zmiana domyślnego portu i wyłączenie logowania roota, znacząco redukuje liczbę nieudanych prób logowania w logach systemowych.

Ograniczenie dostępu do konkretnych użytkowników za pomocą dyrektywy AllowUsers oraz adresów źródłowych przez konfigurację firewalla stanowi kolejną warstwę ochrony przed nieautoryzowanym dostępem. W połączeniu z uwierzytelnianiem kluczami i wyłączeniem logowania hasłem ryzyko skutecznego ataku na serwer SSH spada praktycznie do zera, ponieważ atakujący musiałby fizycznie posiąść klucz prywatny użytkownika. Narzędzie fail2ban dodatkowo monitoruje logi sshd w poszukiwaniu nieudanych prób logowania i tymczasowo blokuje adresy IP, z których pochodzą podejrzane próby dostępu.

W środowiskach wysokiego bezpieczeństwa stosuje się dodatkowe mechanizmy ochrony, takie jak uwierzytelnianie dwuskładnikowe przez Google Authenticator lub moduł PAM pam_google_authenticator.so. Konfiguracja 2FA dla SSH wymaga modyfikacji pliku sshd_config i dodania odpowiedniego wpisu w pliku pam.d/sshd, co powoduje, że po poprawnym uwierzytelnieniu kluczem lub hasłem użytkownik musi podać kod z aplikacji generującej jednorazowe hasła. Regularne przeglądanie logów dostępu SSH za pomocą journalctl -u ssh i analiza nieudanych prób logowania pozwalają na wykrycie potencjalnych zagrożeń na wczesnym etapie.

20/50 Podsumowanie SSH
Polecenie/FunkcjaOpis
ssh user@hostLogowanie do zdalnego hosta
ssh -p port user@hostLogowanie na niestandardowym porcie
ssh-keygen -t ed25519Generowanie pary kluczy
ssh-copy-id user@hostKopiowanie klucza na serwer
ssh user@host "cmd"Wykonanie polecenia zdalnie
ssh -L port:host:port user@hostTunelowanie lokalne

Znajomość opcji SSH i mechanizmów bezpieczeństwa jest niezbędna dla każdego administratora.

Podsumowanie bloku SSH stanowi moment refleksji nad ogromem możliwości, jakie oferuje ten protokół, ale także potwierdza, że jego opanowanie wymaga systematycznej nauki i praktyki. Umiejętność generowania i zarządzania kluczami SSH jest jedną z najbardziej poszukiwanych kompetencji na rynku pracy dla administratorów systemów Linux. Większość nowoczesnych narzędzi do zarządzania konfiguracją, takich jak Ansible, Puppet czy Chef, wykorzystuje SSH jako warstwę transportową, co czyni znajomość protokołu niezbędną nie tylko do ręcznej administracji, ale także do automatyzacji.

Warto zwrócić uwagę na różnicę między znajomością składni poleceń SSH a zrozumieniem mechanizmów działania protokołu, które pozwala na samodzielne rozwiązywanie problemów. Administrator, który rozumie proces nawiązywania połączenia, negocjacji algorytmów i uwierzytelniania, potrafi skutecznie diagnozować problemy na podstawie komunikatów z opcji -v. Zrozumienie tunelowania i przekazywania portów otwiera drzwi do zaawansowanych zastosowań SSH wykraczających poza podstawowe logowanie terminalowe.

Kolejnym krokiem po opanowaniu podstaw SSH powinno być zapoznanie się z narzędziami uzupełniającymi, takimi jak rsync do przyrostowej synchronizacji plików czy sshfs do montowania zdalnych systemów plików przez SSH w lokalnym katalogu. Regularne śledzenie changelogów OpenSSH i nowych wersji protokołu pozwala na bieżąco aktualizować wiedzę o nowych funkcjach bezpieczeństwa i algorytmach kryptograficznych. Inwestycja w naukę SSH zwraca się wielokrotnie w postaci bezpieczniejszej infrastruktury i wyższej efektywności codziennej pracy administracyjnej.

21/50 SCP – Secure Copy
Wskazówka: SCP używa tego samego uwierzytelniania co SSH. Jeśli skonfigurowałeś klucze SSH, SCP również działa bez hasła.

SCP (Secure Copy) to narzędzie do bezpiecznego kopiowania plików między komputerami, wykorzystujące SSH do szyfrowania transmisji.

Jest bezpiecznym zamiennikiem niezaszyfrowanego protokołu RCP.

Podstawowa składnia rozróżnia dwie operacje: push (wysyłanie na serwer) i pull (pobieranie z serwera).

SCP jest domyślnie dostępny w każdym systemie z klientem OpenSSH.

SCP jest jednym z tych narzędzi, które na pierwszy rzut oka wydają się proste, ale w codziennej pracy administratora okazują się nieocenione przy szybkim transferze plików między systemami. Mechanizm działania SCP opiera się na protokole SSH, co oznacza, że korzysta z tego samego uwierzytelniania i szyfrowania, co standardowe połączenie terminalowe. Jest to zarówno zaleta, jak i ograniczenie, ponieważ SCP dziedziczy wszystkie właściwości bezpieczeństwa SSH, ale nie oferuje zaawansowanych funkcji dostępnych w dedykowanych protokołach transferu plików.

W nowszych wersjach OpenSSH domyślnie używany jest protokół SFTP jako backend dla SCP, co poprawiło kompatybilność i bezpieczeństwo w porównaniu do starszej implementacji opartej na protokole RCP. To właśnie SFTP (SSH File Transfer Protocol) pełni dziś rolę bezpiecznego odpowiednika klasycznego, niezaszyfrowanego protokołu FTP. Mimo to społeczność administratorów stopniowo odchodzi od SCP na rzecz rsync, który oferuje przesyłanie przyrostowe, kompresję i zachowanie atrybutów plików. Dla prostych, jednorazowych transferów plików SCP wciąż pozostaje najwygodniejszym wyborem ze względu na prostą składnię i powszechną dostępność na wszystkich platformach.

W systemie Windows SCP jest dostępny przez PowerShell po zainstalowaniu opcjonalnej funkcji OpenSSH Client, co ujednolica narzędzia używane w heterogenicznych środowiskach. W przypadku transferu plików między systemem Windows a Linux administrator ma do wyboru także graficzne narzędzia, takie jak WinSCP czy FileZilla, które oferują interfejs z przeciąganiem plików. Niezależnie od wybranego narzędzia, zasada działania pozostaje ta sama, a znajomość składni konsolowej SCP jest przydatna przy pisaniu skryptów automatyzujących kopie zapasowe.

22/50 SCP – składnia push i pull

Push (wysyłanie na serwer):

scp dokument.txt jan@192.168.1.100:/home/jan/

Pull (pobieranie z serwera):

scp jan@192.168.1.100:/home/jan/raport.pdf ./
scp -P 2222 plik.txt jan@127.0.0.1:/tmp/
Dla niestandardowego portu SSH używamy -P (uwaga: duże P!):

Źródło jest pierwszym argumentem, cel drugim.

Odróżnienie operacji push od pull w SCP jest intuicyjne, ale wymaga zrozumienia, że pierwszym argumentem polecenia zawsze jest źródło, a drugim cel. W operacji push źródłem jest plik lokalny, a celem ścieżka zdalna w formacie user@host:ścieżka, natomiast w operacji pull role się odwracają. Dwukropek w składni zdalnej ścieżki SCP jest kluczowym elementem składni, ponieważ to właśnie on odróżnia ścieżkę lokalną od zdalnej i informuje narzędzie, że należy użyć protokołu SSH do transferu.

Częstym błędem popełnianym przez początkujących administratorów jest pomylenie flag portu między ssh a scp, gdzie ssh używa małego -p dla portu, a scp wymaga dużej litery -P. Konsekwencje takiej pomyłki mogą być irytujące, ponieważ scp z małym -p interpretuje to jako flagę preserve zamiast portu, co prowadzi do błędów połączenia. W przypadku niestandardowych portów należy również pamiętać o odpowiednim cytowaniu ścieżek zawierających spacje lub znaki specjalne, które w systemie Linux wymagają użycia cudzysłowu lub znaku ucieczki.

SCP obsługuje również kopiowanie między dwoma zdalnymi hostami bezpośrednio bez pośrednictwa lokalnego komputera, co jest przydatne przy organizowaniu transferu danych między serwerami. Składnia w takim przypadku to scp user1@host1:ścieżka user2@host2:ścieżka, a dane są przesyłane bezpośrednio między hostami przez szyfrowany kanał SSH. Wymaga to jednak uwierzytelnienia na obu hostach, co może być kłopotliwe przy automatycznych skryptach bez skonfigurowanych kluczy SSH.

23/50 SCP – kopiowanie katalogów i atrybutów
scp -r /home/jan/projekt/ jan@192.168.1.100:/backup/
scp -rp /var/log/syslog jan@192.168.1.100:/logi/

Kompresja przy wolnym łączu (-C):

scp -C duzy_plik.tar.gz jan@192.168.1.100:/tmp/

Kopiowanie całych katalogów rekurencyjnie (-r):

Zachowanie atrybutów plików (-p – preserve):

Opcje można łączyć: scp -rCp jan@host:ścieżka.

Kopiowanie całych katalogów za pomocą SCP z flagą -r jest podstawowym sposobem na przesyłanie większych struktur plików między systemami, ale ma pewne ograniczenia, o których warto wiedzieć. Flaga -r kopiuje wszystkie pliki i podkatalogi rekurencyjnie, ale nie zachowuje domyślnie atrybutów takich jak czasy modyfikacji, uprawnienia czy linki symboliczne. W przypadku tworzenia kopii zapasowych kluczowych konfiguracji systemowych użycie flagi -p preserve jest niezbędne do zachowania pierwotnych uprawnień plików i ich znaczników czasowych.

Kompresja danych podczas transferu z flagą -C może znacząco przyspieszyć przesyłanie plików tekstowych, takich jak logi systemowe, pliki konfiguracyjne czy kody źródłowe. W przypadku plików już skompresowanych, takich jak archiwa tar.gz lub obrazy JPG, kompresja SCP nie przynosi korzyści i może nawet spowolnić transfer ze względu na dodatkowe obciążenie procesora. Warto również pamiętać o ograniczeniach przepustowości narzuconych przez opcję -l w SCP, która pozwala na limitowanie prędkości transferu, co jest przydatne przy przesyłaniu plików w godzinach szczytu.

W środowiskach produkcyjnych do regularnych kopii zapasowych zaleca się stosowanie rsync zamiast SCP, ponieważ rsync oferuje transfer przyrostowy wysyłający tylko zmienione fragmenty plików. Rsync jest jednak bardziej złożony w konfiguracji i wymaga zapamiętania większej liczby opcji, podczas gdy SCP jest prostszy i bardziej odpowiedni do jednorazowych transferów. Niezależnie od wybranego narzędzia, kluczowym aspektem bezpieczeństwa jest weryfikacja sumy kontrolnej przesłanych plików, którą można wykonać za pomocą polecenia sha256sum zarówno przed, jak i po transfere.

24/50 SCP – przykłady praktyczne

Przykład 1: Backup pliku konfiguracyjnego:

scp /etc/ssh/sshd_config jan@10.0.0.5:/backup/$(hostname)-sshd_config

Przykład 2: Pobranie logów z serwera:

scp jan@192.168.1.100:/var/log/nginx/access.log ./logi/

Przykład 3: Skrypt kopiujący konfiguracje z backupu:

#!/bin/bash
for plik in "nginx.conf" "sshd_config" "interfaces"; do
  scp backup@10.0.0.5:/backup/$plik ./restore/
done

Praktyczne zastosowania SCP w codziennej administracji są niezwykle różnorodne i wykraczają poza podstawowe kopiowanie plików między serwerami. Przykład backupu pliku konfiguracyjnego sshd_config przed jego modyfikacją ilustruje standardową procedurę bezpieczeństwa, która powinna być stosowana przed każdą zmianą w krytycznych konfiguracjach systemowych. Dodanie do nazwy pliku znacznika czasu lub nazwy hosta za pomocą podwójnego cudzysłowu wykonującego polecenie $(hostname) na lokalnym hoście pozwala na identyfikację kopii zapasowej po czasie i pochodzeniu.

Drugi przykład pokazuje, jak pobierać logi z serwera do analizy lokalnej, co jest szczególnie przydatne w sytuacjach, gdy narzędzia do analizy logów są dostępne tylko na komputerze administratora. Automatyzacja takiego zadania za pomocą wpisu w crontab pozwala na codzienne pobieranie logów ze wszystkich zarządzanych serwerów bez interwencji administratora. W przypadku dużych plików logów warto rozważyć użycie kompresji przez flagę -C lub przesyłanie tylko ostatnich linii za pomocą tail przed transferem.

Trzeci przykład ze slajdu, skrypt kopiujący konfiguracje z backupu, pokazuje, jak łączyć SCP z pętlami bash w celu przywrócenia konfiguracji na wielu serwerach. Tego rodzaju skrypty są podstawą automatyzacji odtwarzania po awarii, gdzie szybkie przywrócenie konfiguracji na kilkudziesięciu serwerach może decydować o czasie przestoju usługi. Warto jednak pamiętać, że w profesjonalnych środowiskach zamiast autorskich skryptów SCP stosuje się dedykowane narzędzia do zarządzania konfiguracją, takie jak Ansible czy Puppet, które oferują zaawansowane funkcje wersjonowania i walidacji.

25/50 PuTTY – klient SSH i Telnet dla Windows
Wskazówka: PuTTY nie wymaga instalacji – wersja portable działa z pendrive'a. Idealne na zestaw narzędzi diagnostycznych.

PuTTY to darmowy, otwartoźródłowy klient SSH, Telnet i Rlogin dla Windows, stworzony przez Simona Tathama.

Jest jednym z najpopularniejszych narzędzi do zdalnych połączeń w środowisku Windows.

Oprócz SSH obsługuje: Telnet (port 23), Rlogin (513), połączenia szeregowe (Serial), tunelowanie portów.

Dołączone narzędzia: PuTTYgen (generowanie kluczy), Pageant (agent SSH), Plink (linia poleceń).

PuTTY jest narzędziem, które mimo swojego wieku wciąż pozostaje jednym z najczęściej używanych klientów SSH w środowisku Windows, głównie ze względu na swoją prostotę i niezawodność. Stworzony przez Simona Tathama w 1999 roku PuTTY od początku był projektem open source, co przyczyniło się do jego popularności i długowieczności w środowisku profesjonalistów IT. W przeciwieństwie do wbudowanego klienta SSH w systemie Windows, który pojawił się dopiero w Windows 10, PuTTY oferował funkcje SSH dla Windows już od początku swojej działalności.

Fakt, że PuTTY nie wymaga instalacji i może działać z pendrivea jako wersja portable, czyni go idealnym narzędziem na zestaw ratunkowy każdego administratora. W sytuacjach awaryjnych, gdy system docelowy nie odpowiada lub wymaga diagnostyki z zewnętrznego nośnika, posiadanie PuTTY na pendrive może okazać się kluczowe. Należy jednak pamiętać, że PuTTY nie jest rozwijany tak aktywnie jak kiedyś, a jego interfejs graficzny może wydawać się przestarzały w porównaniu z nowoczesnymi narzędziami takimi jak MobaXterm.

W zestawie z PuTTY dostarczane są dodatkowe narzędzia, które tworzą spójny ekosystem do zarządzania połączeniami SSH w Windows. PuTTYgen umożliwia generowanie kluczy SSH zarówno w formacie rodzimym PPK, jak i importowanie kluczy z formatu OpenSSH, co jest niezbędne przy pracy w heterogenicznych środowiskach. Pageant działa jako agent SSH przechowujący odblokowane klucze w pamięci, a Plink pozwala na wykonywanie połączeń SSH z wiersza poleceń, co jest przydatne w skryptach automatyzujących zadania administracyjne.

26/50 Instalacja i uruchomienie PuTTY

PuTTY można pobrać z www.putty.org.

Dwie wersje: instalator (MSI) i przenośna (portable).

Instalator standardowo dodaje skróty w menu Start.

Wersja przenośna to pojedynczy plik putty.exe – idealny na pendrive z narzędziami diagnostycznymi.

Ustawienia sesji są przechowywane w rejestrze Windows, ale można je eksportować między instalacjami.

Po uruchomieniu widzimy główne okno: Host Name, Port, Connection type (SSH/Telnet/Serial) i zapisane sesje.

Proces instalacji PuTTY jest niezwykle prosty i sprowadza się do pobrania odpowiedniego pliku z oficjalnej strony projektu putty.org, która prowadzi bezpośrednio do repozytorium na serwerach projektu. Wersja instalacyjna MSI dodaje skróty w menu Start i rejestruje PuTTY w systemie, podczas gdy wersja przenośna to pojedynczy plik wykonywalny, który można uruchomić z dowolnego folderu. Ustawienia sesji w PuTTY są przechowywane w rejestrze Windows w kluczu HKCU, co oznacza, że są dostępne tylko dla bieżącego użytkownika i nie wymagają uprawnień administracyjnych do zapisu.

Wersja przenośna PuTTY jest szczególnie przydatna w środowiskach, w których administrator nie ma uprawnień do instalowania oprogramowania na stacjach roboczych. Wystarczy skopiować plik putty.exe na pendrive wraz z narzędziami takimi jak Wireshark Portable czy Nmap, aby mieć pełny zestaw diagnostyczny zawsze pod ręką. Warto jednak pamiętać, że wersja przenośna nie tworzy wpisów w rejestrze, dlatego sesje skonfigurowane w tej wersji nie będą dostępne po przejściu do innego katalogu, chyba że skorzysta się z opcji eksportu sesji do pliku reg.

Po pierwszym uruchomieniu PuTTY warto dostosować kilka ustawień domyślnych, aby poprawić komfort pracy podczas długich sesji administracyjnych. Zmiana czcionki na monospace, zwiększenie bufora przewijania do minimum 5000 linii oraz włączenie logowania sesji do pliku to podstawowe modyfikacje zalecane dla każdego administratora. Kolorystyka terminala w PuTTY może być dostosowana do indywidualnych preferencji, a zapisanie tych ustawień jako sesji domyślnej Default Settings sprawia, że będą one stosowane automatycznie dla wszystkich nowych połączeń.

27/50 Konfiguracja połączenia SSH w PuTTY
  • Host Name: adres IP lub DNS serwera (np. 192.168.1.100)
  • Port: domyślnie 22 dla SSH
  • Connection type: SSH (lub Telnet, Serial, Rlogin)

Klikamy Open.

Przy pierwszym połączeniu PuTTY wyświetla ostrzeżenie o nieznanym kluczu hosta – weryfikujemy odcisk i akceptujemy.

Klucz prywatny: Connection > SSH > Auth > Private key file – wskazujemy plik PPK.

Klucze z Linuxa (OpenSSH) trzeba konwertować PuTTYgen: Load > Save private key.

Główne okno PuTTY – pola do szybkiego łączenia:

Konfiguracja połączenia SSH w PuTTY różni się od pracy z konsolowym klientem SSH przede wszystkim interfejsem graficznym, który prezentuje wszystkie dostępne opcje w czytelnej strukturze drzewiastej. Po lewej stronie okna konfiguracyjnego znajduje się hierarchiczny podział na kategorie, w którym najważniejsze opcje połączenia dostępne są w kategorii Session. Wprowadzenie adresu IP lub nazwy DNS serwera, ustawienie portu i wybór typu połączenia SSH to minimalny zestaw danych wymaganych do nawiązania połączenia.

W kategorii Connection SSH Auth konfiguruje się uwierzytelnianie kluczami, gdzie klucz prywatny musi być w formacie PPK, charakterystycznym dla PuTTY. Konwersja klucza z formatu OpenSSH do PPK odbywa się w PuTTYgen przez załadowanie klucza prywatnego OpenSSH i zapisanie go w formacie PPK wraz z opcjonalnym hasłem. W kategorii Connection SSH Tunnels konfiguruje się przekazywanie portów lokalne i zdalne, które są odpowiednikiem opcji -L i -R z konsolowego SSH, co pozwala na bezpieczne tunelowanie innych protokołów przez szyfrowane połączenie.

Przy pierwszym połączeniu z nowym serwerem PuTTY wyświetla ostrzeżenie o nieznanym kluczu hosta, podobnie jak konsolowy klient SSH. Weryfikacja odcisku klucza polega na porównaniu wyświetlanego ciągu znaków z wartością uzyskaną na serwerze, a po zaakceptowaniu odcisk jest zapisywany w rejestrze Windows w kluczu HKCU. W przypadku zmiany klucza hosta na serwerze PuTTY wyświetli ostrzeżenie o potencjalnym ataku Man-in-the-Middle i zablokuje połączenie do czasu ręcznego usunięcia starego klucza z rejestru.

28/50 Zapisywanie sesji w PuTTY
  1. Skonfiguruj połączenie (host, port, typ, klucz, tunel)
  2. W polu Saved Sessions wpisz nazwę profilu (np. "Serwer WWW")
  3. Kliknij Save
  4. Następnym razem wybierz profil i kliknij Load, potem Open

Zapisane sesje (rejestr Windows) można eksportować: Session > Export.

Do automatyzacji: plink -load "nazwa_sesji" polecenie.

PuTTY umożliwia zapisanie skonfigurowanego połączenia jako profilu (Saved Session):

Zapisywanie sesji w PuTTY jest funkcją, która przy regularnym zarządzaniu wieloma serwerami oszczędza znaczną ilość czasu i redukuje ryzyko pomyłek konfiguracyjnych. Każda zapisana sesja przechowuje nie tylko adres hosta i port, ale także wszystkie ustawienia z wszystkich kategorii konfiguracyjnych, włączając ścieżki do kluczy prywatnych i reguły tunelowania. Dzięki temu administrator może jednym kliknięciem połączyć się z serwerem z pełną, wcześniej skonfigurowaną sesją, bez potrzeby każdorazowego wprowadzania parametrów.

Profile sesji są przechowywane w rejestrze Windows w ścieżce HKCU Software SimonTatham PuTTY Sessions, co umożliwia ich eksport i import między różnymi komputerami przez zwykły plik reg. Eksport sesji jest szczególnie przydatny przy migracji do nowego komputera lub przy udostępnianiu konfiguracji innym członkom zespołu administracyjnego. W przypadku pracy na wielu komputerach warto rozważyć przechowywanie pliku reg z sesjami w chmurze, co zapewnia dostęp do spójnej konfiguracji z każdej stacji roboczej.

Polecenie plink -load z nazwą sesji umożliwia wykorzystanie zapisanej konfiguracji w skryptach automatyzujących zadania administracyjne. Plink jest narzędziem wiersza poleceń dostarczanym z PuTTY, które zachowuje się jak konsolowy klient SSH i może być używane w skryptach PowerShell lub batch. W połączeniu z agentem Pageant przechowującym odblokowane klucze SSH, plink umożliwia wykonywanie skryptów automatyzujących na wielu serwerach bez interakcji użytkownika.

29/50 Telnet – historyczny protokół terminalowy
Uwaga: Telnet wciąż bywa przydatny jako narzędzie diagnostyczne do testowania portów TCP: telnet host port sprawdza, czy port jest otwarty.

Działa na porcie 23.

Telnet (RFC 854, 1983) to protokół umożliwiający dwukierunkową komunikację tekstową między klientem a serwerem.

W przeciwieństwie do SSH, nie oferuje szyfrowania ani uwierzytelniania – wszystkie dane są przesyłane w czystym tekście.

Oznacza to, że każdy w sieci z dostępem do medium transmisyjnego może przechwycić login i hasło za pomocą sniffera (Wireshark).

Telnet jest dziś uznawany za niebezpieczny i powinien być wyłączony w profesjonalnych sieciach.

Historia Telnetu sięga początków ery Internetu, kiedy sieć ARPANET łączyła zaledwie kilka uniwersytetów i instytucji badawczych, a bezpieczeństwo nie stanowiło priorytetu projektowego. Protokół Telnet zdefiniowany w RFC 854 z 1983 roku był jednym z pierwszych standardów umożliwiających zdalną pracę na komputerach mainframe i minikomputerach w środowisku akademickim. W tamtych czasach dostęp do sieci mieli wyłącznie zaufani użytkownicy, a ryzyko podsłuchiwania transmisji było minimalne ze względu na fizyczne bezpieczeństwo nośników transmisyjnych.

Współcześnie Telnet jest powszechnie uznawany za protokół niebezpieczny i powinien być stosowany wyłącznie w kontrolowanych środowiskach laboratoryjnych. Mimo to wiele starszych urządzeń sieciowych, szczególnie w przemyśle i sektorze energetycznym, wciąż działa z włączonym serwerem Telnet, co stanowi poważne zagrożenie bezpieczeństwa. Administratorzy takich sieci powinni traktować migrację z Telnetu na SSH jako jeden z priorytetowych projektów modernizacyjnych, ponieważ ryzyko przechwycenia haseł w starej infrastrukturze jest bardzo wysokie.

Paradoksalnie Telnet znalazł nowe życie jako narzędzie diagnostyczne do testowania otwarcia portów TCP, ponieważ jego prostota i brak szyfrowania nie stanowią problemu przy testach łączności. Polecenie telnet host port próbuje nawiązać połączenie TCP z określonym hostem i portem, a sukces lub porażka połączenia informuje o dostępności usługi. Do tego samego celu można użyć bezpieczniejszych narzędzi takich jak netcat nc lub nmap, które nie narażają administratora na ryzyko przypadkowego wysłania poufnych danych przez niezaszyfrowany kanał.

30/50 Dlaczego Telnet jest niebezpieczny?

Sposób przechwycenia: w sieci LAN atakujący uruchamia Wireshark z filtrem tcp.port == 23.

W Follow TCP Stream widzi login i hasło w czystym tekście.

Brak szyfrowania powoduje, że cała komunikacja jest jawna.

Administrator łączący się przez Telnet do routera przesyła hasło w czystym tekście.

Dodatkowe zagrożenia: atak Man-in-the-Middle (podszycie pod serwer), brak integralności (możliwość modyfikacji transmisji), brak ochrony przed atakami replay.

Niebezpieczeństwo protokołu Telnet najlepiej unaocznić przez praktyczny eksperyment z użyciem analizatora sieciowego Wireshark, który może być przeprowadzony w każdym laboratorium sieciowym. Ustawienie filtra tcp.port == 23 w Wiresharku powoduje przechwycenie wszystkich pakietów związanych z połączeniem Telnet, a opcja Follow TCP Stream rekonstruuje całą sesję w czytelnej formie tekstowej. W odtworzonej sesji administrator widzi nie tylko wpisywane polecenia, ale także nazwę użytkownika i hasło w czystym tekscie, co unaocznia skalę zagrożenia w sieciach lokalnych.

Atak Man-in-the-Middle na Telnet jest szczególnie niebezpieczny, ponieważ atakujący może nie tylko biernie podsłuchiwać transmisję, ale także aktywnie modyfikować przesyłane dane. W praktyce oznacza to, że osoba atakująca może podmienić polecenie konfiguracyjne wysyłane do routera, zmienić adres serwera DNS w konfiguracji urządzenia lub wstrzyknąć złośliwe polecenia do sesji administracyjnej. Brak mechanizmu integralności danych w Telnecie uniemożliwia wykrycie takich modyfikacji zarówno po stronie klienta, jak i serwera.

Kolejnym poważnym zagrożeniem jest atak typu replay, w którym atakujący przechwytuje sesję Telnet i odtwarza ją później, podszywając się pod administratora. Ponieważ Telnet nie stosuje żadnych znaczników czasowych ani unikalnych identyfikatorów sesji, przechwycone pakiety z danymi uwierzytelniającymi mogą być użyte wielokrotnie do logowania na serwer. W przypadku gdy hasło administratora nie zostanie zmienione między momentem przechwycenia a momentem ataku, osoba atakująca może uzyskać pełną kontrolę nad urządzeniem bez wiedzy administratora.

31/50 SSH vs Telnet – porównanie
CechaSSHTelnet
PortTCP 22TCP 23
SzyfrowanieTak (AES, ChaCha20)Brak (plaintext)
Uwierzytelnianie serweraTak (klucz hosta)Brak
Uwierzytelnianie klientaHasło lub kluczeHasło (jawne)
Integralność danychTak (MAC)Brak
TunelowanieTak (-L, -R, -D)Brak
BezpieczeństwoWysokieBardzo niskie
Zasada: do zdalnego logowania zawsze używamy SSH.

Telnet tylko do testowania otwarcia portów (telnet host port).

Tabela porównawcza SSH i Telnetu uwidacznia fundamentalne różnice w podejściu do bezpieczeństwa zdalnych połączeń, które ewoluowały wraz z rozwojem świadomości zagrożeń sieciowych. SSH został zaprojektowany od podstaw z myślą o bezpieczeństwie w nieufnym środowisku sieciowym, podczas gdy Telnet powstał w czasach, gdy sieci były zamknięte i zaufane. Każda cecha SSH, od szyfrowania przez uwierzytelnianie serwera po integralność danych, stanowi odpowiedź na konkretne zagrożenie, które w przypadku Telnetu pozostaje całkowicie niezaadresowane.

Różnica w podejściu do uwierzytelniania serwera jest jedną z kluczowych innowacji SSH w porównaniu do Telnetu. W Telnecie klient nie ma możliwości zweryfikowania tożsamości serwera, co umożliwia atakującemu łatwe podszycie się pod legalny serwer i przechwycenie danych logowania użytkownika. SSH rozwiązuje ten problem przez klucze hosta i mechanizm known_hosts, gdzie klient przechowuje odciski kluczy serwerów i weryfikuje je przy każdym połączeniu, ostrzegając użytkownika w przypadku rozbieżności.

Integralność danych zapewniana przez SSH przez kody uwierzytelniające wiadomości MAC gwarantuje, że dane nie zostały zmodyfikowane podczas transmisji. W Telnecie brak tego mechanizmu oznacza, że atakujący może zmieniać przesyłane dane bez wiedzy którejkolwiek ze stron komunikacji. Możliwość tunelowania portów SSH dodatkowo rozszerza funkcjonalność protokołu poza podstawowe zdalne logowanie, umożliwiając bezpieczne przesyłanie ruchu innych protokołów przez szyfrowany kanał, co jest całkowicie niemożliwe w przypadku Telnetu.

32/50 Połączenie szeregowe – Serial Console

Połączenie szeregowe (RS-232, port COM) to jeden z najstarszych sposobów komunikacji z urządzeniami sieciowymi.

Mimo powszechności, konsola szeregowa pozostaje kluczowa przy pierwszej konfiguracji routerów i przełączników, urządzeń wbudowanych i systemów bez interfejsu sieciowego.

Standard RS-232 definiuje transmisję asynchroniczną z sygnałami: TX (nadawanie), RX (odbiór), GND (masa), RTS/CTS (kontrola przepływu).

Parametry połączenia: prędkość (9600, 115200 bps), bity danych (7 lub 8), parzystość (none/even/odd), bity stopu (1 lub 2).

Połączenie szeregowe RS-232 jest technologią, która mimo swojego wieku i pozornego archaizmu wciąż odgrywa kluczową rolę w administracji urządzeniami sieciowymi i systemami wbudowanymi. Standard RS-232 zdefiniowany w 1960 roku przez Electronics Industries Association określa elektryczne i mechaniczne właściwości interfejsu szeregowego, w tym napięcia sygnałów, typy złączy i przypisanie pinów. W praktyce administracyjnej najczęściej spotyka się kabel konsolowy zakończony złączem RJ-45 po stronie urządzenia sieciowego i DB9 po stronie komputera lub przejściówki USB-serial.

Parametry transmisji szeregowej, takie jak prędkość, liczba bitów danych, bit parzystości i bity stopu, muszą być zgodne po obu stronach połączenia, aby komunikacja przebiegała poprawnie. Dla urządzeń sieciowych Cisco standardem jest prędkość 9600 bodów, 8 bitów danych, brak parzystości i 1 bit stopu, co w skrócie zapisuje się jako 9600 8N1. W przypadku urządzeń przemysłowych i serwerów parametry mogą się różnić, dlatego przed nawiązaniem połączenia warto sprawdzić dokumentację techniczną urządzenia.

W nowoczesnych laptopach port RS-232 praktycznie nie występuje, co wymusza stosowanie przejściówek USB-serial opartych na popularnych układach FTDI lub Prolific. Podłączenie przejściówki do systemu Linux powoduje pojawienie się urządzenia /dev/ttyUSB0, które jest traktowane przez system jak standardowy port szeregowy. Warto inwestować w przejściówki renomowanych producentów, ponieważ tanie zamienniki często zawodzą w krytycznych momentach i mogą powodować problemy z autoryzacją urządzenia przez system operacyjny.

33/50 Narzędzia do konsoli szeregowej
# screen do połączenia szeregowego
screen -T xterm /dev/ttyUSB0 115200

# minicom - konfiguracja (sudo minicom -s)
minicom -D /dev/ttyUSB0 -b 115200

Linux: screen, minicom, picocom, cu, PuTTY (tryb Serial).

Windows: PuTTY (Connection type: Serial, Serial line: COM3, Speed: 115200).

macOS: screen /dev/cu.usbserial-* 115200.

Wybór narzędzia do obsługi konsoli szeregowej w systemie Linux zależy od preferencji administratora i charakteru wykonywanych zadań, ale znajomość przynajmniej dwóch z nich jest niezbędna w codziennej pracy. Program screen jest najprostszym rozwiązaniem wymagającym podania urządzenia i prędkości transmisji, co czyni go idealnym do szybkich połączeń awaryjnych. Po uruchomieniu screen -T xterm /dev/ttyUSB0 115200 administrator uzyskuje natychmiastowy dostęp do konsoli urządzenia, a zamknięcie sesji następuje przez kombinację klawiszy Ctrl+A, a następnie k.

Minicom oferuje bardziej zaawansowane funkcje, w tym możliwość zapisywania profili konfiguracyjnych dla różnych urządzeń i logowania sesji do pliku. Pierwsze uruchomienie minicom -s otwiera menu konfiguracyjne, w którym ustawia się parametry transmisji i zapisuje profil, co pozwala na szybkie łączenie się z różnymi urządzeniami bez każdorazowego wprowadzania parametrów. W systemie Windows PuTTY w trybie Serial zapewnia wygodny interfejs graficzny do konfiguracji połączeń szeregowych, gdzie wszystkie parametry dostępne są w przejrzystym formularzu.

Niezależnie od wybranego narzędzia, kluczowe znaczenie ma ustawienie prawidłowych parametrów transmisji zgodnych z konfiguracją urządzenia docelowego. Błędne ustawienie prędkości transmisji skutkuje pojawieniem się na ekranie niezrozumiałych znaków, które są rezultatem nieprawidłowej synchronizacji sygnałów. W przypadku problemów z połączeniem warto zacząć od sprawdzenia, czy przejściówka USB-serial jest prawidłowo rozpoznana przez system za pomocą polecenia lsusb i czy plik urządzenia /dev/ttyUSB0 ma odpowiednie uprawnienia dostępu dla bieżącego użytkownika.

34/50 Zastosowania konsoli szeregowej
  1. Pierwsza konfiguracja urządzenia: router/switch bez adresu IP i interfejsu sieciowego – administracja przez kabel konsolowy.
  2. Odzyskiwanie systemu: bootloader (GRUB, U-Boot) na konsoli szeregowej – ratowanie systemu, zmiana parametrów jądra.
  3. Debugowanie jądra Linux: console=ttyS0,115200n8 w parametrach GRUB – logi jądra na porcie szeregowym.
  4. Serwery dedykowane: serwery w DC mają konsolę szeregową dostępną przez IPMI lub dedykowany przełącznik KVM.

Zastosowania konsoli szeregowej w administracji sieciowej są znacznie szersze, niż mogłoby się wydawać na pierwszy rzut oka, i obejmują zarówno rutynowe konfiguracje, jak i krytyczne procedury awaryjne. Pierwsza konfiguracja urządzenia sieciowego przez kabel konsolowy jest często jedyną możliwością, ponieważ nowy router lub switch nie ma jeszcze skonfigurowanego adresu IP i interfejsu sieciowego. W takich przypadkach konsola szeregowa stanowi jedyne okno do systemu operacyjnego urządzenia, a administrator musi znać parametry połączenia domyślnie ustawione przez producenta.

Odzyskiwanie systemu po awarii to kolejny scenariusz, w którym konsola szeregowa jest niezastąpiona, szczególnie gdy system nie uruchamia się prawidłowo i nie odpowiada na połączenia sieciowe. W bootloaderze GRUB dostęp do konsoli szeregowej pozwala na edycję parametrów jądra, uruchomienie systemu w trybie pojedynczego użytkownika lub załadowanie alternatywnego jądra. W przypadku serwerów dedykowanych w centrach danych konsola szeregowa jest często dostępna przez interfejs IPMI, który umożliwia zarządzanie serwerem na poziomie sprzętowym niezależnie od stanu systemu operacyjnego.

Debugowanie jądra Linux przez konsolę szeregową z parametrem console=ttyS0 to technika stosowana przez zaawansowanych administratorów i programistów jądra do diagnozowania problemów z uruchamianiem systemu. Wszystkie komunikaty jądra, włącznie z panicznymi błędami kernel panic, są przesyłane przez port szeregowy i mogą być analizowane na innym komputerze podłączonym kablem konsolowym. W środowiskach laboratoryjnych warto przećwiczyć scenariusz odzyskiwania hasła root przez konsolę szeregową, ponieważ jest to jedna z najczęściej sprawdzanych umiejętności podczas egzaminów certyfikacyjnych Cisco i Linux.

35/50 PuTTY w trybie Serial
  • Serial line: nazwa portu COM (COM1, COM3) lub plik urządzenia w Linux (/dev/ttyUSB0)
  • Speed: prędkość transmisji (9600, 115200, itd.)
  • Data bits: 7 lub 8 (zwykle 8)
  • Stop bits: 1 lub 2 (zwykle 1)
  • Parity: None, Even, Odd, Mark, Space (zwykle None)
  • Flow control: XON/XOFF, RTS/CTS, None (zwykle None)

Pojawią się opcje:

W PuTTY wybieramy Connection type: Serial.

Połączenie szeregowe można zapisać jako sesję i ładować jednym kliknięciem.

Konfiguracja połączenia szeregowego w PuTTY różni się znacząco od konfiguracji połączenia SSH, ponieważ wymaga znajomości parametrów transmisji szeregowej specyficznych dla podłączanego urządzenia. Po wybraniu opcji Connection type Serial w głównym oknie PuTTY pojawiają się pola do ustawienia portu szeregowego szybkości transmisji i parametrów ramki. Pole Serial line w Windows przyjmuje wartości COM1, COM2 lub COM3 w zależności od tego, do którego portu fizycznego lub wirtualnego podłączona jest przejściówka USB-serial.

Ustawienie szybkości transmisji speed jest najważniejszym parametrem, który musi być zgodny z prędkością skonfigurowaną na urządzeniu docelowym. Dla urządzeń sieciowych Cisco standardem jest 9600 bodów, dla serwerów i urządzeń przemysłowych częściej spotyka się 115200 bodów, a starsze urządzenia mogą wymagać prędkości 2400 lub 4800 bodów. Pozostałe parametry, czyli bity danych data bits, bity stopu stop bits i parzystość parity, w większości przypadków pozostawia się na wartościach domyślnych 8, 1 i None, które są standardem dla nowoczesnych urządzeń.

Połączenie szeregowe w PuTTY można zapisać jako sesję tak samo jak połączenie SSH, co pozwala na szybkie przełączanie się między różnymi urządzeniami konsolowymi. Zapisana sesja przechowuje wszystkie parametry transmisji, włącznie z wyborem portu COM i szybkością transmisji, eliminując konieczność każdorazowej konfiguracji. W przypadku pracy z wieloma urządzeniami laboratoryjnymi posiadanie zapisanych sesji dla każdego z nich znacząco podnosi komfort pracy i redukuje ryzyko błędów konfiguracyjnych przy ponownym łączeniu.

36/50 VNC – Virtual Network Computing

VNC (Virtual Network Computing) umożliwia zdalny dostęp do pulpitu graficznego komputera.

Inaczej niż SSH (tylko terminal), VNC przesyła obraz ekranu i zdarzenia klawiatury/myszy.

Działa na zasadzie RFB (Remote Framebuffer Protocol) na porcie 5900+N, gdzie N to numer wyświetlacza.

Tryby pracy: desktop sharing (współdzielenie bieżącego pulpitu) i sesja równoległa (osobna sesja X).

VNC jest przydatne do pomocy zdalnej, administracji serwerem Windows lub pracy z aplikacjami graficznymi na Linux.

Wady: transmisja niezabezpieczona (brak szyfrowania w podstawowym VNC), niska wydajność przy słabym łączu.

VNC jest jedynym przedstawionym w tym materiale narzędziem umożliwiającym zdalną pracę z pełnym interfejsem graficznym, co ma znaczenie przy administracji systemami Windows oraz przy pracy z aplikacjami wymagającymi środowiska graficznego na Linux. Protokół RFB Remote Framebuffer stanowiący podstawę VNC został opracowany przez Olivetti Research Laboratory w Cambridge pod koniec lat dziewięćdziesiątych i od tego czasu doczekał się wielu implementacji. Zasada działania VNC polega na okresowym przesyłaniu obrazu pulpitu zdalnego komputera do klienta, który wyświetla go na lokalnym ekranie i odsyła zdarzenia klawiatury oraz myszy z powrotem do serwera.

Wydajność VNC zależy od przepustowości łącza i częstotliwości odświeżania pulpitu, przy czym nowoczesne implementacje stosują zaawansowane algorytmy kompresji obrazu. VNC domyślnie przesyła tylko zmienione obszary ekranu, co znacząco redukuje ilość przesyłanych danych w porównaniu do przesyłania całego obrazu przy każdej zmianie. Mimo tych optymalizacji VNC jest mniej wydajny od RDP w środowiskach z ograniczoną przepustowością, szczególnie przy odtwarzaniu wideo lub animacjach interfejsu użytkownika.

Największym wyzwaniem związanym z bezpieczeństwem VNC jest brak wbudowanego szyfrowania w podstawowej wersji protokołu, co oznacza, że cały ruch między klientem a serwerem, włącznie z hasłem dostępu do sesji, jest przesyłany jawnie. Rozwiązaniem tego problemu jest tunelowanie VNC przez SSH, które dodaje warstwę szyfrowania do istniejącego połączenia VNC bez modyfikacji samych aplikacji. Alternatywnie można korzystać z implementacji VNC oferujących wbudowane szyfrowanie, takich jak TightVNC z SSL lub RealVNC w wersji Enterprise, które są jednak płatne w pełnej wersji.

37/50 Konfiguracja serwera VNC w Linux
sudo apt install tigervnc-standalone-server
vncserver :1 -geometry 1280x1024 -depth 24
vncserver -kill :1

Instalacja:

Plik konfiguracyjny: ~/.vnc/config.

tigervnc-standalone-server – popularna implementacja VNC w Linux.

Domyślnym menedżerem okien jest zwykle twm (w niektórych dystrybucjach xfce4).

Uruchomienie serwera dla użytkownika (pierwsze uruchomienie pyta o hasło):

Serwer nasłuchuje na porcie 5901 (5900+1).

Zatrzymanie serwera:

Konfiguracja serwera VNC w systemie Linux z użyciem TigerVNC jest procesem, który pozwala na uruchomienie zdalnego pulpitu graficznego dla wielu użytkowników jednocześnie. Każda sesja VNC ma przypisany numer wyświetlacza, który określa port nasłuchu według wzoru 5900+N, gdzie N to numer wyświetlacza. Na przykład sesja :1 nasłuchuje na porcie 5901, sesja :2 na porcie 5902, co pozwala na uruchomienie wielu niezależnych sesji graficznych dla różnych użytkowników tego samego serwera.

Pierwsze uruchomienie vncserver wymaga ustawienia hasła dostępu do sesji VNC, które jest niezależne od hasła systemowego użytkownika i przechowywane w pliku ~/.vnc/passwd w postaci zaszyfrowanej. Hasło to służy wyłącznie do uwierzytelnienia połączenia VNC i nie daje dostępu do systemu operacyjnego, co stanowi dodatkową warstwę zabezpieczeń. Domyślnym menedżerem okien uruchamianym w sesji VNC jest twm, który jest bardzo podstawowym środowiskiem graficznym, dlatego w praktyce zastępuje się go przez xfce4-session lub startplasma w przypadku środowiska KDE.

W środowisku produkcyjnym serwer VNC często konfiguruje się jako usługę systemd z ograniczeniem nasłuchu do interfejsu pętli lokalnej przez opcję -localhost. Takie ustawienie wymusza korzystanie z tunelu SSH do połączenia z serwerem VNC, co zapewnia szyfrowanie transmisji na poziomie protokołu SSH. Plik konfiguracyjny ~/.vnc/config umożliwia ustawienie domyślnych parametrów sesji, takich jak rozdzielczość ekranu, głębia kolorów i menedżer okien, co pozwala na ujednolicenie konfiguracji dla wszystkich nowo tworzonych sesji.

38/50 Klient VNC i tunelowanie przez SSH

Bezpieczny VNC – tunelowanie przez SSH:

# Krok 1: Tunel SSH z lokalnym przekazaniem portu
ssh -L 5901:localhost:5901 jan@192.168.1.100

# Krok 2: W drugim terminalu uruchom klienta VNC
vncviewer localhost:5901

Cały ruch VNC jest szyfrowany przez SSH.

Najpopularniejsze klienty VNC: TigerVNC (vncviewer), RealVNC, TightVNC, UltraVNC (Windows).

Wszystkie obsługują podstawowy protokół RFB.

Hasło VNC chroni przed niepowołanym dostępem do sesji, a SSH przed podsłuchiwaniem.

Procedura bezpiecznego korzystania z VNC przez tunel SSH jest standardem w profesjonalnych środowiskach administracyjnych i powinna być stosowana zawsze, gdy VNC jest używany poza bezpieczną siecią lokalną. Pierwszym krokiem jest nawiązanie połączenia SSH z opcją -L lokalne przekazanie portu, w którym ruch z lokalnego portu 5901 jest przekierowywany przez szyfrowany kanał SSH do portu 5901 na zdalnym serwerze. W drugim terminalu lub oknie uruchamiamy klienta VNC z adresem localhost:5901, który łączy się z lokalnym portem przekierowanym przez tunel SSH.

Po nawiązaniu tunelu SSH cały ruch VNC między klientem a serwerem jest szyfrowany przez protokół SSH, co eliminuje główne zagrożenie związane z brakiem szyfrowania w samym VNC. Hasło VNC chroni przed niepowołanym dostępem do sesji na poziomie protokołu RFB, podczas gdy tunel SSH chroni przed podsłuchiwaniem transmisji w sieci. Taka kombinacja zabezpieczeń zapewnia dwuwarstwową ochronę, gdzie każde z zabezpieczeń adresuje inne zagrożenie, a ich połączenie daje efekt synergii zwiększający ogólne bezpieczeństwo.

Wybór konkretnego klienta VNC zależy od systemu operacyjnego i preferencji użytkownika, przy czym TigerVNC vncviewer jest standardowym wyborem w systemie Linux. RealVNC oferuje wersję dla wszystkich platform z synchronizacją haseł przez konto internetowe, TightVNC jest lekką implementacją o otwartym kodzie źródłowym, a UltraVNC dla Windows oferuje dodatkowe funkcje, takie jak transfer plików i czat. Niezależnie od wybranego klienta, procedura tunelowania przez SSH pozostaje taka sama i jest zalecana do stosowania we wszystkich scenariuszach zdalnego dostępu do pulpitu.

39/50 VNC vs RDP vs X2Go
CechaVNCRDP (MS)X2Go
ProtokółRFBRDP (Microsoft)NX (NoMachine)
SzyfrowanieOpcjonalne (SSH)Wbudowane (TLS)Wbudowane (SSH)
Transfer plikówNieTak (drive redirection)Tak
Drukarka zdalnaNieTakTak
WydajnośćŚredniaBardzo dobraDobra
PlatformyWieloplatformowyWindows (+ klienci)Linux (+ klienci)

X2Go to dobra alternatywa dla Linux.

RDP jest wydajniejszy i bezpieczniejszy od VNC (wbudowane szyfrowanie, kompresja), a na Windows Server przy wielu równoczesnych sesjach wymaga licencji RDS (Remote Desktop Services).

Wybór odpowiedniego narzędzia do zdalnego pulpitu graficznego ma kluczowe znaczenie dla efektywności pracy w środowiskach heterogenicznych łączących systemy Windows i Linux. RDP Remote Desktop Protocol firmy Microsoft jest zdecydowanie najlepszym wyborem w środowiskach Windows, oferującym wbudowane szyfrowanie TLS, kompresję danych i wsparcie dla wielu monitorów. W systemie Windows klient RDP jest wbudowany w system operacyjny jako narzędzie mstsc.exe i nie wymaga instalacji dodatkowego oprogramowania, co czyni go domyślnym narzędziem do zdalnej administracji stacji Windows i serwerów z sesją graficzną.

VNC pozostaje najlepszym wyborem w środowiskach heterogenicznych, gdzie administrator musi łączyć się z różnymi platformami systemowymi z jednego komputera. Wieloplatformowość VNC oznacza, że serwer VNC uruchomiony na Linux może być obsługiwany z klienta na Windows i odwrotnie, co jest kluczowe w organizacjach z różnorodną infrastrukturą. Wadą VNC w porównaniu do RDP jest niższa wydajność i brak wbudowanego szyfrowania, co wymusza tunelowanie przez SSH w środowiskach produkcyjnych.

X2Go stanowi ciekawą alternatywę dla środowisk Linux, łączącą zalety SSH i NX w jednym spójnym narzędziu z wbudowanym szyfrowaniem przez SSH. X2Go oferuje sesje równoległe, które mogą być wznawiane po przerwaniu połączenia, obsługę udostępniania folderów lokalnych na zdalnym pulpicie oraz możliwość wyboru lekkiego menedżera okien dla oszczędności przepustowości. W przypadku stałych środowisk Linux warto rozważyć X2Go jako alternatywę dla VNC, szczególnie w scenariuszach, w których priorytetem jest wydajność przy ograniczonym łączu.

40/50 GNU Screen – multiplexer terminala
# Uruchomienie sesji screen
screen -S moja_sesja

# Odłączenie (detach): Ctrl+A, d
# Ponowne podłączenie
screen -r moja_sesja

# Lista sesji
screen -ls

GNU screen to multiplexer terminala: pozwala na wiele wirtualnych terminali w jednym połączeniu, odłączanie i ponowne podłączanie sesji, oraz współdzielenie sesji między użytkownikami.

Screen rozwiązuje problem zrywanych połączeń – uruchomiony proces nie ginie po rozłączeniu SSH.

Administrator wraca do domu i kontynuuje pracę od miejsca, w którym skończył.

GNU Screen jest jednym z najstarszych narzędzi do multipleksowania terminala, które mimo upływu lat wciąż znajduje zastosowanie w codziennej pracy administratorów systemów Unixowych. Historia Screen sięga 1987 roku, kiedy to został napisany przez Olivera Laumann dla systemów Unix, a od 1995 roku jest rozwijany jako GNU Screen, dostępny domyślnie w wielu dystrybucjach Linux i systemach BSD. Głównym zadaniem Screen jest umożliwienie uruchamiania wielu wirtualnych terminali w ramach jednego połączenia SSH, z możliwością odłączania się i ponownego podłączania bez utraty uruchomionych procesów.

Mechanizm działania Screen polega na przechwytywaniu strumienia wejścia i wyjścia terminala oraz zarządzaniu buforami dla każdego wirtualnego okna. Kombinacja klawiszy Ctrl+A stanowi prefiks, po którym wpisuje się polecenia takie jak c do utworzenia nowego okna, n i p do przełączania między oknami, a d do odłączenia sesji. Wszystkie uruchomione programy w oknach Screen kontynuują działanie nawet po rozłączeniu się użytkownika, co chroni przed utratą postępu długotrwałych zadań, takich jak kompilacja kodu czy przesyłanie dużych plików.

Screen oferuje także funkcje zaawansowane, w tym dzielenie ekranu na regiony split screen, logowanie całej sesji do pliku oraz możliwość współdzielenia sesji między wieloma użytkownikami. Współdzielenie sesji jest przydatne w scenariuszach szkoleniowych lub przy zdalnym rozwiązywaniu problemów, gdzie doświadczony administrator może obserwować pracę mniej doświadczonego kolegi. Konfiguracja Screen odbywa się przez plik ~/.screenrc, w którym można zdefiniować domyślne ustawienia okien, skróty klawiszowe i wygląd paska statusu.

41/50 tmux – nowoczesny multiplexer terminala
# Nowa sesja tmux
tmux new -s sesja

# Odłączenie: Ctrl+B, d
# Ponowne podłączenie
tmux attach -t sesja

# Podział okna w poziomie: Ctrl+B "
# Podział w pionie: Ctrl+B %
# Przełączanie paneli: Ctrl+B strzałka

tmux (terminal multiplexer) to nowoczesna alternatywa dla screen, z bardziej przejrzystą konfiguracją, obsługą podziału okien na panele i lepszym zarządzaniem sesjami.

tmux pozwala na pracę jak w IDE – w jednym oknie terminala kilka paneli z różnymi widokami.

tmux jest nowoczesnym multiplexerem terminala, który w ciągu ostatniej dekady zyskał ogromną popularność w społeczności administratorów i programistów, wypierając starszego Screen w wielu środowiskach. Stworzony przez Nicholasa Marriott w 2007 roku tmux od początku był projektowany z myślą o nowoczesnych standardach terminala, w tym pełnej obsłudze kolorów 256, zestawów znaków Unicode i protokołu myszy. W przeciwieństwie do Screen, tmux oferuje natywny podział okna na panele w poziomie przez Ctrl+B " oraz w pionie przez Ctrl+B , co pozwala na jednoczesny podgląd wielu źródeł informacji.

Zarządzanie sesjami w tmux jest bardziej intuicyjne niż w Screen, a lista aktywnych sesji dostępna jest pod poleceniem tmux ls w konsoli. W tmux można tworzyć wiele sesji jednocześnie, każdą z własnym zestawem okien i paneli, co jest przydatne przy pracy nad różnymi projektami na różnych serwerach. Podział na sesje, okna i panele tworzy trzypoziomową hierarchię pozwalającą na elastyczne organizowanie przestrzeni roboczej, gdzie każdy poziom można dowolnie nazywać i przełączać się między nimi.

Plik konfiguracyjny ~/.tmux.conf umożliwia pełne dostosowanie zachowania tmux do indywidualnych preferencji użytkownika. W pliku tym można zmienić domyślny prefiks z Ctrl+B na inną kombinację, ustawić numerację okien od 1 zamiast 0, włączyć obsługę myszy do przewijania i zaznaczania tekstu oraz skonfigurować pasek statusu. Społeczność tmux stworzyła wiele użytecznych dodatków, w tym tmux-powerline do zaawansowanego paska statusu, tmux-resurrect do automatycznego zapisywania i przywracania sesji oraz tmux-yank do integracji ze schowkiem systemowym.

42/50 screen vs tmux – porównanie
Cechascreentmux
Rok wydania19872007
PrefiksCtrl+ACtrl+B
Panele (split)Tylko oknaTak (poziomy/pionowy)
Konfiguracja~/.screenrc~/.tmux.conf
SkryptowanieOgraniczoneRozbudowane API
Obsługa myszyOgraniczonaPełna (set -g mouse on)
Harmonogram (status bar)PodstawowyRozbudowany (tmux-powerline)

Oba narzędzia są dostępne w repozytoriach.

Wybór zależy od preferencji – screen jest prostszy, tmux nowocześniejszy.

Porównanie Screen i tmux jest częstym tematem dyskusji w społeczności administratorów, gdzie oba narzędzia mają swoich zagorzałych zwolenników i przeciwników. Screen jako starsze narzędzie z 1987 roku ma przewagę w postaci powszechnej dostępności na starszych systemach Unix i BSD, gdzie często jest jedynym dostępnym multiplexerem. tmux natomiast, jako projekt nowszy z 2007 roku, został zaprojektowany z myślą o współczesnych terminalach i oferuje bardziej rozbudowaną funkcjonalność przy czytelniejszej składni konfiguracji.

Najważniejszą różnicą funkcjonalną między Screen a tmux jest obsługa podziału okna na panele, która w Screen jest ograniczona do przełączania między pełnoekranowymi oknami. tmux umożliwia podział okna na dowolną liczbę paneli w pionie i poziomie, co pozwala na jednoczesny podgląd wielu źródeł informacji w jednym widoku. Kolejną istotną różnicą jest obsługa myszy, która w tmux działa płynnie po włączeniu opcji set -g mouse on, podczas gdy w Screen wymaga skomplikowanej konfiguracji i działa z ograniczeniami.

Dla osób rozpoczynających pracę z multiplexerami zaleca się tmux ze względu na lepszą dokumentację, aktywną społeczność i intuicyjniejszą składnię poleceń. W praktyce znajomość obu narzędzi jest atutem na rynku pracy, ponieważ starsze systemy produkcyjne mogą wymagać pracy z Screen, a nowsze środowiska wykorzystują tmux. Niezależnie od wyboru, każde z tych narzędzi znacząco podnosi efektywność pracy administratora i chroni przed utratą sesji w przypadku przerwania połączenia sieciowego.

43/50 Zastosowania screen/tmux w administracji
tmux new -s monitoring \; split-window -h \; \
  select-pane -t 0 \; send-keys "htop" Enter \; \
  select-pane -t 1 \; send-keys "tail -f /var/log/syslog" Enter
  1. Długotrwałe zadania: aktualizacja systemu, kompilacja jądra, backup – screen/tmux chroni przed utratą sesji.
  2. Monitorowanie logów: w jednym oknie tail -f /var/log/syslog, w drugim htop, w trzecim polecenia.
  3. Współdzielenie sesji: tmux pozwala podłączyć dwóch użytkowników do tej samej sesji – współpraca na żywo.
  4. Praca z serwerem bez GUI: pełna "konsola" z podziałem na panele, jak IDE w terminalu.

Zastosowania multiplexerów w codziennej administracji są niezwykle różnorodne i wykraczają daleko poza podstawową ochronę przed utratą sesji, która jest najczęściej przytaczaną zaletą. Długotrwałe zadania, takie jak aktualizacja całego systemu operacyjnego, kompilacja jądra Linux czy przesyłanie wielogigabajtowych plików między serwerami, mogą trwać godziny, a przerwanie połączenia SSH w trakcie ich wykonania grozi uszkodzeniem systemu. Uruchomienie takich zadań w sesji Screen lub tmux gwarantuje, że proces będzie kontynuowany nawet po rozłączeniu administratora, a po ponownym połączeniu można sprawdzić postęp i ewentualne błędy.

Monitorowanie logów w podzielonych panelach to kolejne powszechne zastosowanie, w którym administrator może jednocześnie obserwować kilka strumieni informacji. W jednym panelu tmux można uruchomić htop do monitorowania obciążenia systemu, w drugim tail -f do śledzenia logów aplikacji, a w trzecim interaktywną konsolę do wydawania poleceń. Taka konfiguracja zastępuje konieczność przełączania się między wieloma oknami terminala i pozwala na szybsze reagowanie na zmiany w monitorowanych parametrach.

Współdzielenie sesji między wieloma administratorami jest funkcją szczególnie przydatną w szkoleniach i przy zdalnym rozwiązywaniu problemów. W tmux można podłączyć dwóch użytkowników do tej samej sesji przez polecenie tmux attach -t nazwa_sesji, co pozwala na jednoczesną pracę w tym samym terminalu. Skryptowanie tmux z wykorzystaniem send-keys umożliwia automatyzację tworzenia gotowych układów okien dla konkretnych zadań monitorowania, co jest przydatne przy cyklicznych przeglądach stanu serwerów.

44/50 SuperPuTTY – zarządzanie wieloma sesjami

SuperPuTTY jest darmowy i open-source.

SuperPuTTY to nakładka na PuTTY ułatwiająca zarządzanie wieloma oknami połączeń.

Zamiast dziesiątek osobnych okien PuTTY, SuperPuTTY oferuje interfejs z zakładkami (tabs) i drzewiastą listą sesji.

Funkcje: grupowanie serwerów (foldery), import/eksport sesji z PuTTY, automatyczne logowanie, przechwytywanie wyjścia do pliku, szybkie wysyłanie poleceń do wielu sesji jednocześnie.

Czytelnie organizuje pulę serwerów administratora.

SuperPuTTY rozwiązuje jeden z najbardziej dokuczliwych problemów administratorów pracujących w systemie Windows, którym jest zarządzanie wieloma oknami PuTTY rozrzuconymi po pulpicie. Zamiast dziesiątek osobnych okien PuTTY, z których każde trzeba ręcznie lokalizować na pasku zadań, SuperPuTTY organizuje wszystkie połączenia w jednym oknie z zakładkami na wzór przeglądarki internetowej. Drzewiasta lista sesji po lewej stronie okna pozwala na grupowanie serwerów w foldery według funkcji, lokalizacji lub systemu operacyjnego, co ułatwia nawigację przy dużej liczbie zarządzanych hostów.

Funkcja szybkiego wysyłania poleceń do wielu sesji jednocześnie jest szczególnie przydatna w sytuacjach, gdy trzeba wykonać tę samą operację na grupie serwerów. Administrator może zaznaczyć kilka sesji w drzewie, wpisać polecenie w dedykowanym polu i wysłać je do wszystkich wybranych sesji jednocześnie, co znacząco przyspiesza wykonywanie rutynowych zadań. Warto jednak zachować ostrożność przy używaniu tej funkcji, ponieważ błędne polecenie wysłane do wielu serwerów może spowodować rozległe problemy w infrastrukturze.

Ze względów bezpieczeństwa nie zaleca się przechowywania haseł w SuperPuTTY, mimo że aplikacja oferuje taką możliwość dla wygody użytkownika. Bezpieczniejszym rozwiązaniem jest użycie uwierzytelniania kluczami SSH z agentem Pageant, który przechowuje odblokowane klucze w pamięci i udostępnia je dla wszystkich połączeń. SuperPuTTY integruje się z Pageantem i automatycznie wykorzystuje dostępne klucze do uwierzytelniania, co łączy wygodę zarządzania sesjami z bezpieczeństwem uwierzytelniania kluczami.

45/50 MobaXterm – zaawansowany klient SSH dla Windows
Wskazówka: MobaXterm ma wbudowany serwer X – aplikacje Linux z GUI (gedit, wireshark) po SSH -X działają bez konfiguracji Xming.

MobaXterm to rozbudowane narzędzie dla Windows łączące funkcje: klienta SSH/Telnet/RDP/VNC/X11, serwera X, multiplexera z zakładkami, menedżera sesji, SFTP (przeciągnij-i-upuść), skryptów i narzędzi sieciowych (ping, nslookup, netstat, Wireshark, Nmap).

Dostępny w wersji darmowej (Home Edition – do 12 sesji, 2 tunele SSH) i płatnej (Professional – bez limitów, zaawansowane funkcje bezpieczeństwa).

MobaXterm jest najbardziej rozbudowanym narzędziem w omawianym zestawieniu, łączącym w sobie funkcje klienta SSH, Telnet, RDP, VNC i serwera X Window System w jednej spójnej aplikacji. Dla administratora pracującego w systemie Windows i zarządzającego serwerami Linux MobaXterm eliminuje konieczność instalowania osobnych narzędzi do każdego rodzaju połączenia. Wbudowany serwer X pozwala na uruchamianie aplikacji graficznych Linux, takich jak Wireshark, Gedit czy Nautilus, bezpośrednio na pulpicie Windows przez protokół X11 Forwarding bez instalowania dodatkowego oprogramowania Xming czy VcXsrv.

Panel SFTP z przeciąganiem i upuszczaniem plików to jedna z funkcji, która znacząco podnosi wygodę pracy w porównaniu do konsolowego SCP. Administrator może przeglądać strukturę katalogów zdalnego serwera w panelu bocznym i przeciągać pliki między lokalnym Windows a zdalnym Linux, co jest intuicyjne i nie wymaga znajomości składni SCP. Zintegrowane narzędzia sieciowe, takie jak ping, nslookup, netstat, Wireshark i Nmap, dostępne bezpośrednio z menu MobaXterm, czynią go kompletnym zestawem narzędziowym dla administratora Windows.

Wersja darmowa MobaXterm Home Edition ma ograniczenia w postaci limitu dwunastu zapisanych sesji i dwóch aktywnych tuneli SSH, co dla większości administratorów jest wystarczające w codziennej pracy. Wersja Professional oferuje nielimitowane sesje, tunele i makra oraz zaawansowane funkcje bezpieczeństwa, takie jak szyfrowanie haseł w konfiguracji. Należy pamiętać, że MobaXterm jest narzędziem własnościowym, a nie open source, co dla niektórych organizacji może stanowić przeszkodę w jego zastosowaniu w środowisku produkcyjnym.

46/50 Inne narzędzia zdalne
NarzędziePlatformaZastosowanie
RemminaLinuxKlient RDP/VNC/SSH/SPICE z zakładkami
TerminatorLinuxEmulator terminala z podziałem na panele (GTK)
WinSCPWindowsGraficzny klient SFTP/SCP z edytorem
FileZillaWieloplatform.Klient FTP/SFTP z menedżerem sesji
Remote DesktopWindowsWbudowany klient RDP (mstsc.exe)
TeamViewerWieloplatform.Zdalny pulpit przez NAT (z przekazywaniem)
AnyDeskWieloplatform.Lekka alternatywa dla TeamViewer

Wybór narzędzia zależy od platformy, bezpieczeństwa i skali zarządzania.

Przegląd innych narzędzi zdalnych pokazuje, że ekosystem oprogramowania do zdalnej administracji jest niezwykle bogaty i zróżnicowany, a wybór konkretnego narzędzia zależy od wielu czynników. Remmina dla systemu Linux jest doskonałym odpowiednikiem MobaXterm, łączącym w jednym interfejsie obsługę protokołów RDP, VNC, SSH, SPICE i X2Go. W odróżnieniu od MobaXterm, Remmina jest w pełni otwartoźródłowym oprogramowaniem rozwijanym społecznościowo i dostępnym bezpłatnie w repozytoriach wszystkich głównych dystrybucji Linux.

Terminator to ciekawy projekt emulatora terminala dla Linuksa, który w odróżnieniu od Screen i tmux jest aplikacją GTK oferującą wygodny podział okna na panele obsługiwany myszą. WinSCP dla Windows oferuje wygodny interfejs graficzny do przesyłania plików przez SFTP, SCP i FTP z wbudowanym edytorem plików. FileZilla jako wieloplatformowy klient FTP i SFTP jest popularnym wyborem wśród użytkowników ceniących sobie prostotę i dostępność na wszystkich platformach systemowych.

TeamViewer i AnyDesk zasługują na szczególną uwagę jako narzędzia do zdalnej pomocy technicznej, które działają przez NAT bez konieczności konfiguracji przekierowania portów. Mechanizm działania tych narzędzi polega na wykorzystaniu zewnętrznego serwera pośredniczącego, który łączy klienta z serwerem nawet w przypadku obu stron znajdujących się za translatorem NAT. Należy jednak pamiętać, że komercyjne licencje TeamViewer i AnyDesk są kosztowne, a ich użycie w profesjonalnej administracji sieciowej powinno być ograniczone do sytuacji, gdy inne narzędzia nie są dostępne.

47/50 Podsumowanie – SSH i protokoły terminalowe
Kluczowe umiejętności: generowanie i dystrybucja kluczy, tunelowanie portów, przekazywanie X11, skryptowanie przez SSH.

SSH – bezpieczny protokół zdalnego logowania, niezbędny dla każdego administratora. Prosty, szyfrowany, dostępny w każdym systemie.

SCP – do bezpiecznego przesyłania plików.

Telnet – wyłącznie do diagnostyki portów. W produkcji zabroniony.

Serial – ratunkowy dostęp do urządzeń sieciowych i serwerów.

Podsumowanie bloku SSH i protokołów terminalowych uwidacznia, jak ważnym elementem warsztatu administratora jest umiejętność sprawnego posługiwania się tymi narzędziami. SSH stał się de facto standardem zdalnego dostępu w środowiskach Linux i Unix, a jego znajomość jest wymagana praktycznie na każdym stanowisku związanym z administracją systemami. W tym bloku student nauczył się nie tylko podstawowej składni poleceń SSH, ale także zrozumiał mechanizmy bezpieczeństwa leżące u podstaw protokołu, co pozwala na świadome projektowanie bezpiecznych połączeń zdalnych.

Szczególny nacisk położono na praktyczne aspekty konfiguracji, w tym instalację serwera, generowanie kluczy i konfigurację tunelowania, które są umiejętnościami niezbędnymi w codziennej pracy. Student potrafi już samodzielnie skonfigurować serwer SSH z uwzględnieniem podstawowych zasad bezpieczeństwa, wygenerować parę kluczy i skopiować klucz publiczny na serwer. Umiejętność wykonywania zdalnych poleceń przez SSH bez otwierania interaktywnej sesji otwiera drogę do automatyzacji i skryptowania zadań administracyjnych.

Kolejnym etapem nauki po opanowaniu SSH powinno być zgłębienie zaawansowanych technik, takich jak certyfikaty SSH Certificate Authority do scentralizowanego zarządzania dostępem w dużych organizacjach. Warto również zapoznać się z narzędziami uzupełniającymi, takimi jak sshfs do montowania zdalnych systemów plików lokalnie czy autossh do utrzymywania trwałych tuneli SSH. Regularna praktyka i eksperymentowanie w laboratoryjnym środowisku maszyn wirtualnych pozwoli na utrwalenie zdobytej wiedzy i wyrobienie prawidłowych nawyków administracyjnych.

48/50 Podsumowanie – narzędzia pulpitu zdalnego

RDP – najlepszy wybór dla Windows. Wbudowane szyfrowanie, wysoka wydajność.

VNC – uniwersalny zdalny pulpit dla wszystkich platform, ale wymaga tunelowania SSH dla bezpieczeństwa.

PuTTY / MobaXterm / SuperPuTTY – narzędzia dla Windows do SSH, Telnet, Serial. Różnią się funkcjonalnością: od minimalistycznego PuTTY do rozbudowanego MobaXterm z serwerem X.

screen / tmux – multiplexery terminala, niezbędne przy długotrwałych sesjach SSH.

Podsumowanie narzędzi pulpitu zdalnego wskazuje, że wybór odpowiedniego rozwiązania zależy od platformy docelowej i wymaganego poziomu bezpieczeństwa transmisji graficznej. RDP firmy Microsoft pozostaje najlepszym wyborem w środowiskach Windows, oferując wbudowane szyfrowanie, kompresję i wsparcie dla zaawansowanych funkcji takich jak przekierowanie drukarek i schowka. VNC natomiast jest uniwersalnym rozwiązaniem wieloplatformowym, które przy odpowiednim tunelowaniu przez SSH zapewnia satysfakcjonujący poziom bezpieczeństwa dla większości zastosowań.

PuTTY, MobaXterm i SuperPuTTY reprezentują różne podejścia do klienta SSH w systemie Windows, od minimalistycznego po rozbudowane środowisko pracy. Wybór między nimi zależy od skali zarządzanej infrastruktury i osobistych preferencji administratora, przy czym każdy z tych klientów spełnia swoją rolę w określonych scenariuszach. MobaXterm jest najlepszym wyborem dla administratora Windows zarządzającego Linux ze względu na wbudowany serwer X i panel SFTP, podczas gdy SuperPuTTY sprawdza się przy zarządzaniu wieloma serwerami Windows przez RDP lub SSH.

Screen i tmux jako multiplexery terminala są narzędziami, które każdy administrator powinien opanować bez względu na specjalizację, ponieważ chronią przed utratą sesji i zwiększają efektywność pracy. W środowiskach, w których priorytetem jest bezpieczeństwo i stabilność, wybór padnie na sprawdzone i dojrzałe narzędzia, takie jak PuTTY czy screen. W nowoczesnych, dynamicznych środowiskach deweloperskich częściej spotyka się tmux i MobaXterm ze względu na ich zaawansowane funkcje i lepsze wsparcie dla nowych technologii.

49/50 Najlepsze praktyki zdalnego dostępu
  1. Zawsze szyfruj – SSH (terminal), RDP (pulpit) lub tunel SSH dla VNC
  2. Używaj kluczy zamiast haseł – klucze Ed25519 z passphrase
  3. Nie używaj Telnet w produkcji – tylko diagnostyka portów
  4. Ogranicz dostęp – AllowUsers, firewalle, tylko z zaufanych sieci
  5. Monitoruj logi – journalctl, fail2ban, Auditd
  6. Używaj screen/tmux – ochrona przed utratą sesji
  7. Regularnie aktualizuj – poprawki bezpieczeństwa OpenSSH

Zbiór najlepszych praktyk zdalnego dostępu przedstawiony w tym slajdzie powinien być traktowany jako minimum, a nie maksimum bezpieczeństwa, które należy wdrożyć w każdej infrastrukturze IT. Zasada szyfrowania transmisji jest absolutnie fundamentalna i powinna być stosowana do wszystkich połączeń zdalnych bez wyjątku, niezależnie od tego, czy dane przesyłane przez sieć są wrażliwe, czy nie. Używanie kluczy SSH zamiast haseł eliminuje ryzyko przechwycenia hasła podczas transmisji oraz chroni przed atakami brute-force na słabe hasła, które są jednym z najczęstszych wektorów ataku na serwery SSH.

Ograniczenie dostępu tylko do zaufanych sieci i użytkowników realizowane przez firewalle i dyrektywy AllowUsers znacząco redukuje powierzchnię ataku na zdalnie dostępne usługi. W praktyce oznacza to, że serwer SSH powinien akceptować połączenia tylko z określonych adresów IP lub zakresów, a dostęp do niego powinien mieć ograniczony krąg administratorów. Monitorowanie logów za pomocą narzędzi takich jak journalctl dla SSH i fail2ban do automatycznej blokady podejrzanych adresów IP pozwala na szybkie wykrycie i neutralizację prób włamania.

Regularne aktualizacje OpenSSH i innych narzędzi zdalnych są kluczowe, ponieważ w protokole i jego implementacjach regularnie odkrywane są nowe podatności. Administrator powinien śledzić komunikaty bezpieczeństwa dystrybucji Linux, z których korzysta, i niezwłocznie instalować poprawki bezpieczeństwa po ich wydaniu. W środowiskach wysokiego bezpieczeństwa warto rozważyć dodatkowe mechanizmy ochrony, takie jak uwierzytelnianie dwuskładnikowe, skanowanie kluczy SSH w poszukiwaniu słabych algorytmów oraz regularne audyty konfiguracji serwerów SSH.

50/50 Pytania?

Dziękuję za uwagę!

Źródła:

  • OpenSSH Manual: man ssh, man sshd_config
  • Dokumentacja PuTTY: www.putty.org
  • TigerVNC: tigervnc.org
  • tmux: github.com/tmux/tmux
  • MobaXterm: mobaxterm.mobatek.net
  • Wireshark: www.wireshark.org

Sekcja pytań i odpowiedzi kończąca prezentację nie oznacza końca procesu uczenia się, a raczej zachętę do dalszego samodzielnego zgłębiania tematyki zdalnej administracji. Każdy z omawianych protokołów i narzędzi ma swoją oficjalną dokumentację, fora dyskusyjne i społeczności użytkowników, które są doskonałym źródłem wiedzy przy rozwiązywaniu konkretnych problemów. Warto założyć własne środowisko laboratoryjne z wykorzystaniem VirtualBox lub VMware, w którym można bezpiecznie eksperymentować z konfiguracją SSH, przekierowaniem portów i tunelowaniem bez ryzyka uszkodzenia produkcyjnej infrastruktury.

Umiejętność efektywnego i bezpiecznego zarządzania zdalnego będzie jedną z najważniejszych w warsztacie pracy niezależnie od wybranej ścieżki kariery w branży IT. Niezależnie od tego, czy student zostanie administratorem sieci, inżynierem devops, specjalistą cyberbezpieczeństwa czy architektem chmury, zdalny dostęp do zarządzanych zasobów będzie codziennością. Warto już na etapie edukacji wyrobić sobie prawidłowe nawyki dotyczące bezpieczeństwa, które w przyszłości zaowocują bardziej odpowiedzialnym podejściem do zarządzania infrastrukturą IT.

Zachęca się studentów do samodzielnych eksperymentów, ponieważ praktyczne doświadczenie jest nie do przecenienia w nauce administracji systemami. Każdy błąd konfiguracyjny popełniony w środowisku laboratoryjnym stanowi cenną lekcję, która pomoże uniknąć poważniejszych problemów w przyszłej pracy zawodowej. Warto również śledzić nowe trendy w dziedzinie zdalnego dostępu, takie jak Cloud Shell w chmurze Azure i AWS, narzędzia oparte na WebSocket czy rozwiązania Zero Trust Networking zmieniające paradygmat bezpieczeństwa zdalnego dostępu.