Установка Claude Code и ChatGPT Codex на Linux-сервер: пошагово

Опубликовано 8 мин. чтения

От свежеустановленного сервера Debian или Ubuntu до работающего ИИ-агента: пользователь и белый список sudo, Node.js 22, установка и вход в Claude Code и Codex CLI, CLAUDE.md и AGENTS.md, первые задачи и типичные ошибки.

Это руководство проведёт вас от свежеустановленного сервера Debian или Ubuntu до работающего ИИ-агента, который анализирует логи, проверяет конфигурации и выполняет задачи обслуживания. Мы настраиваем Claude Code (Anthropic) и Codex CLI (OpenAI, инструмент командной строки, стоящий за ChatGPT), оба под отдельным пользователем с ограниченными правами. Все команды проверены на KVM root-сервере KernelHost с Debian 13 и Ubuntu 24.04. Что такое сервер под управлением ИИ в целом и какие существуют архитектуры, описано в статье Сервер под управлением ИИ: безопасное подключение ИИ-агентов.

Состояние на сентябрь 2026 года. Инструменты быстро развиваются; при сомнениях проверяйте флаги командами claude --help и codex --help.

Предварительные требования

  • Root-сервер с Debian 12 или 13 либо Ubuntu 22.04 или 24.04 и root-доступом по SSH. На AlmaLinux и Rocky Linux шаги те же, только команды для пакетов называются dnf вместо apt.
  • Базовое укрепление выполнено: вход по SSH по ключу, файрвол, автоматические обновления безопасности. Это покрывает чек-лист для новых root-серверов.
  • Учётная запись Anthropic (Claude Pro, Max или Team) или API-ключ, учётная запись ChatGPT (Plus, Pro или Team) или API-ключ OpenAI. Если вы хотите настроить только один инструмент, нужно только одно из этого.
  • Исходящий HTTPS к api.anthropic.com и api.openai.com. На серверах KernelHost это есть изначально; строгий собственный файрвол должен это разрешать.

Шаг 1: создать отдельного пользователя и ограничить sudo

Агент никогда не работает от root. Он получает собственную учётную запись и через белый список sudo ровно те команды, которые ему нужны. Начните с нескольких команд на чтение и расширяйте список, когда задача действительно этого требует.

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

Последняя строка проверяет синтаксис. Ошибка в файле sudoers может заблокировать sudo для всех, поэтому проверка обязательна всегда. --disabled-password гарантирует, что никто не сможет войти как aiagent по паролю; на учётную запись вы позже переключаетесь командой sudo -iu aiagent.

Если агент должен менять файлы в /etc, не давайте ему nano через sudo (тогда можно было бы редактировать любой файл, включая /etc/sudoers), а работайте с группой и точечными правами на запись, например setfacl -m u:aiagent:rw /etc/nginx/sites-available/moy-sayt.conf. Для начала вполне достаточно, чтобы агент предлагал изменения, а вы их вносили.

Шаг 2: установить Node.js 22

Оба инструмента работают на Node.js. Claude Code требует не ниже версии 18, Codex CLI не ниже 22, поэтому устанавливаем 22 LTS. Источники пакетов Debian 12 поставляют слишком старую версию; NodeSource поставляет актуальную:

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

Кто не хочет запускать скрипты из интернета с правами root, использует nvm в домашнем каталоге пользователя агента; это работает полностью без прав root. Подробности и альтернативы в руководстве по Node.js на Debian.

Шаг 3: установить Claude Code и войти

Дальше работаем в учётной записи агента:

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

Нативный установщик размещает Claude Code в ~/.local/bin и сам поддерживает себя в актуальном состоянии. Альтернативно можно через npm командой npm install -g @anthropic-ai/claude-code; если она завершается ошибкой EACCES, поможет раздел об устранении ошибок ниже.

При первом запуске claude инструмент запрашивает вход. С учётной записью Claude он обычно открывает браузер; на сервере без браузера показывает адрес и код, которые вы подтверждаете на ноутбуке или телефоне. Для скриптов и cron-заданий лучше подходит API-ключ:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Ответь только OK" 

