Claude Code en ChatGPT Codex op een Linux-server installeren: stap voor stap
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 metclaude --helpofcodex --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
dnfin plaats vanapt. - 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.comenapi.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-permissionsbij Claude Code endanger-full-accessbij 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:
etckeeperinstalleren zodat elke wijziging onder/etcin 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
| Melding | Oorzaak en oplossing |
EACCES: permission denied bij npm install -g | npm 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 supported | Te oude versie uit de distributiebronnen. Stap 2 herhalen en met node --version controleren dat 22.x actief is. |
| Aanmelden opent geen browser | Verwacht 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 starten | Uitgaand HTTPS is geblokkeerd. Firewallregels voor poort 443 naar buiten controleren; op KernelHost-servers is uitgaand verkeer standaard vrij. |
429 rate limit of overloaded | Quotum 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 commando | Allowlist 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?
Hoe meld ik Codex CLI aan op een server zonder browser?
Welke Node.js-versie heb ik nodig?
Waarom mislukt npm install -g met EACCES?
Kan ik Claude Code in een cronjob laten draaien?
Werkt dit ook op Windows-servers van KernelHost?
2026 KernelHost GmbH. Alle rechten voorbehouden. Deze handleiding is auteursrechtelijk beschermd. Publicatie op andere websites, geheel, gedeeltelijk of in bewerkte vorm, is zonder onze schriftelijke toestemming niet toegestaan. Citeren met bronvermelding en link is uitdrukkelijk welkom.

