Poradnik po odcinku

Zabezpiecz swój VPS.
Poprowadzi Cię agent.

Świeży serwer VPS dostaje pierwsze pukanie od botów kilka minut po starcie. Zamiast wykładu o ośmiu krokach dostajesz jedną wklejkę do Claude Code - agent robi audyt, zabezpiecza serwer i pokazuje różnicę. Ty tylko potwierdzasz.

⏱ ok. 15 minut 🧑‍💻 zero programowania 8 kroków robi agent
Nie chcesz czytać? Wklej całość w Claude Code - agent przeprowadzi Cię przez wszystko krok po kroku.
Nie masz jeszcze serwera? Ja korzystam z VPS-ów od Hostingera (partner technologiczny kanału) - kod ROBERTHOST daje dodatkowy rabat.
ZANIM ZACZNIESZ

Czego potrzebujesz

Gdzie to znaleźć na Hostingerze: hPanel → VPS → Manage przy Twoim serwerze. Na stronie Overview masz wszystko: adres IPv4 i nazwę użytkownika w karcie z danymi VPS-a, a obok nazwy serwera, pod Root access, gotową do skopiowania komendę SSH. Hasło to te, które ustawiłeś przy tworzeniu serwera - panel go nie pokaże; jeśli go nie pamiętasz, kliknij Change pod „Root password" i ustaw nowe. Jest tam też przycisk Terminal (prawy górny róg) - konsola w przeglądarce, logująca Cię automatycznie, gdyby SSH z komputera jeszcze nie działało.

⚠️

Jedna żelazna zasada: przez cały proces trzymaj otwarte drugie okno terminala zalogowane na serwer. Zmiany w SSH robi się z siatką bezpieczeństwa - już zalogowanej sesji nic nie zrywa, więc gdyby coś poszło nie tak, tamto okno jest Twoją drogą powrotną. Agent też będzie tego pilnował, ale pas i szelki jeszcze nikomu nie zaszkodziły.

KROK 1 / 3

Otwórz Claude Code w pustym folderze

Nowy folder, żeby agent miał czyste biurko. Wpisz w terminalu na swoim komputerze:

Twój komputer · terminal
mkdir vps-hardening && cd vps-hardening && claude

Po chwili patrzysz na okno rozmowy z agentem. To wszystko, co musisz umieć z terminala.

Pracujesz w aplikacji desktopowej Claude Code? Terminal nie jest Ci potrzebny w ogóle: utwórz pusty folder w Finderze albo Eksploratorze, otwórz go w apce jako nową sesję lokalną i przejdź od razu do Kroku 2. Wszystko dalej wygląda identycznie.

KROK 2 / 3

Wklej agentowi ten prompt

Całość, jednym wklejeniem. W prompcie jest wszystko: skąd wziąć skrypty, w jakiej kolejności iść i czego pilnować, żebyś nie stracił dostępu do serwera.

Prompt · wklej do Claude Code
Sklonuj repozytorium https://github.com/Szewowsky/vps-security.git do bieżącego katalogu,
przeczytaj plik .claude/commands/hardening.md i przeprowadź mnie przez opisany tam wizard
zabezpieczenia serwera VPS - dokładnie według jego zasad bezpieczeństwa i kolejności faz.
Idź krok po kroku: czekaj na wynik każdej komendy i nie przechodź dalej, jeśli test kroku
nie przeszedł. Zacznij od zebrania danych (Faza 0), potem audyt PRZED, hardening, audyt PO
- i na końcu pokaż mi zestawienie: co było na czerwono, a co jest teraz na zielono.
Przez cały czas pilnuj, żebym nie stracił dostępu do serwera.

Agent zapyta Cię o IP, port, login i nazwę nowego użytkownika. Odpowiadasz normalnie, po ludzku - resztę robi sam.

KROK 3 / 3

Co się będzie działo (i gdzie masz coś do powiedzenia)

🔑

Dane i klucz SSH

Agent pyta o IP, port, login, hasło i nazwę nowego użytkownika, po czym sprawdza, czy Twój klucz SSH działa na serwerze. Jeśli dodałeś go w panelu hostingu - idzie dalej bez hasła. Jeśli nie - sam go wgrywa (stąd pytanie o hasło), a gdy klucza w ogóle nie masz, najpierw go wygeneruje.

00

Audyt PRZED

Agent odpala skrypt audytu na serwerze. Na świeżej maszynie zobaczysz sporo czerwonego - to jest punkt odniesienia, do którego wrócimy na końcu.

01

Nowy użytkownik zamiast roota

Powstaje zwykłe konto z uprawnieniami sudo. Agent najpierw testuje logowanie nowym userem, dopiero potem wyłącza roota. Nigdy odwrotnie.

02

SSH na klucz, nie na hasło

Logowanie hasłem znika - zostaje klucz, którego nie da się zgadywać. Do tego limity prób i kilka porządków w konfiguracji.