Таким образом ключ лежит только в домашнем каталоге пользователя агента, который другие пользователи не могут прочитать. Создайте его в консоли Anthropic с месячным лимитом расходов, чтобы вышедшая из-под контроля сессия не могла стать дорогой.

Шаг 4: настроить Claude Code для сервера

При запуске Claude Code читает файл CLAUDE.md в текущем каталоге. В нём находятся правила, действующие для каждой сессии. Создайте рабочий каталог с этим файлом в домашнем каталоге агента:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Правила для этого сервера
- Это производственный сервер (Debian 13, nginx, PHP-FPM, MariaDB).
- Команды на чтение (journalctl, systemctl status, tail, df, ss) разрешены всегда.
- Перед каждой командой на запись: кратко объясни, что она меняет, и дождись одобрения.
- Никогда не удаляй пакеты, никогда не удаляй файлы в /var/lib, никогда не создавай и не удаляй пользователей.
- Никогда не повторяй пароли, ключи или данные клиентов в выводе.
- В конце каждой задачи дай итог в трёх предложениях.
EOF

К этому добавляется белый список инструментов, чтобы Claude Code выполнял команды на чтение без вопросов и запрашивал одобрение для всего остального. Файл ~/.claude/settings.json действует для пользователя:

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

Теперь первая задача, интерактивно:

cd ~/server && claude
> Подведи итог ошибок из journalctl за последние 24 часа и назови три самые частые причины.

И та же задача без присмотра, например как ежедневное cron-задание в 7 утра, результат которого приходит по почте:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Подведи итог ошибок и предупреждений из journalctl за последние 24 часа. Укажи службу, время и вероятную причину." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Ежедневный отчёт сервера" admin@example.com

Флаг -p запускает Claude Code без интерактивной сессии, --allowedTools ограничивает инструменты ровно тем, что нужно этому запуску. Действиям на запись не место в запусках без присмотра.

Шаг 5: установить Codex CLI (ChatGPT) и войти

Codex CLI, инструмент OpenAI, приносит модели, стоящие за ChatGPT, в командную строку. Установка в той же учётной записи:

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

Вход выполняется с учётной записью ChatGPT (Plus, Pro или Team): запустите codex, выберите «Sign in with ChatGPT» и откройте показанный адрес на устройстве с браузером. Для скриптов вместо этого задайте API-ключ с платформы OpenAI:

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

У Codex есть собственная песочница и режим одобрения. Оба задаются в ~/.codex/config.toml; для производственного сервера разумна такая комбинация:

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

workspace-write разрешает запись только в текущий рабочий каталог, on-request заставляет агента запрашивать разрешение на всё, что выходит за его пределы. Уровень danger-full-access отменяет и то и другое и не подходит для производственной системы. Правила, как в CLAUDE.md, Codex читает из файла AGENTS.md в рабочем каталоге; можно использовать то же содержимое:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Проверь, работают ли все включённые службы systemd, и перечисли упавшие с последним сообщением об ошибке."

Для запусков без присмотра есть codex exec "задача", аналог claude -p.

Альтернатива: агент работает на вашем компьютере и действует через SSH

Кто не хочет ничего устанавливать на сервер, запускает Claude Code или Codex на ноутбуке и позволяет агенту отправлять команды через SSH. Для этого сервер получает отдельный SSH-ключ для пользователя агента, а в CLAUDE.md прописано правило, что все серверные команды начинаются с ssh aiagent@server. Для нерегулярного обслуживания это хорошо работает, но длительные задачи и cron-задания лучше выполняются прямо на сервере.

Шаг 6: защитить и задать лимиты

  • Снимок или резервная копия перед каждой сессией, в которой что-то должно измениться. Стратегия резервного копирования для серверов показывает, как сделать это автоматически.
  • Режим одобрения остаётся включённым. --dangerously-skip-permissions в Claude Code и danger-full-access в Codex предназначены для одноразовых виртуальных машин.
  • Секреты вне досягаемости. Пользователь агента не должен иметь возможности читать файлы .env, пароли баз данных и данные клиентов. Всё, что он читает, уходит провайдеру.
  • Лимит расходов для каждого API-ключа в консоли провайдера.
  • Прослеживаемость: установите etckeeper, чтобы каждое изменение в /etc попадало в Git, и сохраняйте итоги агента.
  • Во входящем направлении ничего не меняется. Обоим инструментам нужен только исходящий HTTPS. Файрвол, Fail2ban и защита от DDoS провайдера остаются как есть.

