Instalarea Claude Code și ChatGPT Codex pe un server Linux: pas cu pas

Publicat pe 9 min de citit

De la un server Debian sau Ubuntu proaspăt instalat la un agent AI funcțional: utilizator și listă albă sudo, Node.js 22, instalarea și autentificarea Claude Code și Codex CLI, CLAUDE.md și AGENTS.md, primele sarcini și erorile tipice.

Acest ghid te duce de la un server Debian sau Ubuntu proaspăt instalat la un agent AI funcțional care analizează jurnale, verifică configurații și execută sarcini de întreținere. Configurăm Claude Code (Anthropic) și Codex CLI (OpenAI, instrumentul de linie de comandă din spatele ChatGPT), ambele sub un utilizator propriu cu drepturi limitate. Toate comenzile au fost testate pe un server root KVM KernelHost cu Debian 13 și Ubuntu 24.04. Ce este în general un server gestionat de AI și ce arhitecturi există descrie articolul Server gestionat de AI: conectarea sigură a agenților AI.

Situația din septembrie 2026. Instrumentele evoluează rapid; în caz de îndoială, verifică opțiunile cu claude --help, respectiv codex --help.

Cerințe preliminare

  • Un server root cu Debian 12 sau 13, respectiv Ubuntu 22.04 sau 24.04 și acces root prin SSH. Pe AlmaLinux și Rocky Linux pașii sunt aceiași, doar comenzile pentru pachete se numesc dnf în loc de apt.
  • Securizarea de bază făcută: autentificare SSH cu cheie, firewall, actualizări de securitate automate. Lista de verificare pentru servere root noi acoperă asta.
  • Un cont la Anthropic (Claude Pro, Max sau Team) sau o cheie API, un cont ChatGPT (Plus, Pro sau Team) sau o cheie API OpenAI. Ai nevoie doar de unul dintre ele dacă vrei să configurezi un singur instrument.
  • HTTPS de ieșire către api.anthropic.com și api.openai.com. Pe serverele KernelHost este dat de la început; un firewall propriu restrictiv trebuie să permită asta.

Pasul 1: creezi un utilizator propriu și limitezi sudo

Agentul nu rulează niciodată ca root. Primește un cont propriu și, printr-o listă albă sudo, exact comenzile de care are nevoie. Începe cu câteva comenzi de citire și extinde lista atunci când o sarcină o cere cu adevărat.

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

Ultima linie verifică sintaxa. O eroare într-un fișier sudoers poate bloca sudo pentru toți, de aceea verificarea face mereu parte din proces. --disabled-password asigură că nimeni nu se poate autentifica ca aiagent cu parolă; mai târziu treci pe cont cu sudo -iu aiagent.

Dacă agentul trebuie să modifice fișiere în /etc, nu îi da nano prin sudo (astfel ar putea edita orice fișier, inclusiv /etc/sudoers), ci lucrează cu un grup și drepturi de scriere țintite, de exemplu setfacl -m u:aiagent:rw /etc/nginx/sites-available/site-ul-meu.conf. La început este pe deplin suficient ca agentul să propună modificările și tu să le aplici.

Pasul 2: instalezi Node.js 22

Ambele instrumente rulează pe Node.js. Claude Code necesită cel puțin versiunea 18, Codex CLI cel puțin 22, de aceea instalăm 22 LTS. Sursele de pachete din Debian 12 livrează o versiune prea veche; NodeSource o livrează pe cea actuală:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version

Cine nu vrea să ruleze scripturi de pe internet cu drepturi de root folosește nvm în directorul home al utilizatorului agent; merge complet fără drepturi de root. Detalii și alternative în ghidul Node.js pe Debian.

Pasul 3: instalezi Claude Code și te autentifici

De aici lucrăm în contul agentului:

sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Instalatorul nativ pune Claude Code în ~/.local/bin și se menține singur actualizat. Alternativ merge prin npm cu npm install -g @anthropic-ai/claude-code; dacă eșuează cu EACCES, ajută secțiunea de depanare de mai jos.

La prima pornire a claude, instrumentul cere autentificarea. Cu un cont Claude deschide în mod normal browserul; pe un server fără browser afișează o adresă și un cod pe care le confirmi pe laptop sau pe telefon. Pentru scripturi și joburi cron, cheia API este alegerea mai bună:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Răspunde doar cu OK" 