02b

Port SSH - Twoja decyzja

Agent zapyta, czy zmienić port na niestandardowy. Mniej szumu botów w logach, ale to kosmetyka, nie zamek - a niektóre sieci blokują niestandardowe porty. Nie wiesz? Zostaw domyślny, tak jest bezpiecznie.

03

Firewall (UFW)

Domyślnie nic nie wchodzi, wyjątek dostaje SSH. Agent dopisuje wyjątek zanim włączy zaporę - kolejność, która ratuje przed zatrzaśnięciem drzwi.

04

Fail2ban - bramkarz od liczenia prób

Kilka nieudanych logowań z jednego adresu i adres wylatuje na bana. Bot dostaje ciszę zamiast kolejnych podejść.

05+

Porządki: IPv6, monitoring logów, auto-aktualizacje

System sam dociąga łatki bezpieczeństwa. Jedna rzecz mniej na głowie, na zawsze.

✓

Audyt PO

Ten sam skrypt jeszcze raz. Te same pozycje, tym razem na zielono. To jest cały dowód - i moment, w którym możesz zamknąć zapasowy terminal.

Przy każdej ryzykownej zmianie agent zatrzymuje się i pyta. Jeśli jakiś krok się wysypie, nie brnie dalej na ślepo - pokazuje błąd i czeka na Ciebie. Tak jest napisany wizard.

SPRAWDŹ, CZY ZADZIAŁAŁO

Czerwone ma być zielone

Na końcu agent pokaże Ci porównanie audytów. Powinno wyglądać mniej więcej tak:

Audyt · przed → po
━━━ Użytkownik (non-root) ━━━
[FAIL]  Brak użytkownika z sudo — logujesz się jako root!   →  [PASS]
━━━ SSH ━━━
[FAIL]  Logowanie hasłem włączone                            →  [PASS]
[FAIL]  Root może logować się przez SSH                      →  [PASS]
━━━ Firewall / Fail2ban ━━━
[FAIL]  UFW nieaktywny                                       →  [PASS]
[FAIL]  Fail2ban niezainstalowany                            →  [PASS]

Dwa szybkie testy własnoręczne, dla spokoju ducha (podmień dane na swoje):

Twój komputer · terminal
# nowy użytkownik wchodzi:
ssh -p TWOJ_PORT twoj_user@TWOJE_IP "echo OK"

# a root już nie (to jest DOBRA wiadomość):
ssh -p TWOJ_PORT root@TWOJE_IP

Pierwsza komenda ma zwrócić OK, druga ma Cię odrzucić. Jeśli tak jest - serwer stoi, drzwi są Twoje.

CO DALEJ

Połącz się z komputera - trzy drogi

Serwer zabezpieczony, agent na nim mieszka. Teraz właściwa część odcinka: jak się do niego wpinać na co dzień. Wszystkie trzy drogi korzystają z tego samego aliasu w ~/.ssh/config - robisz go raz.

Kliknij metodę, żeby rozwinąć instrukcję krok po kroku.

01 Terminal - alias raz, działa wszędzie

Cała robota to jeden wpis w pliku konfiguracyjnym SSH. Otwierasz plik (jeśli nie istnieje, komenda utworzy pusty - to normalne):

Twój komputer · terminal
nano ~/.ssh/config

I dopisujesz te linijki, podmieniając adres, użytkownika i port na swoje (adres i użytkownika masz w panelu hostingu; port to 22, chyba że zmieniałeś go przy hardeningu):

~/.ssh/config · przykład, podmień dane
Host vps
    HostName 11.22.33.44
    User twoj-uzytkownik
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Zapisujesz (Ctrl+O, Enter, Ctrl+X) i sprawdzasz:

Twój komputer · terminal
chmod 600 ~/.ssh/config
ssh vps

Jesteś na serwerze - od teraz to jedno słowo zastępuje całą komendę z portem, userem i adresem. Agenta uruchamiasz w tmux, żeby praca nie ginęła razem z zamkniętym oknem:

Sesja, która nie umiera
ssh vps
tmux new -s praca
claude

Wychodzisz bez zabijania sesji: Ctrl+B, potem D. Wracasz później: ssh vps i tmux attach -t praca. Na Ubuntu tmux zwykle jest od razu - jeśli serwer odpowie „command not found", doinstalujesz go jedną komendą: sudo apt install -y tmux.

Ściąga tmux na co dzień:

tmux · najczęstsze komendy
tmux ls                      # lista wszystkich sesji
tmux new -s praca            # nowa sesja o nazwie "praca"
tmux attach -t praca         # wejście do istniejącej sesji
# Ctrl+B, potem D            # wyjście BEZ zabijania sesji
tmux kill-session -t praca   # usunięcie jednej sesji
tmux kill-server             # ubija wszystkie sesje naraz

