Claude Code на VPS: держим ИИ-агента в терминале, а не в ноутбуке

Ноутбук засыпает, закрывается или теряет 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-ключу: отдельный непривилегированный пользователь, конкретный рабочий каталог, ничего лишнего рядом.

Зачем Claude Code на VPS, если он и так работает на ноутбуке

Первая причина простая: ноутбук не приспособлен держать процесс живым часами - засыпает от бездействия, закрывается в сумку, теряет сеть при переходе с 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 ГБ отдельно или соседним сервисом на той же машине, где памяти хватает с запасом.

Шаг 1. Ставим Claude Code на сервер

Официальный способ для 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.
  • На Node.js младше 22 npm выдаст предупреждение EBADENGINE, но установка всё равно завершится - предупреждение не значит, что что-то сломалось прямо сейчас, но апгрейд Node стоит запланировать.

Шаг 2. Входим в аккаунт с сервера, у которого нет браузера

Запустите:

claude

При первом запуске Claude Code пытается открыть браузер для входа - штатный OAuth-вход в аккаунт claude.ai. На голом сервере по SSH браузера, разумеется, нет, и это предусмотрено: нажмите c, чтобы скопировать ссылку входа в буфер обмена, откройте её в браузере на своём компьютере, войдите под своим аккаунтом и вставьте код, который покажет браузер, обратно в приглашение терминала. Это официально описанный сценарий именно для SSH-сессий, WSL и контейнеров - не обходной путь и не хак.

Что вы должны увидеть. После успешного входа терминал печатает Login successful и просит нажать Enter, чтобы продолжить - это и есть подтверждение, что сессия авторизована.

Есть и второй способ - через переменную окружения ANTHROPIC_API_KEY с ключом из Claude Console. Если она задана, Claude Code вообще не открывает браузер, а один раз спрашивает подтверждение, использовать ли этот ключ. Разница практическая:

  • Вход через аккаунт (подписка Pro/Max/Team) - проще для личного сервера: один раз входите с телефона или ноутбука, дальше сессия сама обновляется в фоне.
  • API-ключ - удобнее для общего сервера или автоматизации без интерактивного входа: ключ выпускается в Console и передаётся через переменную окружения, без похода в браузер вообще.

Учётные данные хранятся в файле ~/.claude/.credentials.json с правами 0600 - то есть читать его может только владелец. Это ещё один аргумент в пользу отдельного пользователя без права sudo без пароля: файл с вашим входом в Anthropic не должен лежать там, куда дотянется кто-то ещё на этом сервере.

Сессия, которая переживает обрыв SSH: tmux, а не systemd

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 работает одинаково с любой версией и с любой другой интерактивной программой на сервере, поэтому здесь описан именно он.

Доступ к shell - это не игрушка

Легко успокоить себя тем, что «это же на VPS, а не на моём ноутбуке» - но с точки зрения самого агента ничего не поменялось: у него по-прежнему есть команда на выполнение shell-команд и правку файлов, просто теперь эти файлы и команды относятся к настоящему серверу, а не к песочнице.

  • Отдельный пользователь без root. Заведите для агента обычного пользователя с ограниченными правами, как в статье про защиту свежего VPS, и запускайте claude под ним. Ошибка агента - переименовал не тот файл, удалил не ту папку - тогда остаётся в границах его каталога, а не разносится по всей системе.
  • Конкретный рабочий каталог, а не весь диск. Запускайте claude из каталога конкретного проекта. По умолчанию агент читает файлы без вопросов только внутри рабочего каталога и явно добавленных к нему директорий.
  • Подтверждение перед действием - не отключайте его бездумно. По умолчанию Claude Code спрашивает разрешение перед выполнением команды или правкой файла, кроме узкого набора операций только для чтения. Можно разрешить конкретную команду «навсегда для этого репозитория» - удобно для рутины. Есть и режим без вопросов вовсе - включать его рядом с чужими проектами или боевыми данными стоит только осознанно и ненадолго.
  • Ничего лишнего по соседству. Если на сервере уже лежат чужие клиентские проекты, продакшн-база или секреты других сервисов - не запускайте агента из каталога, откуда всё это видно на один 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 или своя модель через Ollama

