Instalar Claude Code y ChatGPT Codex en un servidor Linux: paso a paso

Publicado el 9 min de lectura

De una instalación reciente de Debian o Ubuntu a un agente de IA operativo: usuario y lista blanca de sudo, Node.js 22, instalación e inicio de sesión de Claude Code y Codex CLI, CLAUDE.md y AGENTS.md, primeras tareas y errores típicos.

Esta guía lleva de un servidor Debian o Ubuntu recién instalado a un agente de IA operativo que analiza registros, revisa configuraciones y ejecuta tareas de mantenimiento. Configuramos Claude Code (Anthropic) y Codex CLI (OpenAI, la herramienta de línea de comandos detrás de ChatGPT), ambos con un usuario propio de permisos limitados. Todos los comandos se probaron en un servidor root KVM de KernelHost con Debian 13 y Ubuntu 24.04. Qué es un servidor gestionado por IA en general y qué arquitecturas existen se explica en el artículo Servidor gestionado por IA: conectar agentes de forma segura.

Estado a septiembre de 2026. Las herramientas evolucionan rápido; en caso de duda, comprueba las opciones con claude --help o codex --help.

Requisitos

  • Un servidor root con Debian 12 o 13 o Ubuntu 22.04 o 24.04 y acceso root por SSH. En AlmaLinux y Rocky Linux los pasos son iguales, solo que los comandos de paquetes se llaman dnf en lugar de apt.
  • Endurecimiento básico hecho: inicio de sesión SSH por clave, cortafuegos, actualizaciones de seguridad automáticas. La lista de comprobación para nuevos servidores root lo cubre.
  • Una cuenta en Anthropic (Claude Pro, Max o Team) o una clave API, una cuenta de ChatGPT (Plus, Pro o Team) o una clave API de OpenAI. Solo necesitas una de ellas si solo quieres configurar una herramienta.
  • HTTPS saliente hacia api.anthropic.com y api.openai.com. En los servidores de KernelHost es así de serie; un cortafuegos propio restrictivo debe permitirlo.

Paso 1: crear un usuario propio y limitar sudo

El agente nunca se ejecuta como root. Recibe su propia cuenta y, mediante una lista blanca de sudo, exactamente los comandos que necesita. Empieza con pocos comandos de lectura y amplía la lista cuando una tarea lo exija de verdad.

sudo adduser --disabled-password --gecos "Agente IA" 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

La última línea comprueba la sintaxis. Un error en un archivo sudoers puede bloquear sudo para todos, por eso la comprobación siempre forma parte del proceso. --disabled-password garantiza que nadie pueda iniciar sesión como aiagent con contraseña; más adelante cambiarás a la cuenta con sudo -iu aiagent.

Si el agente debe modificar archivos en /etc, no le permitas nano mediante sudo (con eso podría editar cualquier archivo, incluido /etc/sudoers), sino trabaja con un grupo y permisos de escritura concretos, por ejemplo setfacl -m u:aiagent:rw /etc/nginx/sites-available/mi-sitio.conf. Para empezar basta con que el agente proponga los cambios y tú los apliques.

Paso 2: instalar Node.js 22

Ambas herramientas funcionan con Node.js. Claude Code exige como mínimo la versión 18, Codex CLI como mínimo la 22; por eso instalamos la 22 LTS. Los repositorios de Debian 12 traen una versión demasiado antigua; NodeSource proporciona la actual:

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

Quien no quiera ejecutar scripts de internet con permisos de root puede usar nvm en el directorio personal del usuario del agente; así es posible sin ningún permiso de root. Detalles y alternativas en la guía de Node.js en Debian.

Paso 3: instalar Claude Code e iniciar sesión

A partir de aquí trabajamos en la cuenta del agente:

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

El instalador nativo coloca Claude Code en ~/.local/bin y se mantiene actualizado por sí mismo. Como alternativa funciona npm con npm install -g @anthropic-ai/claude-code; si falla con EACCES, la sección de solución de errores más abajo te ayudará.

En el primer arranque de claude la herramienta pide iniciar sesión. Con una cuenta de Claude normalmente abre el navegador; en un servidor sin navegador muestra una dirección y un código que confirmas en el portátil o el smartphone. Para scripts y tareas cron, una clave API es la mejor opción:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Responde solo con OK" 