Типичные ошибки и решения

СообщениеПричина и решение
EACCES: permission denied при npm install -gnpm хочет писать в системный каталог. Задайте пользовательский префикс: npm config set prefix ~/.npm-global, затем добавьте export PATH=~/.npm-global/bin:$PATH в ~/.bashrc и установите снова.
Node.js version ... is not supportedСлишком старая версия из источников дистрибутива. Повторите шаг 2 и проверьте командой node --version, что активна 22.x.
Вход не открывает браузерНа сервере это ожидаемо. Откройте показанный адрес на другом устройстве и введите код или перейдите на API-ключ.
ECONNREFUSED или таймаут при запускеИсходящий HTTPS заблокирован. Проверьте правила файрвола для порта 443 наружу; на серверах KernelHost исходящий трафик свободен изначально.
429 rate limit или overloadedКвота подписки или API исчерпана либо провайдер перегружен. Немного подождите, запускам без присмотра дайте повторную попытку через несколько минут.
Агент спрашивает при каждой командеРасширьте белый список в ~/.claude/settings.json или approval_policy в config.toml, но только командами на чтение.

Итог

ИИ-агент на сервере настраивается за час: пользователь, белый список sudo, Node.js, инструмент, правила. Настоящая работа кроется в ограничениях, и здесь они намеренно узкие. Расширяйте их шаг за шагом, когда задача этого требует, никогда оптом. На root-сервере KernelHost или выделенном сервере для этого ничего не нужно активировать: root-доступ, свободный выбор дистрибутива и исходящие соединения входят в стандарт.

Частые вопросы

Нужна ли для Claude Code подписка или достаточно API-ключа?
Работает и то и другое. С учётной записью Claude (Pro, Max или Team) вы входите при первом запуске через браузер, на сервере без браузера по коду на другом устройстве. Для автоматизированных задач без человека за клавиатурой чище использовать API-ключ в переменной окружения ANTHROPIC_API_KEY, потому что он не привязан к человеку и может быть ограничен бюджетом.
Как войти в Codex CLI на сервере без браузера?
Либо через вход с учётной записью ChatGPT, когда Codex показывает адрес, который вы открываете на ноутбуке или телефоне, либо через переменную окружения OPENAI_API_KEY с ключом с платформы OpenAI. Для cron-заданий и скриптов API-ключ является более надёжным вариантом.
Какая версия Node.js нужна?
Claude Code требует не ниже Node.js 18, Codex CLI не ниже Node.js 22. Поэтому сразу установите Node.js 22 LTS из репозитория NodeSource или через nvm в домашнем каталоге пользователя агента. Версия из источников пакетов Debian 12 слишком старая.
Почему npm install -g завершается ошибкой EACCES?
Потому что npm хочет писать глобально в системный каталог, на который у пользователя нет прав. Задайте пользовательский префикс командой npm config set prefix ~/.npm-global, добавьте ~/.npm-global/bin в PATH и установите снова. Альтернатива: nvm или, для Claude Code, нативный установщик, который обходится без npm.
Можно ли запускать Claude Code в cron-задании?
Да, через claude -p с задачей в виде текста и белым списком разрешённых инструментов. Используйте для этого API-ключ, ограничьте инструменты командами на чтение и направьте вывод в файл или письмо. Вмешательствам в систему не место в запусках без присмотра.
Работает ли это и на серверах Windows от KernelHost?
Да. Claude Code и Codex CLI работают на Windows нативно с Node.js или в Windows Subsystem for Linux. Шагам с пользователем и белым списком sudo там соответствует отдельный пользователь Windows без прав администратора.

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