Claude Code en ChatGPT Codex op een Linux-server installeren: stap voor stap

Gepubliceerd op 8 min leestijd

Van een verse Debian- of Ubuntu-installatie naar een werkende AI-agent: gebruiker en sudo-allowlist, Node.js 22, installatie en aanmelding van Claude Code en Codex CLI, CLAUDE.md en AGENTS.md, eerste taken en de typische fouten.

Deze handleiding brengt je van een vers geïnstalleerde Debian- of Ubuntu-server naar een werkende AI-agent die logs analyseert, configuraties controleert en onderhoudstaken uitvoert. We richten Claude Code (Anthropic) en Codex CLI (OpenAI, het commandoregelprogramma achter ChatGPT) in, beide onder een eigen gebruiker met beperkte rechten. Alle commando s zijn getest op een KernelHost KVM-rootserver met Debian 13 en Ubuntu 24.04. Wat een AI managed server in het algemeen is en welke architecturen er zijn, staat in het artikel AI managed server: AI-agents veilig koppelen.

Stand september 2026. De programma s ontwikkelen zich snel; controleer opties bij twijfel met claude --help of codex --help.

Vereisten

  • Een rootserver met Debian 12 of 13 of Ubuntu 22.04 of 24.04 en roottoegang via SSH. Op AlmaLinux en Rocky Linux zijn de stappen gelijk, alleen heten de pakketcommando s dnf in plaats van apt.
  • Basisbeveiliging gedaan: SSH-login met sleutel, firewall, automatische beveiligingsupdates. De checklist voor nieuwe rootservers dekt dat af.
  • Een account bij Anthropic (Claude Pro, Max of Team) of een API-sleutel, een ChatGPT-account (Plus, Pro of Team) of een OpenAI-API-sleutel. Je hebt er maar één van nodig als je maar één programma wilt inrichten.
  • Uitgaand HTTPS naar api.anthropic.com en api.openai.com. Op KernelHost-servers is dat standaard het geval; een restrictieve eigen firewall moet het toestaan.

Stap 1: eigen gebruiker aanmaken en sudo beperken

De agent draait nooit als root. Hij krijgt een eigen account en via een sudo-allowlist precies de commando s die hij nodig heeft. Begin met enkele leescommando s en breid de lijst uit als een taak dat echt vereist.

sudo adduser --disabled-password --gecos "AI-agent" 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

De laatste regel controleert de syntaxis. Een fout in een sudoers-bestand kan sudo voor iedereen blokkeren, daarom hoort de controle er altijd bij. --disabled-password zorgt ervoor dat niemand zich met een wachtwoord als aiagent kan aanmelden; je schakelt later met sudo -iu aiagent over naar het account.

Moet de agent bestanden in /etc wijzigen, geef hem dan geen nano via sudo vrij (daarmee zou elk bestand te bewerken zijn, ook /etc/sudoers), maar werk met een groep en gerichte schrijfrechten, bijvoorbeeld setfacl -m u:aiagent:rw /etc/nginx/sites-available/mijn-site.conf. Om te beginnen volstaat het volledig als de agent wijzigingen voorstelt en jij ze doorvoert.

Stap 2: Node.js 22 installeren

Beide programma s draaien op Node.js. Claude Code vereist minimaal versie 18, Codex CLI minimaal 22, daarom installeren we 22 LTS. De pakketbronnen van Debian 12 leveren een te oude versie; NodeSource levert de actuele:

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

Wie geen scripts van internet met rootrechten wil uitvoeren, gebruikt nvm in de homemap van de agentgebruiker; dat kan dan helemaal zonder rootrechten. Details en alternatieven staan in de handleiding voor Node.js op Debian.

Stap 3: Claude Code installeren en aanmelden

Vanaf hier werken we in het account van de agent:

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

De native installer zet Claude Code onder ~/.local/bin en houdt zichzelf actueel. Anders werkt npm met npm install -g @anthropic-ai/claude-code; mislukt dat met EACCES, dan helpt het gedeelte over probleemoplossing verderop.

Bij de eerste start van claude vraagt het programma om aanmelding. Met een Claude-account opent het normaal de browser; op een server zonder browser toont het een adres en een code die je op laptop of smartphone bevestigt. Voor scripts en cronjobs is een API-sleutel de betere keuze:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Antwoord alleen met OK" 