Cheia se află astfel doar în directorul home al utilizatorului agent, pe care alți utilizatori nu îl pot citi. Creeaz-o în consola Anthropic cu o limită lunară de cheltuieli, astfel încât o sesiune scăpată de sub control să nu poată deveni scumpă.

Pasul 4: configurezi Claude Code pentru server

Claude Code citește la pornire un fișier CLAUDE.md din directorul curent. În el stau regulile valabile pentru fiecare sesiune. Creează un director de lucru cu acest fișier în directorul home al agentului:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Reguli pentru acest server
- Acesta este un server de producție (Debian 13, nginx, PHP-FPM, MariaDB).
- Comenzile de citire (journalctl, systemctl status, tail, df, ss) sunt întotdeauna permise.
- Înaintea fiecărei comenzi de scriere: explică pe scurt ce modifică și așteaptă aprobarea.
- Nu elimina niciodată pachete, nu șterge niciodată fișiere din /var/lib, nu crea și nu șterge niciodată utilizatori.
- Nu repeta niciodată parole, chei sau date ale clienților în rezultat.
- La sfârșitul fiecărei sarcini, dă un rezumat în trei propoziții.
EOF

La aceasta se adaugă o listă albă de instrumente, astfel încât Claude Code să execute comenzile de citire fără să întrebe și să ceară aprobare pentru orice altceva. Fișierul ~/.claude/settings.json este valabil pentru utilizator:

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

Acum prima sarcină, interactiv:

cd ~/server && claude
> Rezumă erorile din journalctl din ultimele 24 de ore și numește cele trei cauze cele mai frecvente.

Și aceeași sarcină nesupravegheată, de exemplu ca job cron zilnic la ora 7, al cărui rezultat vine prin e-mail:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Rezumă erorile și avertismentele din journalctl din ultimele 24 de ore. Indică serviciul, momentul și cauza probabilă." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Raport zilnic server" admin@example.com

Opțiunea -p pornește Claude Code fără sesiune interactivă, --allowedTools limitează instrumentele exact la ce are nevoie rularea. Acțiunile de scriere nu își au locul în rulări nesupravegheate.

Pasul 5: instalezi Codex CLI (ChatGPT) și te autentifici

Codex CLI este instrumentul OpenAI care aduce modelele din spatele ChatGPT în linia de comandă. Instalare în același cont de utilizator:

npm install -g @openai/codex
codex --version

Autentificarea se face cu contul ChatGPT (Plus, Pro sau Team): pornește codex, alege „Sign in with ChatGPT" și deschide adresa afișată pe un dispozitiv cu browser. Pentru scripturi setezi în schimb o cheie API de pe platforma OpenAI:

echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc

Codex are propriul sandbox și un mod de aprobare. Ambele se stabilesc în ~/.codex/config.toml; pentru un server de producție această combinație este rezonabilă:

mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF

workspace-write permite scrierea doar în directorul de lucru curent, on-request îl face pe agent să ceară permisiune pentru tot ce depășește asta. Nivelul danger-full-access le anulează pe ambele și nu își are locul pe un sistem de producție. Reguli ca în CLAUDE.md Codex le citește dintr-un fișier AGENTS.md din directorul de lucru; poți folosi același conținut:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Verifică dacă toate serviciile systemd activate rulează și listează-le pe cele eșuate cu ultimul mesaj de eroare."

Pentru rulări nesupravegheate există codex exec "sarcină", echivalentul lui claude -p.

Alternativă: agentul rulează pe calculatorul tău și lucrează prin SSH

Cine nu vrea să instaleze nimic pe server pornește Claude Code sau Codex pe laptop și lasă agentul să trimită comenzi prin SSH. Serverul primește pentru asta o cheie SSH proprie pentru utilizatorul agent, iar în CLAUDE.md stă regula ca toate comenzile pentru server să înceapă cu ssh aiagent@server. Pentru întreținere ocazională funcționează bine, dar sarcinile mai lungi și joburile cron rulează mai bine direct pe server.

Pasul 6: securizezi și stabilești limite

  • Snapshot sau backup înaintea fiecărei sesiuni în care se schimbă ceva. Strategia de backup pentru servere arată cum se face automat.
  • Modul de aprobare rămâne activ. --dangerously-skip-permissions în Claude Code și danger-full-access în Codex sunt gândite pentru mașini virtuale de unică folosință.
  • Secretele în afara razei de acțiune. Utilizatorul agent nu trebuie să poată citi fișiere .env, parole de baze de date și date ale clienților. Ce citește ajunge la furnizor.
  • Limită de cost pentru fiecare cheie API în consola furnizorului.
  • Trasabilitate: instalează etckeeper, astfel încât fiecare modificare din /etc să ajungă în Git, și salvează rezumatele agentului.
  • La intrare nu se schimbă nimic. Ambele instrumente au nevoie doar de HTTPS de ieșire. Firewallul, Fail2ban și protecția DDoS a furnizorului rămân neschimbate.

