Installera Claude Code och ChatGPT Codex på en Linux-server: steg för steg

Publicerad den 8 min läsning

Från en nyinstallerad Debian- eller Ubuntu-server till en fungerande AI-agent: användare och sudo-tillåtelselista, Node.js 22, installation och inloggning av Claude Code och Codex CLI, CLAUDE.md och AGENTS.md, första uppgifter och typiska fel.

Den här guiden tar dig från en nyinstallerad Debian- eller Ubuntu-server till en fungerande AI-agent som analyserar loggar, kontrollerar konfigurationer och utför underhållsuppgifter. Vi sätter upp Claude Code (Anthropic) och Codex CLI (OpenAI, kommandoradsverktyget bakom ChatGPT), båda under en egen användare med begränsade rättigheter. Alla kommandon har testats på en KernelHost KVM-rootserver med Debian 13 och Ubuntu 24.04. Vad en AI-hanterad server är i allmänhet och vilka arkitekturer som finns beskrivs i artikeln AI-hanterad server: koppla AI-agenter säkert.

Läget i september 2026. Verktygen utvecklas snabbt; kontrollera flaggor vid tvekan med claude --help respektive codex --help.

Förutsättningar

  • En rootserver med Debian 12 eller 13 respektive Ubuntu 22.04 eller 24.04 och rootåtkomst via SSH. På AlmaLinux och Rocky Linux är stegen desamma, bara paketkommandona heter dnf i stället för apt.
  • Grundhärdning gjord: SSH-inloggning med nyckel, brandvägg, automatiska säkerhetsuppdateringar. Checklistan för nya rootservrar täcker det.
  • Ett konto hos Anthropic (Claude Pro, Max eller Team) eller en API-nyckel, ett ChatGPT-konto (Plus, Pro eller Team) eller en OpenAI-API-nyckel. Du behöver bara ett av dem om du bara vill sätta upp ett verktyg.
  • Utgående HTTPS till api.anthropic.com och api.openai.com. På KernelHost-servrar är det så från start; en restriktiv egen brandvägg måste tillåta det.

Steg 1: skapa en egen användare och begränsa sudo

Agenten körs aldrig som root. Den får ett eget konto och via en sudo-tillåtelselista exakt de kommandon den behöver. Börja med några läsande kommandon och utöka listan när en uppgift verkligen kräver det.

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

Den sista raden kontrollerar syntaxen. Ett fel i en sudoers-fil kan spärra sudo för alla, därför hör kontrollen alltid till. --disabled-password ser till att ingen kan logga in som aiagent med lösenord; du byter senare till kontot med sudo -iu aiagent.

Om agenten ska ändra filer i /etc, ge den inte nano via sudo (då skulle varje fil kunna redigeras, även /etc/sudoers), utan arbeta med en grupp och riktade skrivrättigheter, till exempel setfacl -m u:aiagent:rw /etc/nginx/sites-available/min-sajt.conf. Till en början räcker det helt att agenten föreslår ändringar och att du genomför dem.

Steg 2: installera Node.js 22

Båda verktygen körs på Node.js. Claude Code kräver minst version 18, Codex CLI minst 22, därför installerar vi 22 LTS. Paketkällorna i Debian 12 levererar en för gammal version; NodeSource levererar den aktuella:

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

Den som inte vill köra skript från internet med rooträttigheter använder nvm i agentanvändarens hemkatalog; då går det helt utan rooträttigheter. Detaljer och alternativ finns i guiden för Node.js på Debian.

Steg 3: installera Claude Code och logga in

Härifrån arbetar vi i agentens konto:

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

Det inbyggda installationsprogrammet lägger Claude Code under ~/.local/bin och håller sig självt uppdaterat. Alternativt går det via npm med npm install -g @anthropic-ai/claude-code; misslyckas det med EACCES hjälper felsökningsavsnittet längre ned.

Vid första starten av claude frågar verktyget efter inloggning. Med ett Claude-konto öppnar det normalt webbläsaren; på en server utan webbläsare visar det en adress och en kod som du bekräftar på bärbar dator eller mobil. För skript och cronjobb är en API-nyckel det bättre valet:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Svara bara med OK" 

