Настройка
Codex CLI на VPS
Codex хорошо работает на небольшом Linux-сервере. Основные сложности — со входом и с песочницей Linux. Это руководство охватывает установку, вход без браузера, сохранение сессий и доступ к серверу с телефона.
Короткий ответ
Установите командой curl -fsSL https://chatgpt.com/codex/install.sh | sh (или npm install -g @openai/codex). Затем включите вход по коду устройства в настройках безопасности ChatGPT и выполните на сервере codex login --device-auth. Запускайте Codex внутри tmux или демона, чтобы он пережил SSH-подключение. Remote в приложении ChatGPT официально поддерживает только хосты с macOS и Windows. До Linux VPS можно добраться только через такой хост: настольное приложение ChatGPT на Mac или ПК, который не засыпает, открывает его как SSH-проект. Чтобы обращаться к VPS напрямую с телефона, используйте SSH-приложение или клиент, который общается с сервером, например Maude.
Сервер — хороший дом для Codex CLI от OpenAI. Он продолжает работать при закрытом ноутбуке, переживает обрыв связи, а если прогон пошёл не так, машину можно пересобрать. На свежем Linux VPS людей сбивают с толку две вещи. Во-первых, обычный codex login ждёт перенаправления из браузера, которое никогда не дойдёт до сервера. Во-вторых, песочнице нужен пакет, которого нет в большинстве минимальных образов. Это руководство решает обе проблемы, а затем рассказывает, как сохранять сессии и как добраться до них с телефона.
Требования
- Linux-сервер, x86-64 или arm64. OpenAI публикует бинарники для обеих архитектур, macOS тоже подходит. Проще всего с Debian или Ubuntu.
- Аккаунт. Тариф ChatGPT или ключ OpenAI API. На странице цен Codex OpenAI сказано, что Codex входит в ChatGPT Free, Go, Plus, Pro, Business, Edu и Enterprise. Лимиты зависят от тарифа, а локальное использование CLI делит квоту с облачными чатами. Использование по ключу API оплачивается по тарифам API.
- Память. CLI — скомпилированный бинарник, и сам он почти не требует памяти. RAM расходуют сборки и тесты вашего проекта. Для лёгкой работы хватит 2 ГБ, комфортно — 4 ГБ. О выборе размера и актуальных ценах — в руководстве покупателя VPS.
- Пользователь без root. Создайте его до установки чего-либо (
adduser dev, затем скопируйте SSH-ключ). Наше руководство по Claude Code на VPS описывает это и усиление SSH; для Codex шаги те же.
Установка Codex
Отдельному установщику Node.js не нужен:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version
Если вы и так управляете инструментами через npm, эта команда ставит тот же CLI:
npm install -g @openai/codex
Следите за scope: пакет называется @openai/codex. Пакет codex без scope в npm к нему отношения не имеет. Устанавливайте от обычного пользователя, а не через sudo. Оба способа перечислены в README openai/codex.
Что нужно песочнице в Linux
В Linux Codex выполняет сгенерированные команды оболочки внутри песочницы на основе bwrap (bubblewrap) и seccomp. Документация OpenAI по песочнице велит сначала установить bubblewrap:
sudo apt install bubblewrap # Debian / Ubuntu
sudo dnf install bubblewrap # Fedora
Без bwrap Codex переключается на встроенный помощник, а тому нужны непривилегированные пространства имён пользователей. Ubuntu 24.04 ограничивает их через AppArmor. Документированное решение загружает дополнительный профиль:
sudo apt install apparmor-profiles apparmor-utils
sudo install -m 0644 /usr/share/apparmor/extra-profiles/bwrap-userns-restrict /etc/apparmor.d/bwrap-userns-restrict
sudo apparmor_parser -r /etc/apparmor.d/bwrap-userns-restrict
Документация даёт и более грубую альтернативу — sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, которая снимает ограничение для всей машины. Лучше используйте профиль. Если каждая команда в песочнице падает с ошибкой пространства имён, причина — в этом разделе.
Вход по коду устройства
Запустите на сервере обычный codex login — и он будто зависнет. Причина: он запускает локальный callback-сервер на порту 1455 и ждёт, пока ваш браузер перенаправят на localhost. Но это localhost сервера, до которого ваш телефон или ноутбук не достанет. Используйте вместо этого вход по коду устройства. У него есть одно предварительное условие, на котором спотыкаются почти все:
- Включите вход по коду устройства. Для личного аккаунта это делается в настройках безопасности ChatGPT. В рабочем пространстве Business, Edu или Enterprise его включает администратор в разрешениях рабочего пространства. Пока он не включён, вход через устройство для вашего аккаунта работать не будет.
- Запустите процесс на сервере:
codex login --device-auth - Завершите его на любом устройстве. Codex выведет ссылку и одноразовый код. Откройте ссылку на телефоне или ноутбуке, войдите в ChatGPT и введите код.
- Проверьте, что всё получилось:
Команда выводит активный способ аутентификации и завершается с кодом 0, если вход выполнен, — это удобно в скриптах.codex login status
Это из документации OpenAI по аутентификации. Там же описаны два запасных варианта на случай, если код устройства недоступен:
- Пробросьте порт callback. Подключитесь через
ssh -L 1455:localhost:1455 user@your-server, выполнитеcodex loginна сервере и откройте выведенный адрес в локальном браузере. Перенаправление тогда вернётся через туннель. - Скопируйте учётные данные. Войдите на машине с браузером, затем
scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.
Ключ API вместо тарифа
printenv OPENAI_API_KEY | codex login --with-api-key
Передача ключа через stdin не даёт ему попасть в историю оболочки. Вы платите за токены по ценам API, а не расходуете тариф ChatGPT. Это подходит для общей или CI-машины, где нужна жёсткая граница расходов.
По умолчанию Codex кэширует учётные данные в ~/.codex/auth.json. Настройка cli_auth_credentials_store может перенести их в системную связку ключей (file, keyring, auto или ephemeral). Любой, у кого есть оболочка от вашего пользователя, может пользоваться вашим тарифом ChatGPT. Не давайте другим доступ к оболочке на машине с агентом.
Поддерживайте работу
Интерактивная сессия codex живёт и умирает вместе с терминалом, который её запустил. Закройте SSH-подключение — и сессия закончится. Обойти это можно тремя способами.
tmux, классика:
sudo apt install tmux
tmux new -A -s codex # create or re-attach
cd ~/src/my-app && codex
# detach: Ctrl-b then d; later: tmux attach -t codex
Если сессия всё-таки закончилась, codex resume --last подхватит последний разговор в этой папке, а codex resume откроет список для выбора. В нашем руководстве по tmux, mosh и Tailscale есть конфигурация tmux, удобная для телефона.
Неинтерактивные запуски. codex exec "…" выполняет одну задачу без TUI, а codex exec resume --last её продолжает. Это подходит для cron и CI, но отвечать на запросы подтверждения там некому, так что настройки песочницы ниже важнее.
Демон, который владеет сессиями и переживает перезагрузки. Именно это сравнивает руководство по работе 24/7: юниты systemd, серверы Remote Control и приложения вроде Maude, которые запускают на машине собственный процесс.
Подтверждения и песочница
У Codex две отдельные настройки: что могут затрагивать команды (песочница) и когда он останавливается, чтобы спросить вас (политика подтверждений). Значения ниже взяты из документации OpenAI по подтверждениям и безопасности и справочника CLI:
| Настройка | Значения | Что это значит на сервере |
|---|---|---|
--sandbox / -s | read-only, workspace-write, danger-full-access | workspace-write — значение по умолчанию в git-репозитории. Правки остаются внутри проекта, а доступ к сети выключен, пока вы его не включите. |
--ask-for-approval / -a | on-request, never | on-request спрашивает, когда действию нужно больше, чем разрешает песочница. never не спрашивает вообще. В config.toml approval_policy принимает также granular; старое значение untrusted больше не поддерживается. |
--yolo | (псевдоним --dangerously-bypass-approvals-and-sandbox) | Без песочницы и без запросов. OpenAI оставляет его для окружений, которые уже защищены извне. |
--full-auto всё ещё встречается в старых руководствах. Теперь это устаревший флаг совместимости, и справочник советует вместо него --sandbox workspace-write. Чтобы команды в песочнице могли выходить в сеть, например чтобы работал npm install, добавьте это в ~/.codex/config.toml:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[sandbox_workspace_write]
network_access = true
Замечание о контейнерах: если ваш «VPS» на самом деле контейнер Docker или LXC, который блокирует операции с пространствами имён, документация предлагает --sandbox danger-full-access. Делайте так, только если песочницей служит сам контейнер. Компромиссы те же, что и с режимом bypass у Claude; они разобраны в статье о безопасном запуске агентов с полными правами.
Варианты доступа с телефона
| Вариант | Работает с Linux VPS? | Чем хорош | На что обратить внимание |
|---|---|---|---|
| Codex Remote (приложение ChatGPT) | Официально нет. На хостах должно работать настольное приложение ChatGPT на macOS или Windows; это приложение может добираться до SSH-проектов на вашем VPS. | Официально, бесплатно в рамках тарифа, нативный интерфейс | Хост-компьютер должен не засыпать и оставаться в сети |
| SSH-приложение + tmux | Да | Бесплатно, ничего лишнего на сервере | Полноэкранный TUI на клавиатуре телефона, без пушей |
| Maude | Да (любой Linux или macOS по SSH) | Нативный чат, подтверждения прямо в списке, пуши, а также Claude Code и другие | Платное приложение; свой тариф ChatGPT или ключ по-прежнему нужен |
Пара слов о headless-Linux и Codex Remote. Справочник CLI описывает codex remote-control start и codex remote-control pair для локального app-server. Но руководство по удалённым подключениям по-прежнему говорит, что на хостах работает настольное приложение на macOS или Windows. Пользователи открыли issue об этом разрыве: в #31183 сообщается, что headless-хосты на Linux не удаётся заново связать из текущих мобильных клиентов, а #35928 указывает на противоречие. Когда мы проверяли, оба были открыты. Если этот путь у вас работает, он официальный. Просто пока не стройте на нём рабочий процесс.
Управление с телефона через Maude
Maude — один из способов управлять этим VPS с телефона без TUI. Вы добавляете сервер по адресу или вставкой команды ssh, и приложение разворачивает по SSH собственный небольшой демон. Этот демон устанавливает Codex в проверенной фиксированной версии со сверкой контрольной суммы, так что шаг установки вы пропускаете. В Codex вы входите с телефона — по коду устройства ChatGPT или с ключом API. Вход по коду устройства в ChatGPT всё равно нужно сначала включить. Сессии продолжают работать на сервере, когда приложение закрыто, запросы на подтверждение появляются во входящих и в push-уведомлениях с «Разрешить/Отклонить», а на том же сервере рядом с Codex могут работать Claude Code, OpenCode, Grok Build и Antigravity. Подробности — на странице агента Codex.
Часто задаваемые вопросы
Почему codex login зависает на моём сервере?
codex login запускает callback-сервер на localhost:1455 и ждёт перенаправления из браузера, которое браузер на другом устройстве не может доставить на ваш VPS. Используйте codex login --device-auth, предварительно включив вход по коду устройства в настройках безопасности ChatGPT. Другой вариант — пробросить порт через ssh -L 1455:localhost:1455.Нужен ли Node.js, чтобы запускать Codex?
curl -fsSL https://chatgpt.com/codex/install.sh | sh) и бинарникам из релизов Node не нужен. Node понадобится, только если вы выберете путь через npm, npm install -g @openai/codex.Можно ли использовать ключ API вместо тарифа ChatGPT?
printenv OPENAI_API_KEY | codex login --with-api-key. Тогда использование оплачивается по тарифам OpenAI API, а не засчитывается в квоту тарифа ChatGPT.Видит ли Codex Remote мой VPS?
codex remote-control) описан, но в открытых issue на GitHub сообщается о проблемах со связыванием headless-хостов на Linux, так что проверьте актуальную документацию, прежде чем на него полагаться.Какой режим песочницы использовать на VPS?
workspace-write и подтверждений on-request и включите network_access, если сборкам нужно скачивать пакеты. --yolo оставьте для одноразовых машин или контейнеров, изоляции которых вы доверяете.Что изменилось
- — Первая публикация. Установка, аутентификация, песочница и Remote сверены в этот день с документацией OpenAI и README openai/codex.