Instalacja Claude Code i ChatGPT Codex na serwerze Linux: krok po kroku
Od świeżo zainstalowanego serwera Debian lub Ubuntu do działającego agenta AI: użytkownik i biała lista sudo, Node.js 22, instalacja i logowanie Claude Code i Codex CLI, CLAUDE.md i AGENTS.md, pierwsze zadania i typowe błędy.
Ten poradnik prowadzi od świeżo zainstalowanego serwera Debian lub Ubuntu do działającego agenta AI, który analizuje logi, sprawdza konfiguracje i wykonuje zadania konserwacyjne. Konfigurujemy Claude Code (Anthropic) i Codex CLI (OpenAI, narzędzie wiersza poleceń stojące za ChatGPT), oba na własnym użytkowniku z ograniczonymi uprawnieniami. Wszystkie polecenia zostały przetestowane na serwerze root KVM KernelHost z Debianem 13 i Ubuntu 24.04. Czym w ogóle jest serwer zarządzany przez AI i jakie istnieją architektury, opisuje artykuł Serwer zarządzany przez AI: bezpieczne łączenie agentów AI.
Stan na wrzesień 2026. Narzędzia rozwijają się szybko; w razie wątpliwości sprawdź przełączniki poleceniemclaude --helplubcodex --help.
Wymagania wstępne
- Serwer root z Debianem 12 lub 13 albo Ubuntu 22.04 lub 24.04 i dostępem root przez SSH. Na AlmaLinuksie i Rocky Linuksie kroki są takie same, tylko polecenia pakietów nazywają się
dnfzamiastapt. - Podstawowe utwardzenie wykonane: logowanie SSH kluczem, zapora, automatyczne aktualizacje bezpieczeństwa. Obejmuje to lista kontrolna dla nowych serwerów root.
- Konto w Anthropic (Claude Pro, Max lub Team) lub klucz API, konto ChatGPT (Plus, Pro lub Team) lub klucz API OpenAI. Potrzebujesz tylko jednego z nich, jeśli chcesz skonfigurować tylko jedno narzędzie.
- Wychodzący HTTPS do
api.anthropic.comiapi.openai.com. Na serwerach KernelHost jest to zapewnione od początku; restrykcyjna własna zapora musi na to zezwolić.
Krok 1: utworzyć własnego użytkownika i ograniczyć sudo
Agent nigdy nie działa jako root. Dostaje własne konto i przez białą listę sudo dokładnie te polecenia, których potrzebuje. Zacznij od kilku poleceń odczytowych i rozszerzaj listę, gdy zadanie naprawdę tego wymaga.
sudo adduser --disabled-password --gecos "Agent AI" aiagent
sudo tee /etc/sudoers.d/aiagent >/dev/null <<'EOF'
aiagent ALL=(root) NOPASSWD: /usr/bin/journalctl *, /usr/bin/systemctl status *, /usr/bin/systemctl restart nginx, /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y, /usr/bin/tail *, /usr/bin/df *, /usr/bin/ss *
EOF
sudo chmod 440 /etc/sudoers.d/aiagent
sudo visudo -cf /etc/sudoers.d/aiagent
Ostatni wiersz sprawdza składnię. Błąd w pliku sudoers może zablokować sudo dla wszystkich, dlatego sprawdzenie zawsze do tego należy. --disabled-password gwarantuje, że nikt nie zaloguje się jako aiagent hasłem; na konto przełączasz się później poleceniem sudo -iu aiagent.
Jeśli agent ma zmieniać pliki w /etc, nie dawaj mu nano przez sudo (wtedy dałoby się edytować każdy plik, także /etc/sudoers), tylko pracuj z grupą i celowymi uprawnieniami zapisu, na przykład setfacl -m u:aiagent:rw /etc/nginx/sites-available/moja-strona.conf. Na początek w zupełności wystarczy, że agent proponuje zmiany, a Ty je wprowadzasz.
Krok 2: zainstalować Node.js 22
Oba narzędzia działają na Node.js. Claude Code wymaga co najmniej wersji 18, Codex CLI co najmniej 22, dlatego instalujemy 22 LTS. Źródła pakietów Debiana 12 dostarczają za starą wersję; NodeSource dostarcza aktualną:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
Kto nie chce uruchamiać skryptów z internetu z uprawnieniami root, używa nvm w katalogu domowym użytkownika agenta; to działa całkowicie bez uprawnień root. Szczegóły i alternatywy w poradniku Node.js na Debianie.
Krok 3: zainstalować Claude Code i zalogować się
Od teraz pracujemy na koncie agenta:
sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version
Natywny instalator umieszcza Claude Code w ~/.local/bin i sam utrzymuje się w aktualnej wersji. Alternatywnie działa to przez npm poleceniem npm install -g @anthropic-ai/claude-code; jeśli kończy się błędem EACCES, pomoże sekcja rozwiązywania problemów poniżej.
Przy pierwszym uruchomieniu claude narzędzie prosi o zalogowanie. Z kontem Claude normalnie otwiera przeglądarkę; na serwerze bez przeglądarki wyświetla adres i kod, który potwierdzasz na laptopie lub telefonie. Do skryptów i zadań cron lepszym wyborem jest klucz API:
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Odpowiedz tylko OK"
Klucz leży w ten sposób tylko w katalogu domowym użytkownika agenta, którego inni użytkownicy nie mogą czytać. Utwórz go w konsoli Anthropic z miesięcznym limitem wydatków, żeby sesja, która wymknie się spod kontroli, nie mogła stać się droga.
Krok 4: skonfigurować Claude Code dla serwera
Claude Code przy starcie czyta plik CLAUDE.md w bieżącym katalogu. W nim znajdują się zasady obowiązujące w każdej sesji. Utwórz katalog roboczy z tym plikiem w katalogu domowym agenta:
mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Zasady dla tego serwera
- To jest serwer produkcyjny (Debian 13, nginx, PHP-FPM, MariaDB).
- Polecenia odczytowe (journalctl, systemctl status, tail, df, ss) są zawsze dozwolone.
- Przed każdym poleceniem zapisującym: wyjaśnij krótko, co zmienia, i poczekaj na zatwierdzenie.
- Nigdy nie usuwaj pakietów, nigdy nie kasuj plików w /var/lib, nigdy nie twórz ani nie usuwaj użytkowników.
- Nigdy nie powtarzaj haseł, kluczy ani danych klientów w wyniku.
- Na końcu każdego zadania podaj podsumowanie w trzech zdaniach.
EOF
Do tego dochodzi biała lista narzędzi, żeby Claude Code wykonywał polecenia odczytowe bez pytania, a o wszystko inne prosił o zatwierdzenie. Plik ~/.claude/settings.json obowiązuje dla użytkownika:
mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
"permissions": {
"allow": [
"Bash(sudo journalctl:*)",
"Bash(sudo systemctl status:*)",
"Bash(sudo tail:*)",
"Bash(df:*)",
"Bash(free:*)",
"Bash(ss:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(sudo rm:*)",
"Bash(dd:*)",
"Bash(mkfs:*)"
]
}
}
EOF
Teraz pierwsze zadanie, interaktywnie:
cd ~/server && claude
> Podsumuj błędy z journalctl z ostatnich 24 godzin i podaj trzy najczęstsze przyczyny.
I to samo zadanie bez nadzoru, na przykład jako codzienne zadanie cron o 7 rano, którego wynik przychodzi e-mailem:
0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Podsumuj błędy i ostrzeżenia z journalctl z ostatnich 24 godzin. Podaj usługę, czas i prawdopodobną przyczynę." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Dzienny raport serwera" admin@example.com
Przełącznik -p uruchamia Claude Code bez sesji interaktywnej, --allowedTools ogranicza narzędzia dokładnie do tego, czego potrzebuje przebieg. Działania zapisujące nie należą do przebiegów bez nadzoru.
Krok 5: zainstalować Codex CLI (ChatGPT) i zalogować się
Codex CLI to narzędzie OpenAI, które przenosi modele stojące za ChatGPT do wiersza poleceń. Instalacja na tym samym koncie użytkownika:
npm install -g @openai/codex
codex --version
Logowanie odbywa się kontem ChatGPT (Plus, Pro lub Team): uruchom codex, wybierz „Sign in with ChatGPT" i otwórz wyświetlony adres na urządzeniu z przeglądarką. Do skryptów zamiast tego ustaw klucz API z platformy OpenAI:
echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc
Codex ma własną piaskownicę i tryb zatwierdzania. Oba ustawia się w ~/.codex/config.toml; dla serwera produkcyjnego rozsądna jest ta kombinacja:
mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF
workspace-write zezwala na zapis tylko w bieżącym katalogu roboczym, on-request każe agentowi prosić o pozwolenie na wszystko poza tym. Poziom danger-full-access znosi jedno i drugie i nie należy na system produkcyjny. Zasady takie jak w CLAUDE.md Codex czyta z pliku AGENTS.md w katalogu roboczym; możesz użyć tej samej treści:
cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Sprawdź, czy wszystkie włączone usługi systemd działają, i wypisz te, które zawiodły, z ostatnim komunikatem błędu."
Do przebiegów bez nadzoru służy codex exec "zadanie", odpowiednik claude -p.
Alternatywa: agent działa na Twoim komputerze i pracuje przez SSH
Kto nie chce niczego instalować na serwerze, uruchamia Claude Code lub Codex na laptopie i pozwala agentowi wysyłać polecenia przez SSH. Serwer dostaje do tego własny klucz SSH dla użytkownika agenta, a w CLAUDE.md znajduje się zasada, że wszystkie polecenia serwerowe zaczynają się od ssh aiagent@server. Do sporadycznej konserwacji działa to dobrze, ale dłuższe zadania i zadania cron lepiej działają bezpośrednio na serwerze.
Krok 6: zabezpieczyć i ustawić limity
- Snapshot lub kopia zapasowa przed każdą sesją, w której coś ma się zmienić. Strategia kopii zapasowych dla serwerów pokazuje, jak zrobić to automatycznie.
- Tryb zatwierdzania zostaje włączony.
--dangerously-skip-permissionsw Claude Code idanger-full-accessw Codex są przeznaczone dla jednorazowych maszyn wirtualnych. - Sekrety poza zasięgiem. Użytkownik agenta nie może czytać plików
.env, haseł do baz danych ani danych klientów. To, co czyta, trafia do dostawcy. - Limit kosztów dla każdego klucza API w konsoli dostawcy.
- Śledzenie zmian: zainstaluj
etckeeper, żeby każda zmiana w/etctrafiała do Git, i zapisuj podsumowania agenta. - W ruchu przychodzącym nic się nie zmienia. Oba narzędzia potrzebują tylko wychodzącego HTTPS. Zapora, Fail2ban i ochrona DDoS dostawcy pozostają bez zmian.
Typowe błędy i rozwiązania
| Komunikat | Przyczyna i rozwiązanie |
EACCES: permission denied przy npm install -g | npm chce zapisywać w katalogu systemowym. Ustaw prefiks użytkownika: npm config set prefix ~/.npm-global, potem export PATH=~/.npm-global/bin:$PATH do ~/.bashrc i zainstaluj ponownie. |
Node.js version ... is not supported | Za stara wersja ze źródeł dystrybucji. Powtórz krok 2 i sprawdź poleceniem node --version, że aktywna jest 22.x. |
| Logowanie nie otwiera przeglądarki | Na serwerze to oczekiwane. Otwórz wyświetlony adres na innym urządzeniu i wpisz kod albo przejdź na klucz API. |
ECONNREFUSED lub timeout przy starcie | Wychodzący HTTPS jest zablokowany. Sprawdź reguły zapory dla portu 443 na zewnątrz; na serwerach KernelHost ruch wychodzący jest swobodny od początku. |
429 rate limit lub overloaded | Limit subskrypcji lub API wyczerpany albo dostawca przeciążony. Poczekaj chwilę, przebiegom bez nadzoru daj kolejną próbę po kilku minutach. |
| Agent pyta przy każdym poleceniu | Rozszerz białą listę w ~/.claude/settings.json lub approval_policy w config.toml, ale tylko o polecenia odczytowe. |
Podsumowanie
Agent AI na serwerze jest skonfigurowany w godzinę: użytkownik, biała lista sudo, Node.js, narzędzie, zasady. Właściwa praca tkwi w granicach, a te są tu celowo wąskie. Rozszerzaj je krok po kroku, gdy zadanie tego wymaga, nigdy hurtowo. Na serwerze root KernelHost lub serwerze dedykowanym nie trzeba do tego niczego aktywować: dostęp root, wolny wybór dystrybucji i połączenia wychodzące są standardem.
Najczęstsze pytania
Czy do Claude Code potrzebuję subskrypcji, czy wystarczy klucz API?
Jak zalogować Codex CLI na serwerze bez przeglądarki?
Której wersji Node.js potrzebuję?
Dlaczego npm install -g kończy się błędem EACCES?
Czy mogę uruchamiać Claude Code w zadaniu cron?
Czy to działa też na serwerach Windows od KernelHost?
2026 KernelHost GmbH. Wszelkie prawa zastrzeżone. Ten poradnik jest chroniony prawem autorskim. Publikowanie go w innych serwisach, w całości, we fragmentach lub w zmienionej formie, wymaga naszej pisemnej zgody. Cytaty z podaniem źródła i z linkiem są jak najbardziej mile widziane.

