Ноутбук засыпает, закрывается или теряет Wi-Fi в кафе - и вместе с ним обрывается любая задача для Claude Code длиннее пары минут. Переносим агента на постоянный VPS: установка без единой строки Node.js, вход в аккаунт с сервера, у которого нет браузера, tmux вместо надежды на стабильный Wi-Fi, и разговор о том, что реально означает дать программе с доступом к shell отдельный сервер.
Claude Code - агентный ИИ-помощник для терминала: не чат, а инструмент, который читает ваш код, сам решает, какие команды выполнить, правит файлы и гоняет тесты, объясняя по ходу, что и зачем делает. По умолчанию он живёт там же, где вы его запустили - в терминале ноутбука. Закрыли крышку, ушли в сон, потеряли Wi-Fi в кафе - и любая задача длиннее пары минут обрывается на середине. Перенос агента на собственный VPS решает это не «на всякий случай», а по конкретной причине: сессия живёт рядом с сервером, который вы разворачиваете, и продолжает работать, даже когда ноутбук давно закрыт.
Коротко. Claude Code ставится на Linux официальным способом без единой строки Node.js -
curl -fsSL https://claude.ai/install.sh | bash; npm-путь (npm install -g @anthropic-ai/claude-code) тоже жив, но требует Node.js 22+ и считается запасным вариантом. Вход в аккаунт - командаclaude: она открывает браузер для OAuth-входа, а если браузера на сервере нет - предлагает скопировать ссылку и вставить код обратно в терминал. Сессию, которая должна пережить обрыв SSH, запускайте вtmux, а не оборачивайте вsystemd- это интерактивный диалог с агентом, а не фоновый демон. У Claude Code реальный доступ к shell и файлам - относитесь к этому так же серьёзно, как к любому SSH-ключу: отдельный непривилегированный пользователь, конкретный рабочий каталог, ничего лишнего рядом.
Первая причина простая: ноутбук не приспособлен держать процесс живым часами - засыпает от бездействия, закрывается в сумку, теряет сеть при переходе с Wi-Fi на мобильный интернет. Любая из этих вещей рвёт сессию Claude Code, если она не была явно приостановлена. VPS ничего из этого не делает - он работает 24/7, потому что это его единственная задача.
Вторая причина - действительно долгие агентные задачи: миграция по большой кодовой базе, разбор пачки падающих тестов, одинаковая правка в десятках файлов. Такое удобно запустить и уйти, а не сидеть рядом с открытым ноутбуком, который в любой момент может заснуть посреди работы.
Третья причина конкретнее первых двух: рабочее окружение агента оказывается там же, где реально происходит развёртывание. Правите конфиг nginx, чините systemd-юнит, разбираетесь, почему сервис падает по памяти - агенту с сервера не нужно тащить файлы через SCP или объяснять на словах, что показывает journalctl. Он читает то же самое, что видели бы вы сами, зайдя по SSH.
Наконец, постоянный сервер - точка, до которой могут дотянуться несколько человек, а не один ноутбук одного разработчика: второй участник команды подключается своим SSH-ключом и заходит в свою tmux-сессию рядом, без переустановки чего-либо.
Требования у Claude Code официальные и небольшие, но одно из них стоит проверить заранее - самый дешёвый тариф VPS его обычно не тянет.
Что нужно | Требование |
|---|---|
ОС | Ubuntu 20.04+, Debian 10+ или Alpine Linux 3.19+ - любой актуальный Linux-тариф HIP подходит |
Память | от 4 ГБ - официальный минимум для всей машины, не для одного процесса агента |
Аккаунт Anthropic | Pro, Max, Team, Enterprise или Console; бесплатный план claude.ai доступа к Claude Code не даёт |
Сеть | исходящий доступ по HTTPS; входящие порты открывать не нужно |
Если у вас уже есть тариф на 1-2 ГБ под что-то лёгкое, под Claude Code его лучше не приспосабливать - берите тариф от 4 ГБ отдельно или соседним сервисом на той же машине, где памяти хватает с запасом.
Официальный способ для Linux не требует Node.js - устанавливается готовый бинарник, а не npm-пакет. Зайдите на сервер по SSH под своим пользователем (не root, зачем - ниже) и выполните:
curl -fsSL https://claude.ai/install.sh | bash
Установщик кладёт бинарник в ~/.local/bin, то есть в домашний каталог вашего пользователя, а не в системные пути - для этого не нужен sudo. В большинстве современных Ubuntu-оболочек этот путь уже добавлен в PATH по умолчанию; если после установки терминал отвечает command not found: claude, добавьте строку в конец ~/.bashrc и перезайдите в сессию:
export PATH="$HOME/.local/bin:$PATH"
Проверьте, что установка прошла:
claude --version
Рабочая установка печатает номер версии - на тестовом сервере во время подготовки статьи (24 сентября 2026) команда вернула 2.1.281 (Claude Code). У вас эти цифры почти наверняка будут другими: Claude Code обновляется автоматически в фоне, и номер версии меняется буквально день ото дня - это нормально, а не признак того, что что-то пошло не так. Более подробную диагностику, включая проблемы с правами и конфигом, показывает:
claude doctor
Если на этом же сервере уже крутится Node-проект и Node.js 22 или новее у вас всё равно стоит, можно поставить через npm - разницы для повседневной работы нет:
npm install -g @anthropic-ai/claude-code
sudo npm install -g - это создаёт проблемы с правами на будущие обновления и лишний повод давать процессу root. Если npm ругается на права записи в глобальную папку, это чинится настройкой префикса npm под вашего пользователя, а не через sudo.EBADENGINE, но установка всё равно завершится - предупреждение не значит, что что-то сломалось прямо сейчас, но апгрейд Node стоит запланировать.Запустите:
claude
При первом запуске Claude Code пытается открыть браузер для входа - штатный OAuth-вход в аккаунт claude.ai. На голом сервере по SSH браузера, разумеется, нет, и это предусмотрено: нажмите c, чтобы скопировать ссылку входа в буфер обмена, откройте её в браузере на своём компьютере, войдите под своим аккаунтом и вставьте код, который покажет браузер, обратно в приглашение терминала. Это официально описанный сценарий именно для SSH-сессий, WSL и контейнеров - не обходной путь и не хак.
Что вы должны увидеть. После успешного входа терминал печатает Login successful и просит нажать Enter, чтобы продолжить - это и есть подтверждение, что сессия авторизована.
Есть и второй способ - через переменную окружения ANTHROPIC_API_KEY с ключом из Claude Console. Если она задана, Claude Code вообще не открывает браузер, а один раз спрашивает подтверждение, использовать ли этот ключ. Разница практическая:
Учётные данные хранятся в файле ~/.claude/.credentials.json с правами 0600 - то есть читать его может только владелец. Это ещё один аргумент в пользу отдельного пользователя без права sudo без пароля: файл с вашим входом в Anthropic не должен лежать там, куда дотянется кто-то ещё на этом сервере.
Claude Code - это диалог, а не фоновая служба: агент ждёт от вас следующей реплики, задаёт уточняющие вопросы, показывает, что собирается сделать, прежде чем это сделать. Обернуть такой процесс в systemd с Restart=always, как в статье про то, как держать сервис живым на сервере, здесь неправильно - вы получите процесс, который постоянно перезапускается сам с собой, а не сессию, к которой можно вернуться. Правильный инструмент - терминальный мультиплексор: программа, которая держит терминальную сессию живой на сервере отдельно от вашего SSH-подключения к ней.
Если он ещё не стоит:
sudo apt install -y tmux
Заведите именованную сессию и запустите Claude Code внутри неё:
tmux new -s claude
claude
Дальше работайте с агентом как обычно. Когда нужно отключиться - не закрывайте терминал командой exit, это убьёт сессию вместе с процессом. Вместо этого отсоединитесь сочетанием клавиш Ctrl+b, затем d (detach). Сессия продолжает работать на сервере сама по себе.
Вернуться к ней - хоть с этого же ноутбука, хоть с телефона через SSH-клиент, хоть завтра - можно так:
tmux attach -t claude
Посмотреть, какие сессии сейчас живы на сервере:
tmux ls
Что вы должны увидеть - строку вида claude: 1 windows (created ...). Если строки нет, а вы точно создавали сессию - скорее всего, вы всё-таки вышли через exit, а не отсоединились через Ctrl+b d.
Важная граница: tmux переживает обрыв SSH, закрытие ноутбука и смену сети - но не переживает перезагрузку самого сервера. Это обычный процесс, а не системная служба, и ребут сервера гасит его вместе с сессией внутри. Если для вас это критично - например, сервер планово перезагружается для обновлений ядра, - создавайте сессию заново после ребута, это секундное дело.
У самого Claude Code также есть встроенный режим фоновых сессий через внутренний процесс-супервизор (/background, флаг --bg) - более новая возможность, привязанная к конкретной версии инструмента. tmux работает одинаково с любой версией и с любой другой интерактивной программой на сервере, поэтому здесь описан именно он.
Легко успокоить себя тем, что «это же на VPS, а не на моём ноутбуке» - но с точки зрения самого агента ничего не поменялось: у него по-прежнему есть команда на выполнение shell-команд и правку файлов, просто теперь эти файлы и команды относятся к настоящему серверу, а не к песочнице.
claude под ним. Ошибка агента - переименовал не тот файл, удалил не ту папку - тогда остаётся в границах его каталога, а не разносится по всей системе.claude из каталога конкретного проекта. По умолчанию агент читает файлы без вопросов только внутри рабочего каталога и явно добавленных к нему директорий.cd ...По ресурсам официально заявлен один порог - 4 ГБ памяти на всю машину, требование к серверу целиком, не к одному процессу. Сам агент - обычный клиентский процесс, который держит в памяти историю разговора и общается с API по HTTPS; тяжёлым он становится не сам по себе, а когда по вашей команде компилирует проект или гоняет тесты - и тогда нагрузку создаёт сборка, не Claude Code. На тестовом сервере сразу после запуска, ещё до входа в аккаунт, процесс занимал около 180 МБ реальной памяти (VmRSS в /proc/<pid>/status) - это стартовый след самого процесса, не цифра для активного разговора с загруженным контекстом, и она вырастет по ходу сессии. Точную цифру для своей нагрузки смотрите на своём сервере через ps aux | grep claude или top, не верьте чужому числу - оно гуляет в зависимости от длины разговора.
По сети проще и однозначнее: Claude Code - исходящий клиент. Он стучится по HTTPS на серверы Anthropic (api.anthropic.com для запросов к модели, claude.ai и platform.claude.com для входа) и ничего не слушает для приёма входящих подключений. Файрвол с политикой «запрещать всё входящее по умолчанию» - тот же ufw, что и в статье про защиту свежего VPS - трогать ради Claude Code не нужно: открывать порты незачем.
Здесь я не буду делать вид, что выбор равнозначный. Если задача - реально писать и чинить код в репозитории через агента: разбирать многошаговый баг, рефакторить модуль, ориентироваться в незнакомой кодовой базе - Claude Code выигрывает по качеству рассуждений с большим отрывом. Модели, которые тянет обычный VPS без видеокарты через Ollama (7-8 миллиардов параметров, изредка больше), для такой работы обычно попросту недостаточно сильны: путаются в длинном контексте, теряют нить многошаговой задачи, дают код, который выглядит правдоподобно и не работает.
У своей модели через Ollama есть законное место - просто это другая задача: данные, которые не могут покидать инфраструктуру ни при каких условиях, предсказуемый счёт без оплаты по токенам, или модель как встроенный компонент собственного продукта, а не инструмент лично для вас. Тогда VPS сам становится вычислителем, а не терминалом рядом с сервером - об этом статья про AnythingLLM на VPS: свой интерфейс и RAG поверх модели, которая целиком живёт у вас.
Параметр | Claude Code на VPS | Ollama на VPS |
|---|---|---|
Где считает модель | на серверах Anthropic; VPS - только терминал и рабочее окружение | прямо на этом VPS, в его CPU (или GPU, если есть) |
Минимум памяти сервера | 4 ГБ на весь сервер | зависит от модели: от 3 ГБ для лёгких до десятков ГБ для крупных |
За что вы платите | подписку Pro/Max или токены API + аренда VPS-терминала | только аренда VPS, дальше запросы бесплатны |
Качество для агентной работы с кодом | уровень топовой модели Anthropic - многошаговые задачи по силам | ограничено тем, что тянет VPS без GPU - для реального агентного кода обычно слабо |
Куда уходят данные | в API Anthropic по HTTPS | никуда не покидают ваш сервер |
Когда выбрать | нужна реальная сила модели для работы с кодом | данные не могут уходить наружу, либо нужен предсказуемый счёт без токенов |
command not found: claude сразу после установки. Каталог ~/.local/bin не попал в PATH текущей оболочки. Добавьте export PATH="$HOME/.local/bin:$PATH" в ~/.bashrc и перезайдите по SSH.c, чтобы скопировать ссылку, откройте её на своём компьютере, вставьте код обратно в терминал сервера.403 Forbidden при живой подписке. Проверьте, не задана ли в этой же оболочке переменная ANTHROPIC_API_KEY от старого или чужого ключа - при её наличии Claude Code использует именно её, а не подписку. unset ANTHROPIC_API_KEY и проверка через /status внутри сессии показывают, какой способ входа сейчас активен.Login expired. Срок входа не бесконечный; за несколько дней до истечения Claude Code сам предупреждает об этом при запуске. Решение - заново выполнить вход внутри сессии командой /login.tmux new -s claude и запустите claude внутри неё ещё раз.Нет, если ставить официальным нативным установщиком - он скачивает готовый бинарник и не трогает Node.js вообще. Node.js нужен только для альтернативной установки через npm, и с версии 2.1.198 для неё требуется Node.js 22 или новее.
Запустите claude, нажмите c, чтобы скопировать ссылку входа, откройте её в браузере на своём компьютере и вставьте код, который он покажет, обратно в терминал сервера. Это штатный сценарий именно для SSH-сессий, WSL и контейнеров.
Запускайте claude внутри tmux. Обрыв связи или закрытие ноутбука отключает только ваш терминал от сессии, а не саму сессию на сервере - вернуться к ней можно командой tmux attach -t claude. Исключение - перезагрузка самого сервера: она останавливает tmux вместе с сессией внутри.
Официальный минимум - 4 ГБ памяти на весь сервер, это требование к машине целиком. Сам процесс агента легче обычного и тяжелеет не сам по себе, а когда по вашей команде запускает сборку или тесты - точную цифру для своей нагрузки проверяйте через ps aux или top.
Нет. Claude Code - исходящий клиент: он сам обращается по HTTPS к серверам Anthropic и ничего не слушает на сервере для приёма входящих подключений. Файрвол с политикой «запрещать всё входящее» можно не трогать вообще.
Для реальной агентной работы с кодом Claude Code выигрывает по качеству рассуждений с большим отрывом - модели, которые тянет VPS без GPU через Ollama, для такой работы обычно недостаточно сильны. Ollama на своём сервере имеет смысл, когда данные не могут покидать инфраструктуру вообще или важен предсказуемый счёт без оплаты по токенам.
Это реальный доступ к файлам и командам - относиться к нему стоит так же серьёзно, как к SSH-ключу с правом входа. Claude Code по умолчанию спрашивает подтверждение перед выполнением команд и правкой файлов, но безопасность всё равно держится на вас: отдельный непривилегированный пользователь, конкретный рабочий каталог, никаких чужих проектов или продакшн-данных по соседству.
curl -fsSL https://claude.ai/install.sh | bash, без Node.js вообще; npm-путь остаётся рабочим, но с версии 2.1.198 требует Node.js 22+.claude, клавиша c для копирования ссылки, код обратно в терминал. API-ключ через ANTHROPIC_API_KEY - альтернатива без интерактивного входа вовсе.tmux, а не в systemd - это диалог с агентом, а не фоновая служба; Ctrl+b d для отключения, tmux attach -t claude для возврата. Перезагрузка сервера сессию всё же обрывает.