Installera Claude Code och ChatGPT Codex på en Linux-server: steg för steg
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 medclaude --helprespektivecodex --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
dnfi stället förapt. - 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.comochapi.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-permissionsi Claude Code ochdanger-full-accessi 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
etckeeperså att varje ändring under/etchamnar 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
| Meddelande | Orsak och lösning |
EACCES: permission denied vid npm install -g | npm 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 supported | För gammal version från distributionskällorna. Upprepa steg 2 och kontrollera med node --version att 22.x är aktiv. |
| Inloggningen öppnar ingen webbläsare | Fö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 start | Utgå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 overloaded | Abonnemangets 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 kommando | Utö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?
Hur loggar jag in Codex CLI på en server utan webbläsare?
Vilken Node.js-version behöver jag?
Varför misslyckas npm install -g med EACCES?
Kan jag köra Claude Code i ett cronjobb?
Fungerar detta även på Windows-servrar från KernelHost?
2026 KernelHost GmbH. Alla rättigheter förbehållna. Den här guiden är skyddad av upphovsrätt. Publicering på andra webbplatser, helt, delvis eller i bearbetad form, är inte tillåten utan vårt skriftliga medgivande. Citat med källhänvisning och länk är uttryckligen välkomna.