Nyckeln ligger därmed bara i agentanvändarens hemkatalog, som andra användare inte kan läsa. Skapa den i Anthropic-konsolen med en månatlig utgiftsgräns, så kan en session som skenar iväg inte bli dyr.

Steg 4: konfigurera Claude Code för servern

Claude Code läser vid start en fil CLAUDE.md i den aktuella katalogen. Där står reglerna som gäller för varje session. Skapa en arbetskatalog med den här filen i agentens hemkatalog:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Regler för den här servern
- Detta är en produktionsserver (Debian 13, nginx, PHP-FPM, MariaDB).
- Läsande kommandon (journalctl, systemctl status, tail, df, ss) är alltid tillåtna.
- Före varje skrivande kommando: förklara kort vad det ändrar och vänta på godkännande.
- Ta aldrig bort paket, radera aldrig filer under /var/lib, skapa eller ta aldrig bort användare.
- Upprepa aldrig lösenord, nycklar eller kunddata i utdata.
- Lämna en sammanfattning i tre meningar i slutet av varje uppgift.
EOF

Till det kommer en tillåtelselista över verktyg, så att Claude Code kör läsande kommandon utan att fråga och begär godkännande för allt annat. Filen ~/.claude/settings.json gäller för användaren:

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 den första uppgiften, interaktivt:

cd ~/server && claude
> Sammanfatta felen från journalctl under de senaste 24 timmarna och ange de tre vanligaste orsakerna.

Och samma uppgift obevakat, till exempel som ett dagligt cronjobb klockan 7 vars resultat kommer via e-post:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Sammanfatta fel och varningar från journalctl under de senaste 24 timmarna. Ange tjänst, tidpunkt och trolig orsak." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Dagsrapport server" admin@example.com

Flaggan -p startar Claude Code utan interaktiv session, --allowedTools begränsar verktygen till exakt det körningen behöver. Skrivande åtgärder hör inte hemma i obevakade körningar.

Steg 5: installera Codex CLI (ChatGPT) och logga in

Codex CLI är OpenAI:s verktyg som tar modellerna bakom ChatGPT till kommandoraden. Installation i samma användarkonto:

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

Inloggningen sker med ChatGPT-kontot (Plus, Pro eller Team): starta codex, välj „Sign in with ChatGPT" och öppna den visade adressen på en enhet med webbläsare. För skript sätter du i stället en API-nyckel från OpenAI-plattformen:

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

Codex har en egen sandlåda och ett godkännandeläge. Båda anges i ~/.codex/config.toml; för en produktionsserver är den här kombinationen rimlig:

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

workspace-write tillåter skrivning bara i den aktuella arbetskatalogen, on-request låter agenten be om tillstånd för allt utöver det. Nivån danger-full-access tar bort båda och hör inte hemma på ett produktionssystem. Regler som i CLAUDE.md läser Codex från en fil AGENTS.md i arbetskatalogen; du kan använda samma innehåll:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Kontrollera om alla aktiverade systemd-tjänster körs och lista de som misslyckats med det senaste felmeddelandet."

För obevakade körningar finns codex exec "uppgift", motsvarigheten till claude -p.

Alternativ: agenten körs på din dator och arbetar via SSH

Den som inte vill installera något på servern startar Claude Code eller Codex på den bärbara datorn och låter agenten skicka kommandon via SSH. För det får servern en egen SSH-nyckel för agentanvändaren, och i CLAUDE.md står regeln att inleda alla serverkommandon med ssh aiagent@server. Det fungerar bra för tillfälligt underhåll, men längre uppgifter och cronjobb körs bättre direkt på servern.

Steg 6: säkra och sätt gränser

  • Ögonblicksbild eller backup före varje session där något ska ändras. Backupstrategin för servrar visar hur det sker automatiskt.
  • Låt godkännandeläget vara på. --dangerously-skip-permissions i Claude Code och danger-full-access i Codex är avsedda för engångs-VM:er.
  • Hemligheter utom räckhåll. Agentanvändaren får inte kunna läsa .env-filer, databaslösenord och kunddata. Det den läser går till leverantören.
  • Kostnadsgräns för varje API-nyckel i leverantörens konsol.
  • Spårbarhet: installera etckeeper så att varje ändring under /etc hamnar i Git, och spara agentens sammanfattningar.
  • Inkommande ändras inget. Båda verktygen behöver bara utgående HTTPS. Brandvägg, Fail2ban och leverantörens DDoS-skydd förblir oförändrade.

