Instalacja Claude Code i ChatGPT Codex na serwerze Linux: krok po kroku

Opublikowano 8 min czytania

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 poleceniem claude --help lub codex --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ę dnf zamiast apt.
  • 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.com i api.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-permissions w Claude Code i danger-full-access w 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 /etc trafiał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

KomunikatPrzyczyna i rozwiązanie
EACCES: permission denied przy npm install -gnpm 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 supportedZa stara wersja ze źródeł dystrybucji. Powtórz krok 2 i sprawdź poleceniem node --version, że aktywna jest 22.x.
Logowanie nie otwiera przeglądarkiNa serwerze to oczekiwane. Otwórz wyświetlony adres na innym urządzeniu i wpisz kod albo przejdź na klucz API.
ECONNREFUSED lub timeout przy starcieWychodzą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 overloadedLimit 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 poleceniuRozszerz 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?
Działa jedno i drugie. Z kontem Claude (Pro, Max lub Team) logujesz się przy pierwszym uruchomieniu przez przeglądarkę, na serwerze bez przeglądarki przez kod na innym urządzeniu. Do zautomatyzowanych zadań bez człowieka przy klawiaturze czystszą drogą jest klucz API w zmiennej środowiskowej ANTHROPIC_API_KEY, bo nie jest związany z osobą i można go ograniczyć budżetem.
Jak zalogować Codex CLI na serwerze bez przeglądarki?
Albo przez logowanie kontem ChatGPT, gdzie Codex wyświetla adres, który otwierasz na laptopie lub telefonie, albo przez zmienną środowiskową OPENAI_API_KEY z kluczem z platformy OpenAI. Do zadań cron i skryptów klucz API jest bardziej niezawodnym wariantem.
Której wersji Node.js potrzebuję?
Claude Code wymaga co najmniej Node.js 18, Codex CLI co najmniej Node.js 22. Zainstaluj więc od razu Node.js 22 LTS z repozytorium NodeSource lub przez nvm w katalogu domowym użytkownika agenta. Wersja ze źródeł pakietów Debiana 12 jest za stara.
Dlaczego npm install -g kończy się błędem EACCES?
Bo npm chce zapisywać globalnie w katalogu systemowym, do którego użytkownik nie ma uprawnień. Ustaw prefiks użytkownika poleceniem npm config set prefix ~/.npm-global, dodaj ~/.npm-global/bin do PATH i zainstaluj ponownie. Alternatywnie użyj nvm albo, w przypadku Claude Code, natywnego instalatora, który obywa się bez npm.
Czy mogę uruchamiać Claude Code w zadaniu cron?
Tak, przez claude -p z zadaniem jako tekstem i białą listą dozwolonych narzędzi. Użyj do tego klucza API, ogranicz narzędzia do poleceń odczytowych i skieruj wynik do pliku lub e-maila. Działania ingerujące w system nie należą do przebiegów bez nadzoru.
Czy to działa też na serwerach Windows od KernelHost?
Tak. Claude Code i Codex CLI działają na Windows natywnie z Node.js lub w Windows Subsystem for Linux. Krokom z użytkownikiem i białą listą sudo odpowiada tam osobny użytkownik Windows bez uprawnień administratora.

Claude Code Codex CLI ChatGPT KI-Agent Node.js Debian Ubuntu Serveradministration