Drobiazg, który potrafi zmylić: sesja tmux pamięta środowisko z chwili startu. Jeśli coś doinstalowałeś (np. claude), gdy sesja już działała, w jej środku wpisz source ~/.bashrc - albo załóż sesję od nowa.

claude: command not found? Szablony hostingowe instalują Claude Code tylko dla roota - Twój nowy użytkownik go nie widzi. Trzy wyjścia: wizard z Kroku 2 sam to wykryje i zapyta, czy doinstalować; aplikacja desktopowa (droga 02) zainstaluje agenta automatycznie przy pierwszym połączeniu; albo ręcznie, bez roota: curl -fsSL https://claude.ai/install.sh | bash.

02 Aplikacja desktopowa - ten sam alias, inne drzwi z tej korzystam
  • 1. Przy polu do wpisywania promptu rozwiń menu środowiska (to, w którym są Local i Cloud).
  • 2. Wybierz + Add SSH connection.
  • 3. Wypełnij JEDNO pole: SSH host = vps. Name to dowolna etykieta, a SSH port i SSH key zostaw puste - aplikacja sama pisze pod polami, że weźmie je z ~/.ssh/config.
  • 4. Kliknij Test connection - masz potwierdzenie, że alias działa, zanim cokolwiek dodasz - i dopiero Add SSH connection.
  • 5. Wybierz połączenie z listy. Przy pierwszym połączeniu aplikacja sama instaluje Claude Code na serwerze - autoryzacja idzie przez apkę na Twoim komputerze, serwer nie potrzebuje przeglądarki.

Nie robiłeś Drogi 1? Alias vps działa tylko wtedy, gdy istnieje wpis w ~/.ssh/config. Bez niego też się połączysz - wpisz w SSH host pełną formę uzytkownik@adres-serwera i uzupełnij SSH port ręcznie. Alias to wygoda, nie wymóg - ale robisz go raz i działa też w terminalu i edytorze.

Po lewej stronie zobaczysz drzewo plików. To nie jest Twój dysk - to serwer. Klikasz plik, edytujesz, zapisujesz, i zostaje tam.

Test zamkniętej klapy - to, po co w ogóle się tu wpinasz: zleć agentowi zadanie na dwie, trzy minuty → zamknij aplikację, dla pewności także klapę laptopa → wróć, otwórz to samo połączenie. Zadanie czeka gotowe, pliki na miejscu. Serwer nie idzie spać razem z Tobą.

03 Edytor / IDE - Warp albo VS Code z Remote-SSH

Wariant A: Warp

  • 1. Zainstaluj Warpa i wpisz w nim to samo ssh vps - Warp jest terminalem, więc czyta ten sam ~/.ssh/config.
  • 2. Przy pierwszym połączeniu Warp zapyta o instalację swojego rozszerzenia SSH na serwerze. Klikasz „Install Warp's SSH extension" - instaluje się tylko w Twoim katalogu domowym (~/.warp/), bez roota i bez otwierania portów.
  • 3. Od tego momentu masz w Warpie drzewo plików z serwera, edycję zdalnych plików w edytorze, podgląd diffów i agenta pracującego na zdalnym repo - to samo, co lokalnie, tylko na VPS-ie.
  • Wymagania: serwer z Ubuntu 20.04+ (glibc 2.31+), bash/zsh. Odinstalowanie: usuń ~/.warp*/remote-server na serwerze.

Wariant B: VS Code albo Cursor (Remote-SSH)

  • 1. Zainstaluj wtyczkę Remote-SSH z marketplace'u rozszerzeń.
  • 2. Cmd/Ctrl+Shift+P → „Remote-SSH: Connect to Host" - na liście zobaczysz vps, bo wtyczka czyta ten sam ~/.ssh/config.
  • 3. Po połączeniu otwierasz folder na serwerze i pracujesz jak lokalnie - najlepsze przy większym grzebaniu w strukturze plików.

Kompletna instrukcja połączenia (gotowy prompt dla agenta, tabela "czego się nie spodziewać", najczęstsze potknięcia) czeka w osobnym gotowcu: POLACZENIE-Z-KOMPUTERA.md - też w dwóch trybach: prompt dla agenta albo pięć minut ręcznie.

Jedna różnica, o której warto wiedzieć: aplikacja Claude Code instaluje agenta na serwerze sama. Codex tego nie robi - jego aplikacja wymaga, żeby codex był już wgrany na serwerze, inaczej się nie połączy.

POTKNIĘCIA

Zjedzone za Ciebie

Rzeczy, na których sam się przyciąłem, żebyś Ty nie musiał:

Nie masz jeszcze VPS-a?

Cały ten poradnik zaczyna się od serwera. Ja swoje trzymam u Hostingera - to partner technologiczny kanału, więc z kodem ROBERTHOST dostajesz dodatkowy rabat, a ja małą prowizję. Sprzęt bez zmian, cena niższa.

Postaw serwer →