Instalar Claude Code y ChatGPT Codex en un servidor Linux: paso a paso
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 conclaude --helpocodex --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
dnfen lugar deapt. - 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.comyapi.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-permissionsen Claude Code ydanger-full-accessen 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
etckeeperpara que cada cambio bajo/etcacabe 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
| Mensaje | Causa y solución |
EACCES: permission denied con npm install -g | npm 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 supported | Versió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 navegador | Es 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 arrancar | HTTPS 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 overloaded | Cuota 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 comando | Ampliar 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?
¿Cómo inicio sesión en Codex CLI en un servidor sin navegador?
¿Qué versión de Node.js necesito?
¿Por qué falla npm install -g con EACCES?
¿Puedo ejecutar Claude Code en una tarea cron?
¿Funciona también en los servidores Windows de KernelHost?
2026 KernelHost GmbH. Todos los derechos reservados. Esta guía está protegida por derechos de autor. Su publicación en otros sitios web, aunque sea de forma parcial o modificada, no está permitida sin nuestro consentimiento por escrito. Las citas con indicación de la fuente y un enlace son muy bienvenidas.