Así la clave solo está en el directorio personal del usuario del agente, que otros usuarios no pueden leer. Créala en la consola de Anthropic con un límite de gasto mensual; así una sesión que se descontrole no podrá salir cara.

Paso 4: configurar Claude Code para el servidor

Al arrancar, Claude Code lee un archivo CLAUDE.md en el directorio actual. Ahí están las reglas que aplican a cada sesión. Crea en el directorio personal del agente un directorio de trabajo con este archivo:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Reglas para este servidor
- Este es un servidor de producción (Debian 13, nginx, PHP-FPM, MariaDB).
- Los comandos de lectura (journalctl, systemctl status, tail, df, ss) están permitidos en todo momento.
- Antes de cada comando de escritura, explicar brevemente qué cambia y esperar la aprobación.
- Nunca eliminar paquetes, nunca borrar archivos bajo /var/lib, nunca crear ni eliminar usuarios.
- Nunca repetir contraseñas, claves ni datos de clientes en las salidas.
- Al final de cada tarea, entregar un resumen en tres frases.
EOF

A esto se añade una lista blanca de herramientas, para que Claude Code ejecute comandos de lectura sin preguntar y pida aprobación para todo lo demás. El archivo ~/.claude/settings.json aplica al usuario:

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

Ahora la primera tarea, de forma interactiva:

cd ~/server && claude
> Resume los errores de journalctl de las últimas 24 horas y nombra las tres causas más frecuentes.

Y la misma tarea sin supervisión, por ejemplo como tarea cron diaria a las 7 cuyo resultado llega por correo:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Resume los errores y avisos de journalctl de las últimas 24 horas. Indica servicio, hora y causa probable." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Informe diario del servidor" admin@example.com

La opción -p inicia Claude Code sin sesión interactiva, --allowedTools limita las herramientas exactamente a lo que necesita la ejecución. Las acciones de escritura no pertenecen a ejecuciones sin supervisión.

Paso 5: instalar Codex CLI (ChatGPT) e iniciar sesión

Codex CLI es la herramienta de OpenAI que lleva los modelos detrás de ChatGPT a la línea de comandos. Instalación en la misma cuenta de usuario:

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

El inicio de sesión se hace con la cuenta de ChatGPT (Plus, Pro o Team): iniciar codex, elegir «Sign in with ChatGPT» y abrir la dirección mostrada en un dispositivo con navegador. Para scripts, define en su lugar una clave API de la plataforma de OpenAI:

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

Codex trae su propio sandbox y un modo de aprobación. Ambos se definen en ~/.codex/config.toml; para un servidor de producción tiene sentido esta combinación:

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

workspace-write solo permite escribir en el directorio de trabajo actual, on-request hace que el agente pida permiso para todo lo que vaya más allá. El nivel danger-full-access anula ambos y no pertenece a un sistema de producción. Codex lee reglas como las de CLAUDE.md desde un archivo AGENTS.md en el directorio de trabajo; puedes usar el mismo contenido:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Comprueba si todos los servicios de systemd habilitados están en ejecución y lista los que han fallado con su último mensaje de error."

Para ejecuciones sin supervisión existe codex exec "tarea", la contrapartida de claude -p.

Alternativa: el agente se ejecuta en tu equipo y trabaja por SSH

Quien no quiera instalar nada en el servidor inicia Claude Code o Codex en el portátil y deja que el agente envíe comandos por SSH. Para ello el servidor recibe una clave SSH propia del usuario del agente, y en CLAUDE.md figura la regla de anteponer ssh aiagent@servidor a todos los comandos del servidor. Funciona bien para mantenimiento ocasional, pero las tareas largas y las tareas cron van mejor directamente en el servidor.

Paso 6: asegurar y fijar límites

  • Snapshot o copia de seguridad antes de cada sesión en la que vaya a cambiar algo. La estrategia de copias de seguridad para servidores muestra cómo automatizarlo.
  • Dejar activado el modo de aprobación. --dangerously-skip-permissions en Claude Code y danger-full-access en Codex están pensados para VM desechables.
  • Secretos fuera del alcance. El usuario del agente no debe poder leer archivos .env, contraseñas de bases de datos ni datos de clientes. Lo que lee va al proveedor.
  • Límite de coste para cada clave API en la consola del proveedor.
  • Trazabilidad: instalar etckeeper para que cada cambio bajo /etc acabe en Git, y guardar los resúmenes del agente.
  • En la entrada no cambia nada. Ambas herramientas solo necesitan HTTPS saliente. Cortafuegos, Fail2ban y la protección DDoS del proveedor de hosting quedan sin cambios.