Typiska fel och lösningar

MeddelandeOrsak och lösning
EACCES: permission denied vid npm install -gnpm vill skriva i en systemkatalog. Sätt användarprefix: npm config set prefix ~/.npm-global, lägg sedan till export PATH=~/.npm-global/bin:$PATH i ~/.bashrc och installera igen.
Node.js version ... is not supportedFör gammal version från distributionskällorna. Upprepa steg 2 och kontrollera med node --version att 22.x är aktiv.
Inloggningen öppnar ingen webbläsareFörväntat på en server. Öppna den visade adressen på en annan enhet och ange koden, eller byt till en API-nyckel.
ECONNREFUSED eller timeout vid startUtgående HTTPS är blockerat. Kontrollera brandväggsregler för port 443 utåt; på KernelHost-servrar är utgående trafik fri från start.
429 rate limit eller overloadedAbonnemangets eller API:ets kvot förbrukad eller leverantören överbelastad. Vänta kort, ge obevakade körningar ett nytt försök efter några minuter.
Agenten frågar vid varje kommandoUtöka tillåtelselistan i ~/.claude/settings.json respektive approval_policy i config.toml, men bara med läsande kommandon.

Slutsats

En AI-agent på servern är uppsatt på en timme: användare, sudo-tillåtelselista, Node.js, verktyg, regler. Det egentliga arbetet ligger i gränserna, och de är här medvetet snäva. Utöka dem steg för steg när en uppgift kräver det, aldrig i klump. På en KernelHost-rootserver eller dedikerad server behöver inget aktiveras för det: rootåtkomst, fritt val av distribution och utgående anslutningar är standard.

Vanliga frågor

Behöver jag ett abonnemang för Claude Code eller räcker en API-nyckel?
Båda fungerar. Med ett Claude-konto (Pro, Max eller Team) loggar du in via webbläsaren vid första starten, på en server utan webbläsare via en kod på en annan enhet. För automatiserade uppgifter utan människa framför är en API-nyckel i miljövariabeln ANTHROPIC_API_KEY den renare vägen, eftersom den inte är knuten till en person och kan begränsas med en budget.
Hur loggar jag in Codex CLI på en server utan webbläsare?
Antingen via inloggningen med ChatGPT-kontot, där Codex visar en adress som du öppnar på bärbar dator eller mobil, eller via miljövariabeln OPENAI_API_KEY med en nyckel från OpenAI-plattformen. För cronjobb och skript är API-nyckeln den mer tillförlitliga varianten.
Vilken Node.js-version behöver jag?
Claude Code kräver minst Node.js 18, Codex CLI minst Node.js 22. Installera därför direkt Node.js 22 LTS via NodeSource-förrådet eller med nvm i agentanvändarens hemkatalog. Versionen från Debian 12:s paketkällor är för gammal.
Varför misslyckas npm install -g med EACCES?
Eftersom npm vill skriva globalt i en systemkatalog som användaren saknar rättigheter till. Sätt ett användarprefix med npm config set prefix ~/.npm-global, lägg till ~/.npm-global/bin i PATH och installera igen. Använd annars nvm eller för Claude Code det inbyggda installationsprogrammet som klarar sig utan npm.
Kan jag köra Claude Code i ett cronjobb?
Ja, med claude -p och en uppgift som text samt en tillåtelselista över tillåtna verktyg. Använd en API-nyckel för det, begränsa verktygen till läsande kommandon och styr utdatan till en fil eller ett e-postmeddelande. Ingripande åtgärder hör inte hemma i obevakade körningar.
Fungerar detta även på Windows-servrar från KernelHost?
Ja. Claude Code och Codex CLI körs inbyggt på Windows med Node.js eller i Windows Subsystem for Linux. Stegen för användare och sudo-tillåtelselista motsvarar där en egen Windows-användare utan administratörsrättigheter.

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