Установка Claude Code и ChatGPT Codex на Linux-сервер: пошаговое руководство
От свежей установки Debian или Ubuntu до работающего ИИ-агента: пользователь и белый список sudo, Node.js 22, установка Claude Code, Codex CLI и Gemini CLI и вход в них, файлы правил, cron-задания, первые задачи и типичные ошибки.
Это руководство проведёт вас от свежеустановленного сервера Debian или Ubuntu до работающего ИИ-агента, который анализирует логи, проверяет конфигурации и выполняет задачи обслуживания. Мы настроим Claude Code (Anthropic) и Codex CLI (OpenAI, инструмент командной строки от создателей ChatGPT), оба под отдельным пользователем с ограниченными правами, а также покажем Gemini CLI (Google) как третий вариант. Все команды опробованы на KVM root-сервере KernelHost с Debian 13 и Ubuntu 24.04. Что такое сервер под управлением ИИ в принципе и какие архитектуры бывают, рассказано в статье Сервер под управлением ИИ: безопасное подключение ИИ-агентов.
Актуально на сентябрь 2026 года. Инструменты быстро развиваются; если сомневаетесь, проверяйте флаги с помощьюclaude --help,codex --helpилиgemini --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 он открыт изначально, а строгий собственный файрвол должен его разрешать.
Какого сервера достаточно для ИИ-агента?
ИИ-агенту не нужно на сервере ни особое оборудование, ни GPU, потому что языковая модель работает у провайдера. На сервере работают только инструмент командной строки и Node.js, которые во время сессии обычно занимают вместе несколько сотен мегабайт оперативной памяти. Для сервера, на котором больше почти ничего не запущено, достаточно 2 vCPU и 4 ГБ ОЗУ. Если на сервере параллельно работают сайты, базы данных или игровые серверы, заложите для агента запас около 1 ГБ оперативной памяти. KVM root-сервер KernelHost готов к работе примерно за 30 секунд, оплачивается по модели PrePaid без минимального срока и поэтому подходит и как тестовая система, на которой можно сначала опробовать агента.
Шаг 1: создать отдельного пользователя и ограничить sudo
Агент никогда не работает от root. Он получает собственную учётную запись, а через белый список sudo ровно те команды, которые ему нужны. Начните с нескольких команд на чтение и расширяйте список, когда задача действительно этого требует.
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
Последняя строка проверяет синтаксис. Ошибка в файле sudoers может заблокировать sudo для всех, поэтому эта проверка обязательна всегда. --disabled-password гарантирует, что никто не сможет войти как aiagent по паролю; в эту учётную запись вы позже переключаетесь командой sudo -iu aiagent. Как в целом устроены пользователи с правами sudo, объясняет статья Создание пользователя sudo в Linux.
Точечные права на запись вместо редактора через sudo
Если агент должен менять файлы в /etc, не разрешайте ему nano через sudo (так можно было бы редактировать любой файл, включая /etc/sudoers), а работайте с группой и точечными правами на запись, например setfacl -m u:aiagent:rw /etc/nginx/sites-available/meine-seite.conf. Для начала вполне достаточно, чтобы агент предлагал изменения, а вы их вносили.
То же касается команд с подстановочными символами в белом списке. /usr/bin/tail * позволяет агенту читать любой файл, к которому есть доступ у root, в том числе файлы с учётными данными. Если вы этого не хотите, пропишите разрешённые пути явно, например /usr/bin/tail -n 200 /var/log/nginx/error.log.
Шаг 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, используйте nvm в домашнем каталоге пользователя агента; тогда всё делается полностью без прав root. Команду установки nvm возьмите из README проекта, после этого достаточно трёх строк:
nvm install 22
nvm alias default 22
node --version
Подробности и другие способы описаны в руководстве по 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, он обычно открывает браузер; на сервере без браузера он показывает адрес и код, который вы подтверждаете на ноутбуке или смартфоне. После этого вход действует для этого пользователя на этом сервере, пока вы не выйдете из системы.
API-ключ для скриптов и cron-заданий
Для скриптов и cron-заданий API-ключ подходит лучше:
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Ответь только словом OK"
Так ключ хранится только в домашнем каталоге пользователя агента, а этот каталог другие пользователи прочитать не могут. Создайте ключ в консоли Anthropic с месячным лимитом расходов, тогда сессия, вышедшая из-под контроля, не обойдётся дорого. Сам ключ никогда не указывайте в задаче для агента и никогда не записывайте в файл, который он должен выводить.
Шаг 4: настроить Claude Code для сервера
Файл правил CLAUDE.md
При запуске 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
Файл растёт вместе с работой. Каждый раз, когда агент делает что-то не так, как вы хотите, вносите исправление в файл в виде нового правила. Через несколько недель он довольно точно отражает то, как ведётся работа на вашем сервере.
Белый список в settings.json
К этому добавляется белый список инструментов, чтобы 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
Список запретов служит дополнительной страховочной сеткой, а не стеной: одну и ту же команду можно записать множеством способов. Настоящую границу задаёт белый список sudo из шага 1, ведь то, что запрещено пользователю, запрещено и агенту.
Первая задача в интерактивном режиме
Теперь первая задача, в интерактивном режиме:
cd ~/server && claude
> Составь сводку ошибок из journalctl за последние 24 часа и назови три самые частые причины.
Без присмотра через cron-задание
А вот та же задача без присмотра, например как ежедневное 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 ограничивает инструменты ровно тем, что нужно для этого запуска. Действиям, которые что-то изменяют, не место в запусках без присмотра. Как в целом настраиваются cron-задания, описано в статье Настройка cron-задания в Linux.
Шаг 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
Песочница и режим одобрения в config.toml
У 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 снимает оба ограничения, и ему не место на производственной системе.
Правила в AGENTS.md
Правила, как в CLAUDE.md, Codex читает из файла AGENTS.md в рабочем каталоге; можно использовать то же содержимое:
cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Проверь, работают ли все включённые службы systemd, и перечисли те, что завершились сбоем, с последним сообщением об ошибке."
Для запусков без присмотра есть codex exec "Aufgabe", аналог claude -p.
Шаг 6: Gemini CLI как третий вариант
Gemini CLI, инструмент командной строки от Google, устроен по тому же принципу. Он тоже работает на Node.js и устанавливается в той же учётной записи:
npm install -g @google/gemini-cli
gemini --version
При первом запуске gemini вы входите с учётной записью Google, а для скриптов задаёте API-ключ в переменной окружения GEMINI_API_KEY. Правила Gemini CLI читает из файла GEMINI.md в рабочем каталоге, и здесь тоже можно взять содержимое CLAUDE.md. Запуски без присмотра выполняются командой gemini -p "Aufgabe". Какой из трёх инструментов выбрать, зависит прежде всего от того, какая учётная запись у вас уже есть: на сервере все три работают одинаково, и несколько из них можно использовать параллельно.
Альтернатива: агент работает на вашем компьютере и действует через SSH
Если вы не хотите ничего устанавливать на сервер, запустите Claude Code или Codex на ноутбуке и позвольте агенту отправлять команды через SSH. Для этого пользователь агента получает на сервере собственный SSH-ключ, а в CLAUDE.md записывается правило предварять все серверные команды префиксом ssh aiagent@server. Для нерегулярного обслуживания это хорошо работает, но длительные задачи и cron-задания лучше выполнять прямо на сервере. Как в деталях выглядит подключение по SSH с отдельным ключом, алиасом хоста и одобрениями и по какому регламенту агент затем выполняет развёртывание на производственных системах, показывает отчёт из практики Подключить ИИ к серверу.
Шаг 7: защитить и задать границы
- Снимок или резервная копия перед каждой сессией, в которой что-то будет меняться. Как настроить это автоматически, показывает статья Стратегия резервного копирования для серверов.
- Режим одобрения не отключать.
--dangerously-skip-permissionsв Claude Code иdanger-full-accessв Codex предназначены для одноразовых виртуальных машин. - Секреты вне досягаемости. Пользователь агента не должен иметь возможности читать файлы
.env, пароли баз данных и данные клиентов. Всё, что он читает, уходит провайдеру. - Лимит расходов задайте для каждого API-ключа в консоли провайдера.
- Прослеживаемость: установите
etckeeper, чтобы каждое изменение в/etcпопадало в Git, и сохраняйте итоговые сводки агента. - Для входящего трафика ничего не меняется. Обоим инструментам нужен только исходящий HTTPS. Файрвол, Fail2ban и защита от DDoS у хостера остаются без изменений.
Первые задачи: пять полезных поручений
Лучше всего для начала подходят задачи, в которых много чтения и нет риска. Они быстро показывают, насколько тщательно работает агент, и сразу приносят пользу:
- Отчёт по логам: «Составь сводку ошибок и предупреждений за последние 24 часа, сгруппируй их по службам и укажи вероятную причину».
- Проверка служб: «Перечисли все службы systemd, завершившиеся сбоем, с последним сообщением об ошибке и объясни, что нужно сделать в каждом случае. Ничего не меняй».
- Место на диске: «Покажи, какие каталоги занимают больше всего места, и предложи, что можно безопасно удалить». Подробнее об этом в статье Переполненный диск в Linux.
- Обновления: «Для каких пакетов есть ожидающие установки обновления безопасности и какие службы нужно будет после этого перезапустить?»
- Веб-сервер: «Проверь конфигурацию nginx на ошибки и устаревшие настройки и объясни каждую находку».
Только когда результаты такого анализа верны, имеет смысл поручать агенту задачи, связанные с изменениями, причём сначала на тестовой системе.
Типичные ошибки и решения
| Сообщение | Причина и решение |
EACCES: permission denied при npm install -g | npm пытается писать в системный каталог. Задайте пользовательский префикс: npm config set prefix ~/.npm-global, затем добавьте export PATH=~/.npm-global/bin:$PATH в ~/.bashrc и установите заново. |
Node.js version ... is not supported | Слишком старая версия из репозиториев дистрибутива. Повторите шаг 2 и проверьте командой node --version, что активна версия 22.x. |
claude: command not found | Нативный установщик размещает программу в ~/.local/bin, а этого каталога ещё нет в PATH. Добавьте export PATH=$HOME/.local/bin:$PATH в ~/.bashrc и перезапустите оболочку. |
| Вход не открывает браузер | На сервере это ожидаемо. Откройте показанный адрес на другом устройстве и введите код или перейдите на API-ключ. |
ECONNREFUSED или тайм-аут при запуске | Исходящий HTTPS заблокирован. Проверьте правила файрвола для исходящих соединений на порт 443; на серверах KernelHost исходящий трафик изначально открыт. |
429 rate limit или overloaded | Исчерпана квота подписки или API либо провайдер перегружен. Немного подождите, а для запусков без присмотра предусмотрите повторную попытку через несколько минут. |
| Агент переспрашивает при каждой команде | Дополните белый список в ~/.claude/settings.json или approval_policy в config.toml, но только командами на чтение. |
| Cron-задание присылает пустые письма | В cron нет переменных окружения оболочки. Задайте API-ключ в crontab или в файле окружения, который считывает задание, и указывайте полный путь к программе. |
Обновление инструментов
Claude Code, установленный нативным установщиком, обновляется сам. Инструменты, установленные через npm, обновляются до последней версии одной командой:
npm update -g @openai/codex @google/gemini-cli
codex --version
gemini --version
Новые версии иногда меняют флаги или настройки по умолчанию. После обновления кратко просмотрите список изменений, прежде чем позволить запускам без присмотра работать дальше, и проверьте, нет ли в следующем ежедневном отчёте чего-то необычного.
Итог
ИИ-агент на сервере настраивается за час: пользователь, белый список sudo, Node.js, инструмент, правила. Основная работа связана с границами, и здесь они намеренно заданы узкими. Расширяйте их шаг за шагом, когда этого требует задача, и никогда не делайте этого огульно. На root-сервере KernelHost или выделенном сервере для этого ничего не нужно дополнительно активировать: root-доступ, свободный выбор дистрибутива и исходящие соединения входят в стандарт.
Как агент затем выполняет развёртывание на производственных системах, с резервной копией, путём отката и одобрениями, описывает отчёт из практики Подключить ИИ к серверу.
Коротко о главном
- Claude Code, Codex CLI и Gemini CLI работают на любом Linux-сервере с Node.js 22, GPU не нужен.
- Агент получает отдельного пользователя с белым списком sudo и никогда не работает от root.
- Правила записываются в
CLAUDE.md,AGENTS.mdилиGEMINI.md, команды на чтение попадают в белый список, а всё остальное требует одобрения. - Для cron-заданий и скриптов правильнее всего использовать API-ключ с лимитом расходов, а запуски без присмотра ограничивать чтением.
- Резервная копия перед каждой сессией, секреты вне досягаемости, режим одобрения включён.
- На серверах KernelHost root-доступ, свободный выбор дистрибутива и исходящие соединения доступны изначально.
Частые вопросы
Нужна ли для Claude Code подписка или достаточно API-ключа?
Как войти в Codex CLI на сервере без браузера?
Какая версия Node.js нужна?
Почему npm install -g завершается ошибкой EACCES?
Можно ли запускать Claude Code в cron-задании?
Работает ли это и на серверах Windows от KernelHost?
Можно ли использовать Claude Code, Codex CLI и Gemini CLI на одном сервере параллельно?
Сколько оперативной памяти нужно ИИ-агенту на сервере?
Как обновлять Claude Code, Codex CLI и Gemini CLI?
Как настроить Gemini CLI на сервере?
Почему ИИ-агенту нельзя работать от root?
2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