Erori tipice și soluții

MesajCauză și soluție
EACCES: permission denied la npm install -gnpm vrea să scrie într-un director de sistem. Setează un prefix de utilizator: npm config set prefix ~/.npm-global, apoi export PATH=~/.npm-global/bin:$PATH în ~/.bashrc și instalează din nou.
Node.js version ... is not supportedVersiune prea veche din sursele distribuției. Repetă pasul 2 și verifică cu node --version că 22.x este activă.
Autentificarea nu deschide niciun browserPe un server este de așteptat. Deschide adresa afișată pe alt dispozitiv și introdu codul, sau treci la o cheie API.
ECONNREFUSED sau timeout la pornireHTTPS de ieșire este blocat. Verifică regulile de firewall pentru portul 443 spre exterior; pe serverele KernelHost traficul de ieșire este liber de la început.
429 rate limit sau overloadedCota abonamentului sau a API-ului este epuizată sau furnizorul este supraîncărcat. Așteaptă puțin, rulărilor nesupravegheate dă-le o nouă încercare după câteva minute.
Agentul întreabă la fiecare comandăExtinde lista albă din ~/.claude/settings.json, respectiv approval_policy din config.toml, dar doar cu comenzi de citire.

Concluzie

Un agent AI pe server este configurat într-o oră: utilizator, listă albă sudo, Node.js, instrument, reguli. Munca propriu-zisă stă în limite, iar acestea sunt aici în mod deliberat strânse. Extinde-le pas cu pas când o sarcină o cere, niciodată în bloc. Pe un server root KernelHost sau un server dedicat nu trebuie activat nimic pentru asta: accesul root, alegerea liberă a distribuției și conexiunile de ieșire sunt standard.

Întrebări frecvente

Am nevoie de abonament pentru Claude Code sau este suficientă o cheie API?
Ambele funcționează. Cu un cont Claude (Pro, Max sau Team) te autentifici la prima pornire prin browser, pe un server fără browser printr-un cod pe alt dispozitiv. Pentru sarcini automatizate fără om la tastatură, o cheie API în variabila de mediu ANTHROPIC_API_KEY este calea mai curată, deoarece nu este legată de o persoană și poate fi limitată cu un buget.
Cum autentific Codex CLI pe un server fără browser?
Fie prin autentificarea cu contul ChatGPT, unde Codex afișează o adresă pe care o deschizi pe laptop sau pe telefon, fie prin variabila de mediu OPENAI_API_KEY cu o cheie de pe platforma OpenAI. Pentru joburi cron și scripturi, cheia API este varianta mai fiabilă.
De ce versiune Node.js am nevoie?
Claude Code necesită cel puțin Node.js 18, Codex CLI cel puțin Node.js 22. Instalează deci direct Node.js 22 LTS din depozitul NodeSource sau cu nvm în directorul home al utilizatorului agent. Versiunea din sursele de pachete Debian 12 este prea veche.
De ce eșuează npm install -g cu EACCES?
Pentru că npm vrea să scrie global într-un director de sistem la care utilizatorul nu are drepturi. Setează un prefix de utilizator cu npm config set prefix ~/.npm-global, adaugă ~/.npm-global/bin la PATH și instalează din nou. Alternativ folosește nvm sau, pentru Claude Code, instalatorul nativ care se descurcă fără npm.
Pot rula Claude Code într-un job cron?
Da, cu claude -p, o sarcină ca text și o listă albă de instrumente permise. Folosește pentru asta o cheie API, limitează instrumentele la comenzi de citire și direcționează rezultatul într-un fișier sau un e-mail. Intervențiile nu își au locul în rulări nesupravegheate.
Funcționează și pe serverele Windows de la KernelHost?
Da. Claude Code și Codex CLI rulează pe Windows nativ cu Node.js sau în Windows Subsystem for Linux. Pașilor pentru utilizator și lista albă sudo le corespunde acolo un utilizator Windows separat, fără drepturi de administrator.

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