Здесь я не буду делать вид, что выбор равнозначный. Если задача - реально писать и чинить код в репозитории через агента: разбирать многошаговый баг, рефакторить модуль, ориентироваться в незнакомой кодовой базе - 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.
  • Браузер не открывается при входе, а ссылку скопировать некуда. Нормальное поведение для SSH-сессии без графики. Нажмите c, чтобы скопировать ссылку, откройте её на своём компьютере, вставьте код обратно в терминал сервера.
  • Ошибка входа вида 403 Forbidden при живой подписке. Проверьте, не задана ли в этой же оболочке переменная ANTHROPIC_API_KEY от старого или чужого ключа - при её наличии Claude Code использует именно её, а не подписку. unset ANTHROPIC_API_KEY и проверка через /status внутри сессии показывают, какой способ входа сейчас активен.
  • После нескольких недель работы - Login expired. Срок входа не бесконечный; за несколько дней до истечения Claude Code сам предупреждает об этом при запуске. Решение - заново выполнить вход внутри сессии командой /login.
  • tmux-сессия исчезла после планового обслуживания сервера. Это ожидаемо, если сервер перезагружался - tmux не переживает ребут, только обрыв связи. Создайте сессию заново командой tmux new -s claude и запустите claude внутри неё ещё раз.

FAQ

Нужен ли Node.js для Claude Code?

Нет, если ставить официальным нативным установщиком - он скачивает готовый бинарник и не трогает Node.js вообще. Node.js нужен только для альтернативной установки через npm, и с версии 2.1.198 для неё требуется Node.js 22 или новее.

Как войти в аккаунт Claude Code на сервере, где нет браузера?

Запустите claude, нажмите c, чтобы скопировать ссылку входа, откройте её в браузере на своём компьютере и вставьте код, который он покажет, обратно в терминал сервера. Это штатный сценарий именно для SSH-сессий, WSL и контейнеров.

Как не потерять сессию Claude Code при обрыве SSH?

Запускайте claude внутри tmux. Обрыв связи или закрытие ноутбука отключает только ваш терминал от сессии, а не саму сессию на сервере - вернуться к ней можно командой tmux attach -t claude. Исключение - перезагрузка самого сервера: она останавливает tmux вместе с сессией внутри.

Сколько ресурсов потребляет Claude Code на сервере?

Официальный минимум - 4 ГБ памяти на весь сервер, это требование к машине целиком. Сам процесс агента легче обычного и тяжелеет не сам по себе, а когда по вашей команде запускает сборку или тесты - точную цифру для своей нагрузки проверяйте через ps aux или top.

Нужно ли открывать порты для Claude Code на VPS?

Нет. Claude Code - исходящий клиент: он сам обращается по HTTPS к серверам Anthropic и ничего не слушает на сервере для приёма входящих подключений. Файрвол с политикой «запрещать всё входящее» можно не трогать вообще.

Claude Code или своя модель через Ollama - что выбрать?

Для реальной агентной работы с кодом Claude Code выигрывает по качеству рассуждений с большим отрывом - модели, которые тянет VPS без GPU через Ollama, для такой работы обычно недостаточно сильны. Ollama на своём сервере имеет смысл, когда данные не могут покидать инфраструктуру вообще или важен предсказуемый счёт без оплаты по токенам.

Безопасно ли давать ИИ-агенту доступ к серверу по shell?

Это реальный доступ к файлам и командам - относиться к нему стоит так же серьёзно, как к SSH-ключу с правом входа. Claude Code по умолчанию спрашивает подтверждение перед выполнением команд и правкой файлов, но безопасность всё равно держится на вас: отдельный непривилегированный пользователь, конкретный рабочий каталог, никаких чужих проектов или продакшн-данных по соседству.

Коротко

  • Официальная установка на Linux - 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 для возврата. Перезагрузка сервера сессию всё же обрывает.
  • Официальный минимум по железу - 4 ГБ памяти на весь сервер; сеть нужна только исходящая по HTTPS, входящие порты открывать незачем.
  • Доступ агента к shell - не мелочь из-за того, что это VPS, а не ноутбук: отдельный непривилегированный пользователь, конкретный рабочий каталог, не отключайте подтверждение действий бездумно.
  • Для реальной работы с кодом Claude Code сильнее любой модели, которую вытянет VPS без GPU через Ollama; своя модель оправдана, когда данные не могут уходить наружу или важен счёт без токенов.

Что дальше

PUBLISHED
—
AUTHOR
HIP-HOSTING
LANGUAGES
EN · RU