De sleutel staat daarmee alleen in de homemap van de agentgebruiker, die andere gebruikers niet kunnen lezen. Maak hem in de Anthropic-console aan met een maandelijkse uitgavenlimiet, dan kan een sessie die uit de hand loopt niet duur worden.

Stap 4: Claude Code voor de server configureren

Claude Code leest bij het starten een bestand CLAUDE.md in de huidige map. Daar staan de regels die voor elke sessie gelden. Maak in de homemap van de agent een werkmap met dit bestand:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Regels voor deze server
- Dit is een productieserver (Debian 13, nginx, PHP-FPM, MariaDB).
- Leescommando s (journalctl, systemctl status, tail, df, ss) zijn altijd toegestaan.
- Vóór elk schrijvend commando kort uitleggen wat het verandert en op goedkeuring wachten.
- Nooit pakketten verwijderen, nooit bestanden onder /var/lib wissen, nooit gebruikers aanmaken of verwijderen.
- Wachtwoorden, sleutels en klantgegevens nooit in uitvoer herhalen.
- Aan het einde van elke taak een samenvatting in drie zinnen geven.
EOF

Daar komt een allowlist van hulpmiddelen bij, zodat Claude Code leescommando s zonder navraag uitvoert en voor al het andere om toestemming vraagt. Het bestand ~/.claude/settings.json geldt voor de gebruiker:

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

Nu de eerste taak, interactief:

cd ~/server && claude
> Vat de fouten uit journalctl van de laatste 24 uur samen en noem de drie meest voorkomende oorzaken.

En dezelfde taak onbewaakt, bijvoorbeeld als dagelijkse cronjob om 7 uur waarvan het resultaat per e-mail komt:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Vat fouten en waarschuwingen uit journalctl van de laatste 24 uur samen. Noem dienst, tijdstip en waarschijnlijke oorzaak." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Dagrapport server" admin@example.com

De optie -p start Claude Code zonder interactieve sessie, --allowedTools beperkt de hulpmiddelen tot precies wat de run nodig heeft. Schrijvende acties horen niet in onbewaakte runs.

Stap 5: Codex CLI (ChatGPT) installeren en aanmelden

Codex CLI is het programma van OpenAI dat de modellen achter ChatGPT naar de commandoregel brengt. Installatie in hetzelfde gebruikersaccount:

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

Aanmelden gaat met het ChatGPT-account (Plus, Pro of Team): codex starten, „Sign in with ChatGPT" kiezen en het getoonde adres op een apparaat met browser openen. Voor scripts stel je in plaats daarvan een API-sleutel van het OpenAI-platform in:

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

Codex heeft een eigen sandbox en een goedkeuringsmodus. Beide worden in ~/.codex/config.toml vastgelegd; voor een productieserver is deze combinatie zinvol:

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

workspace-write staat schrijven alleen in de huidige werkmap toe, on-request laat de agent voor alles daarbuiten om toestemming vragen. Het niveau danger-full-access heft beide op en hoort niet op een productiesysteem. Regels zoals in CLAUDE.md leest Codex uit een bestand AGENTS.md in de werkmap; je kunt dezelfde inhoud gebruiken:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Controleer of alle ingeschakelde systemd-diensten draaien en geef de mislukte weer met de laatste foutmelding."

Voor onbewaakte runs is er codex exec "taak", de tegenhanger van claude -p.

Alternatief: de agent draait op je eigen computer en werkt via SSH

Wie niets op de server wil installeren, start Claude Code of Codex op de laptop en laat de agent commando s via SSH versturen. Daarvoor krijgt de server een eigen SSH-sleutel van de agentgebruiker, en in CLAUDE.md staat de regel om alle servercommando s vooraf te laten gaan door ssh aiagent@server. Dat werkt goed voor incidenteel onderhoud, maar langere taken en cronjobs draaien beter direct op de server.

Stap 6: beveiligen en grenzen stellen

  • Snapshot of back-up vóór elke sessie waarin iets moet veranderen. De back-upstrategie voor servers laat zien hoe dat automatisch gaat.
  • Goedkeuringsmodus aan laten. --dangerously-skip-permissions bij Claude Code en danger-full-access bij Codex zijn bedoeld voor wegwerp-VM s.
  • Geheimen buiten bereik. De agentgebruiker mag .env-bestanden, databasewachtwoorden en klantgegevens niet kunnen lezen. Wat hij leest, gaat naar de aanbieder.
  • Kostenlimiet voor elke API-sleutel in de console van de aanbieder.
  • Traceerbaarheid: etckeeper installeren zodat elke wijziging onder /etc in Git belandt, en de samenvattingen van de agent bewaren.
  • Inkomend verandert er niets. Beide programma s hebben alleen uitgaand HTTPS nodig. Firewall, Fail2ban en de DDoS-bescherming van de hoster blijven ongewijzigd.

