Instalar Claude Code y ChatGPT Codex en un servidor Linux: paso a paso
De una instalación recién hecha 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, Codex CLI y Gemini CLI, archivos de reglas, tareas cron, primeros encargos y los errores típicos.
Esta guía te 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 bajo un usuario propio con permisos limitados, y presentamos Gemini CLI (Google) como tercera opción. Todos los comandos se probaron en un servidor root KVM de KernelHost con Debian 13 y Ubuntu 24.04. Qué es en esencia un servidor gestionado por IA y qué arquitecturas existen lo explica el artículo Servidor gestionado por IA: conectar agentes de IA de forma segura.
Actualizado a septiembre de 2026. Las herramientas evolucionan rápido; en caso de duda, comprueba las opciones conclaude --help,codex --helpogemini --help, según la herramienta.
Requisitos
- Un servidor root con Debian 12 o 13, o con Ubuntu 22.04 o 24.04, y acceso root por SSH. En AlmaLinux y Rocky Linux los pasos son los mismos; solo cambian los comandos de paquetes, que usan
dnfen lugar deapt. - La seguridad básica ya configurada: inicio de sesión SSH con clave, cortafuegos y actualizaciones de seguridad automáticas. La lista de comprobación para nuevos servidores root cubre todo esto.
- Una cuenta de Anthropic (Claude Pro, Max o Team) o una clave API, o bien una cuenta de ChatGPT (Plus, Pro o Team) o una clave API de OpenAI. Si solo quieres configurar una herramienta, te basta con una de ellas.
- HTTPS saliente hacia
api.anthropic.comyapi.openai.com. En los servidores de KernelHost viene habilitado de serie; un cortafuegos propio restrictivo tiene que permitirlo.
¿Qué servidor basta para un agente de IA?
Un agente de IA no necesita hardware especial ni GPU en el servidor, porque el modelo de lenguaje se ejecuta en los servidores del proveedor. En el servidor solo corren la herramienta de línea de comandos y Node.js, que durante una sesión suelen ocupar juntos unos pocos cientos de megabytes de memoria. Para un servidor que apenas ejecuta nada más, bastan 2 vCPU y 4 GB de RAM. Si el servidor aloja además sitios web, bases de datos o servidores de juego, reserva alrededor de 1 GB de memoria para el agente. Un servidor root KVM de KernelHost está listo en unos 30 segundos y se factura en modalidad PrePaid, sin permanencia mínima, así que también sirve como sistema de pruebas en el que probar primero el agente.
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 unos pocos comandos de solo lectura y amplía la lista cuando una tarea lo requiera de verdad.
sudo adduser --disabled-password --gecos "KI-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
La última línea comprueba la sintaxis. Un error en un archivo sudoers puede bloquear sudo para todos, por eso esta comprobación no debe faltar nunca. --disabled-password garantiza que nadie pueda iniciar sesión como aiagent con una contraseña; más adelante cambiarás a esa cuenta con sudo -iu aiagent. Cómo funcionan en general los usuarios con sudo lo explica el artículo Crear un usuario sudo en Linux.
Permisos de escritura concretos en lugar de un editor con sudo
Si el agente debe modificar archivos en /etc, no le autorices nano mediante sudo (con eso podría editar cualquier archivo, incluido /etc/sudoers); trabaja en su lugar con un grupo y permisos de escritura concretos, por ejemplo setfacl -m u:aiagent:rw /etc/nginx/sites-available/meine-seite.conf. Para empezar, basta de sobra con que el agente proponga los cambios y tú los apliques.
Lo mismo vale para los comandos con comodines en la lista blanca. /usr/bin/tail * permite al agente leer cualquier archivo al que tenga acceso root, incluidos los que contienen credenciales. Si no quieres eso, escribe explícitamente las rutas permitidas, por ejemplo /usr/bin/tail -n 200 /var/log/nginx/error.log.
Paso 2: instalar Node.js 22
Ambas herramientas funcionan con Node.js. Claude Code exige como mínimo la versión 18 y Codex CLI como mínimo la 22, así que instalamos la 22 LTS. Los repositorios de Debian 12 traen una versión demasiado antigua; NodeSource ofrece la actual:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
Alternativa sin permisos de root: nvm
Si no quieres ejecutar scripts de internet con permisos de root, usa nvm en el directorio personal del usuario del agente; así no necesitas permisos de root en ningún momento. Copia el comando de instalación de nvm del README del proyecto; después bastan tres líneas:
nvm install 22
nvm alias default 22
node --version
Encontrarás más detalles y otras vías 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í solo. Como alternativa, puedes instalarlo con npm mediante npm install -g @anthropic-ai/claude-code; si falla con EACCES, consulta la sección de solución de errores más abajo.
Inicio de sesión en un servidor sin navegador
La primera vez que arrancas claude, la herramienta te 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 en el smartphone. A partir de ese momento, la sesión queda iniciada para este usuario en este servidor hasta que la cierres.
Clave API para scripts y tareas cron
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 los demás usuarios no pueden leer. Créala en la consola de Anthropic con un límite de gasto mensual; de este modo, una sesión que se descontrole no podrá salir cara. La clave en sí no debe aparecer nunca en una tarea que encargues al agente ni en un archivo cuyo contenido deba mostrar.
Paso 4: configurar Claude Code para el servidor
El archivo de reglas CLAUDE.md
Al arrancar, Claude Code lee un archivo CLAUDE.md en el directorio actual. En él están las reglas que se 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
El archivo crece con el uso. Cada vez que el agente haga algo de forma distinta a como tú quieres, añade la corrección como regla nueva. Al cabo de unas semanas, refleja con bastante precisión cómo se trabaja en tu servidor.
La lista blanca en settings.json
A esto se suma una lista blanca de herramientas, para que Claude Code ejecute los comandos de lectura sin preguntar y pida aprobación para todo lo demás. El archivo ~/.claude/settings.json se 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
La lista de denegación es una red de seguridad adicional, no un muro: un mismo comando se puede escribir de muchas maneras. El límite real lo marca la lista blanca de sudo del paso 1, porque lo que el usuario no puede hacer tampoco lo puede hacer el agente.
La primera tarea, en modo interactivo
Ahora, la primera tarea de forma interactiva:
cd ~/server && claude
> Resume los errores de journalctl de las últimas 24 horas e indica las tres causas más frecuentes.
Sin supervisión, con una tarea cron
Y la misma tarea sin supervisión, por ejemplo como tarea cron diaria a las 7:00, cuyo resultado te 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 el servicio, la hora y la 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, y --allowedTools limita las herramientas exactamente a lo que necesita la ejecución. Las acciones de escritura no tienen cabida en ejecuciones sin supervisión. Cómo se configuran las tareas cron en general lo explica el artículo Configurar un cron job en Linux.
Paso 5: instalar Codex CLI (ChatGPT) e iniciar sesión
Instalación e inicio de sesión
Codex CLI es la herramienta de OpenAI que lleva a la línea de comandos los modelos que hay detrás de ChatGPT. Se instala 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): inicia codex, elige «Sign in with ChatGPT» y abre la dirección que aparece 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
Sandbox y modo de aprobación en config.toml
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, y on-request hace que el agente pida permiso para todo lo que vaya más allá. El nivel danger-full-access anula ambas cosas y no tiene cabida en un sistema de producción.
Reglas en AGENTS.md
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 enumera los que han fallado con su último mensaje de error."
Para ejecuciones sin supervisión existe codex exec "Aufgabe", el equivalente de claude -p.
Paso 6: Gemini CLI como tercera opción
Gemini CLI es la herramienta de línea de comandos de Google y sigue el mismo principio. También se ejecuta con Node.js y se instala en la misma cuenta de usuario:
npm install -g @google/gemini-cli
gemini --version
Al arrancar gemini por primera vez, inicias sesión con una cuenta de Google; para scripts, defines una clave API en la variable de entorno GEMINI_API_KEY. Gemini CLI lee las reglas de un archivo GEMINI.md en el directorio de trabajo, y aquí también puedes reutilizar el contenido de CLAUDE.md. Las ejecuciones sin supervisión se inician con gemini -p "Aufgabe". Cuál de las tres herramientas uses depende sobre todo de la cuenta que ya tengas: la forma de trabajar en el servidor es la misma en las tres, y puedes usar varias en paralelo.
Alternativa: el agente se ejecuta en tu equipo y trabaja por SSH
Si no quieres instalar nada en el servidor, inicia Claude Code o Codex en tu portátil y deja que el agente lance los 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@server a todos los comandos del servidor. Esto funciona bien para un mantenimiento ocasional, pero las tareas largas y las tareas cron van mejor directamente en el servidor. Cómo se configura en detalle la conexión SSH con clave propia, alias de host y aprobaciones, y qué proceso sigue después el agente para desplegar en sistemas de producción, lo muestra el artículo práctico Conectar la IA con el servidor.
Paso 7: asegurar y fijar límites
- Snapshot o copia de seguridad antes de cada sesión en la que se 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 máquinas virtuales desechables. - Secretos fuera de su alcance. El usuario del agente no debe poder leer archivos
.env, contraseñas de bases de datos ni datos de clientes. Todo lo que lee va al proveedor. - Límite de coste para cada clave API, fijado en la consola del proveedor.
- Trazabilidad: instalar
etckeeperpara que cada cambio en/etcquede registrado en Git, y guardar los resúmenes del agente. - Nada cambia en el tráfico entrante. Ambas herramientas solo necesitan HTTPS saliente. El cortafuegos, Fail2ban y la protección DDoS del proveedor de hosting siguen igual.
Las primeras tareas: cinco encargos útiles
Las mejores primeras tareas son las que implican mucha lectura y ningún riesgo. Muestran rápido con qué rigor trabaja el agente y aportan utilidad desde el primer momento:
- Informe de registros: «Resume los errores y avisos de las últimas 24 horas, agrupados por servicio y con la causa probable».
- Revisar servicios: «Enumera todos los servicios de systemd que han fallado con su último mensaje de error y explica qué habría que hacer en cada caso. No cambies nada».
- Espacio en disco: «Muestra qué directorios ocupan más espacio y propón qué se puede limpiar sin riesgo». Más contexto en el artículo Disco lleno en Linux.
- Actualizaciones: «¿Qué paquetes tienen actualizaciones de seguridad pendientes y qué servicios hay que reiniciar después?».
- Servidor web: «Revisa la configuración de nginx en busca de errores y ajustes obsoletos, y explica cada hallazgo».
Solo cuando estos análisis sean acertados merece la pena confiar al agente tareas de escritura, empezando por un sistema de pruebas.
Errores típicos y soluciones
| Mensaje | Causa y solución |
EACCES: permission denied con npm install -g | npm intenta 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 a ~/.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. |
claude: command not found | El instalador nativo coloca el programa en ~/.local/bin, que todavía no está en el PATH. Añadir export PATH=$HOME/.local/bin:$PATH a ~/.bashrc y recargar el shell. |
| 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 | El HTTPS saliente está bloqueado. Revisar las reglas del cortafuegos para el puerto 443 de salida; en los servidores de KernelHost el tráfico saliente está permitido de serie. |
429 rate limit u overloaded | Cuota de la suscripción o de la API agotada, o proveedor saturado. Esperar un poco y hacer que las ejecuciones sin supervisión reintenten al cabo de unos minutos. |
| El agente pregunta antes de cada comando | Ampliar la lista blanca en ~/.claude/settings.json o la approval_policy en config.toml, pero solo con comandos de lectura. |
| La tarea cron envía correos vacíos | En cron faltan las variables de entorno del shell. Definir la clave API en el crontab o en un archivo de entorno que cargue la tarea, y usar la ruta completa del programa. |
Mantener las herramientas actualizadas
Claude Code se actualiza solo si lo instalaste con el instalador nativo. Las herramientas instaladas con npm se ponen al día con un solo comando:
npm update -g @openai/codex @google/gemini-cli
codex --version
gemini --version
Las versiones nuevas cambian de vez en cuando opciones o valores predeterminados. Tras una actualización, lee por encima las notas de la versión antes de dejar que las ejecuciones sin supervisión sigan en marcha, y revisa el siguiente informe diario por si hay algo fuera de lo normal.
Conclusión
Un agente de IA en el servidor se configura en una hora: usuario, lista blanca de sudo, Node.js, herramienta y reglas. El verdadero trabajo está en los límites, y aquí se han trazado estrechos a propósito. Amplíalos paso a paso cuando una tarea lo exija, nunca en bloque. En un servidor root de KernelHost o en un servidor dedicado no hay que activar nada para ello: el acceso root, la libre elección de distribución y las conexiones salientes vienen de serie.
Cómo despliega después un agente en sistemas de producción, con copia de seguridad, vuelta atrás y aprobaciones, lo describe el artículo práctico Conectar la IA con el servidor.
En resumen
- Claude Code, Codex CLI y Gemini CLI funcionan en cualquier servidor Linux con Node.js 22; no hace falta GPU.
- El agente recibe un usuario propio con lista blanca de sudo y nunca se ejecuta como root.
- Las reglas van en
CLAUDE.md,AGENTS.mdoGEMINI.md; los comandos de lectura entran en la lista blanca y todo lo demás requiere aprobación. - Para tareas cron y scripts, la vía más limpia es una clave API con límite de gasto, y las ejecuciones sin supervisión se limitan a leer.
- Copia de seguridad antes de cada sesión, secretos fuera de su alcance y modo de aprobación activado.
- En los servidores de KernelHost, el acceso root, la libre elección de distribución y las conexiones salientes vienen de serie.
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?
¿Puedo usar Claude Code, Codex CLI y Gemini CLI en paralelo en un mismo servidor?
¿Cuánta memoria RAM necesita un agente de IA en el servidor?
¿Cómo actualizo Claude Code, Codex CLI y Gemini CLI?
¿Cómo configuro Gemini CLI en el servidor?
¿Por qué el agente de IA no debe ejecutarse como root?
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.