Errores típicos y soluciones

MensajeCausa y solución
EACCES: permission denied con npm install -gnpm quiere escribir en un directorio del sistema. Definir un prefijo de usuario: npm config set prefix ~/.npm-global, después añadir export PATH=~/.npm-global/bin:$PATH en ~/.bashrc y volver a instalar.
Node.js version ... is not supportedVersión demasiado antigua de los repositorios de la distribución. Repetir el paso 2 y comprobar con node --version que la 22.x está activa.
El inicio de sesión no abre ningún navegadorEs lo esperado en un servidor. Abrir la dirección mostrada en otro dispositivo e introducir el código, o cambiar a una clave API.
ECONNREFUSED o tiempo de espera agotado al arrancarHTTPS saliente bloqueado. Revisar las reglas del cortafuegos para el puerto 443 hacia fuera; en los servidores de KernelHost el tráfico saliente está libre de serie.
429 rate limit u overloadedCuota de la suscripción o de la API agotada, o proveedor saturado. Esperar un poco; dotar a las ejecuciones sin supervisión de un reintento tras unos minutos.
El agente pregunta en cada comandoAmpliar la lista blanca en ~/.claude/settings.json o approval_policy en config.toml, pero solo con comandos de lectura.

Conclusión

Un agente de IA en el servidor se configura en una hora: usuario, lista blanca de sudo, Node.js, herramienta, reglas. El verdadero trabajo está en los límites, y aquí se han trazado deliberadamente estrechos. Amplíalos paso a paso cuando una tarea lo exija, nunca de golpe. En un servidor root de KernelHost o un servidor dedicado no hay nada que activar para ello: acceso root, libre elección de distribución y conexiones salientes son el estándar.

Preguntas frecuentes

¿Necesito una suscripción para Claude Code o basta con una clave API?
Ambas opciones funcionan. Con una cuenta de Claude (Pro, Max o Team) inicias sesión mediante el navegador en el primer arranque; en un servidor sin navegador, mediante un código en otro dispositivo. Para tareas automatizadas sin persona delante, una clave API en la variable de entorno ANTHROPIC_API_KEY es la vía más limpia, porque no está ligada a una persona y se puede limitar con un presupuesto.
¿Cómo inicio sesión en Codex CLI en un servidor sin navegador?
O bien mediante el inicio de sesión con la cuenta de ChatGPT, en el que Codex muestra una dirección que abres en el portátil o el smartphone, o bien mediante la variable de entorno OPENAI_API_KEY con una clave de la plataforma de OpenAI. Para tareas cron y scripts, la clave API es la variante más fiable.
¿Qué versión de Node.js necesito?
Claude Code exige como mínimo Node.js 18, Codex CLI como mínimo Node.js 22. Instala por tanto directamente Node.js 22 LTS mediante el repositorio de NodeSource o con nvm en el directorio personal del usuario del agente. La versión de los repositorios de Debian 12 es demasiado antigua.
¿Por qué falla npm install -g con EACCES?
Porque npm quiere escribir globalmente en un directorio del sistema sobre el que el usuario no tiene permisos. Define un prefijo de usuario con npm config set prefix ~/.npm-global, añade ~/.npm-global/bin al PATH y vuelve a instalar. Como alternativa usa nvm o, para Claude Code, el instalador nativo que prescinde de npm.
¿Puedo ejecutar Claude Code en una tarea cron?
Sí, con claude -p y una tarea en texto junto con una lista blanca de las herramientas permitidas. Usa para ello una clave API, limita las herramientas a comandos de lectura y redirige la salida a un archivo o a un correo. Las acciones intrusivas no pertenecen a ejecuciones sin supervisión.
¿Funciona también en los servidores Windows de KernelHost?
Sí. Claude Code y Codex CLI funcionan en Windows de forma nativa con Node.js o en el Subsistema de Windows para Linux. Los pasos de usuario y lista blanca de sudo corresponden allí a un usuario de Windows propio sin permisos de administrador.

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