Typische fouten en oplossingen

MeldingOorzaak en oplossing
EACCES: permission denied bij npm install -gnpm wil in een systeemmap schrijven. Gebruikersprefix instellen: npm config set prefix ~/.npm-global, dan export PATH=~/.npm-global/bin:$PATH in ~/.bashrc zetten en opnieuw installeren.
Node.js version ... is not supportedTe oude versie uit de distributiebronnen. Stap 2 herhalen en met node --version controleren dat 22.x actief is.
Aanmelden opent geen browserVerwacht op een server. Het getoonde adres op een ander apparaat openen en de code invoeren, of overstappen op een API-sleutel.
ECONNREFUSED of time-out bij het startenUitgaand HTTPS is geblokkeerd. Firewallregels voor poort 443 naar buiten controleren; op KernelHost-servers is uitgaand verkeer standaard vrij.
429 rate limit of overloadedQuotum van het abonnement of de API uitgeput of aanbieder overbelast. Even wachten, onbewaakte runs een herhaling na enkele minuten geven.
De agent vraagt bij elk commandoAllowlist in ~/.claude/settings.json of approval_policy in config.toml aanvullen, maar alleen met leescommando s.

Conclusie

Een AI-agent op de server is in een uur ingericht: gebruiker, sudo-allowlist, Node.js, programma, regels. Het eigenlijke werk zit in de grenzen, en die zijn hier bewust nauw getrokken. Breid ze stap voor stap uit als een taak het vereist, nooit in één keer. Op een KernelHost-rootserver of dedicated server hoeft daarvoor niets vrijgeschakeld te worden: roottoegang, vrije distributiekeuze en uitgaande verbindingen zijn standaard.

Veelgestelde vragen

Heb ik voor Claude Code een abonnement nodig of volstaat een API-sleutel?
Beide werken. Met een Claude-account (Pro, Max of Team) meld je je bij de eerste start via de browser aan, op een server zonder browser via een code op een ander apparaat. Voor geautomatiseerde taken zonder mens ervoor is een API-sleutel in de omgevingsvariabele ANTHROPIC_API_KEY de nettere weg, omdat die niet aan een persoon gebonden is en met een budget te begrenzen is.
Hoe meld ik Codex CLI aan op een server zonder browser?
Of via de aanmelding met het ChatGPT-account, waarbij Codex een adres toont dat je op laptop of smartphone opent, of via de omgevingsvariabele OPENAI_API_KEY met een sleutel van het OpenAI-platform. Voor cronjobs en scripts is de API-sleutel de betrouwbaardere variant.
Welke Node.js-versie heb ik nodig?
Claude Code vereist minimaal Node.js 18, Codex CLI minimaal Node.js 22. Installeer daarom meteen Node.js 22 LTS via de NodeSource-repository of met nvm in de homemap van de agentgebruiker. De versie uit de Debian 12-pakketbronnen is te oud.
Waarom mislukt npm install -g met EACCES?
Omdat npm globaal in een systeemmap wil schrijven waar de gebruiker geen rechten op heeft. Stel een gebruikersprefix in met npm config set prefix ~/.npm-global, voeg ~/.npm-global/bin toe aan het PATH en installeer opnieuw. Gebruik anders nvm of voor Claude Code de native installer, die zonder npm werkt.
Kan ik Claude Code in een cronjob laten draaien?
Ja, met claude -p en een taak als tekst plus een allowlist van toegestane hulpmiddelen. Gebruik daarvoor een API-sleutel, beperk de hulpmiddelen tot leescommando s en stuur de uitvoer naar een bestand of een e-mail. Ingrijpende acties horen niet in onbewaakte runs.
Werkt dit ook op Windows-servers van KernelHost?
Ja. Claude Code en Codex CLI draaien onder Windows native met Node.js of in het Windows-subsysteem voor Linux. De stappen voor gebruiker en sudo-allowlist komen daar overeen met een eigen Windows-gebruiker zonder beheerdersrechten.

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