SSD Nodes Learn 8GB RAM — $66/рік
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-01

Як запускати Claude Code із телефона через VPS

Claude Code працює у tmux на VPS, а телефон лише показує сеанс. Налаштуйте SSH-ключі, mosh для нестабільної мережі та tmux attach без зупинки агента.

Claude Code із телефона: як це працює насправді

Claude Code із телефона — це не мобільний застосунок. Claude Code працює на VPS (віртуальному приватному сервері) у сеансі tmux, який залишається відкритим. Телефон відкриває SSH (захищене з’єднання shell) до цього сеансу, поки ви переглядаєте його. Якщо закрити застосунок, агент продовжить роботу, оскільки процес ніколи не запускався на телефоні.

У цьому полягає вся конструкція. Операційна система телефона призупиняє застосунок через кілька секунд після перемикання на інший застосунок, тому будь-яке тривале завдання, запущене на телефоні, зупиняється. Крім того, під час переходу з wifi на мобільну мережу телефон щоразу отримує нову мережеву адресу. Обидві проблеми зникають, коли процес працює на сервері, а телефон лише відображає екран.

На сервері потрібні чотири компоненти: tmux для збереження сеансу, ключі SSH для підключення, mosh для роботи під час зміни мережі та сам Claude Code. На телефоні потрібен один термінальний застосунок із рядом клавіш, до якого можна отримати доступ.

Що потрібно для VPS

Для частин про SSH і tmux достатньо невеликого сервера Ubuntu 24.04. Claude Code потребує більше ресурсів. Станом на July 2026 офіційні вимоги — Ubuntu 20.04 або новіша версія на процесорі x64 або ARM64, а також 4 GB або більше RAM. На тарифі з 1 GB програма встановлюється, але під навантаженням kernel завершує її процес. Claude Code також потребує платного облікового запису Claude (Pro, Max, Team або Enterprise) або облікового запису Console з доступом до API, оскільки безкоштовний тариф Claude.ai не надає доступу до нього.

Налаштуйте сервер для звичайного користувача з sudo, а не для root. Якщо сервер новий, спочатку виконайте перші десять хвилин на новому VPS, оскільки зміни SSH далі в цьому посібнику простіше виконувати після створення користувача та налаштування firewall.

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Інсталятор розміщує binary у ~/.local/bin/claude, а claude --version виводить рядок на зразок 2.1.211 (Claude Code). Якщо виведено command not found, цей каталог ще не входить до вашого PATH: вийдіть із системи, увійдіть знову, а потім перевірте за допомогою command -v claude. claude doctor виводить діагностику встановлення та налаштувань, не запускаючи сеанс.

Увійдіть один раз зараз із ноутбука, перш ніж покладатися на телефон. Виконайте claude у каталозі проєкту та дотримуйтеся вказівок для входу. Потрібно відкрити URL у браузері й повернути код до термінала. Перемикатися між двома застосунками на екрані телефона для цього повільно. Виконайте це один раз на звичайній клавіатурі, і облікові дані залишаться на сервері.

Запускайте Claude Code у tmux, щоб розрив з’єднання не зупинив процес

tmux new -s claude
cd ~/projects/api
claude

Від’єднайтеся за допомогою Ctrl-b, а потім d. tmux виведе [detached (from session claude)] і поверне вас до оболонки. Тепер закрийте програму, втратьте сигнал або покладіть телефон у кишеню. Панель продовжить працювати.

tmux ls
tmux attach -t claude

tmux ls виводить по одному рядку для кожного сеансу, наприклад claude: 1 windows (created Thu Jul 30 09:14:02 2026). tmux attach -t claude повертає вас точно до попереднього місця, зокрема до незавершеного редагування.

Це працює, оскільки tmux запускає власний серверний процес, а ваша оболонка та Claude Code є дочірніми процесами цього сервера, а не sshd. Коли SSH-з’єднання завершується, ядро надсилає сигнал завершення з’єднання SIGHUP процесам, під’єднаним до цього з’єднання. Сервер tmux до них не належить. Без tmux те саме блокування екрана, яке розриває з’єднання, зупиняє Claude Code посеред виклику інструмента. Запуск Claude Code на VPS у tmux докладніше описує структуру сеансу.

Запускайте tmux на сервері, а не на телефоні. Введення tmux у сеансі, до якого ви вже під’єднані, виводить sessions should be nested with care, unset $TMUX to force, а примусовий запуск створює два конфліктні префіксні ключі.

Автоматичне підключення під час кожного входу

Вводити команду підключення на сенсорній клавіатурі швидко набридає. Додайте це в кінці ~/.profile на сервері:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

new-session -A -s claude підключається до сеансу з назвою claude, якщо він існує, і створює його, якщо його немає. Одна команда працює в обох випадках. exec замінює оболонку входу на tmux, тому вихід із tmux закриває з’єднання, а не повертає вас до звичайного запрошення оболонки. Якщо потрібна звичайна оболонка, пропустіть цей файл: ssh you@server -t "bash --noprofile".

Додайте це в ~/.profile, а не в ~/.bashrc. ~/.bashrc також виконується для неінтерактивних сеансів, тому передавання файлів припиняє працювати: scp і sftp сприймають неочікуваний вивід як дані протоколу та завершуються з помилкою Received message too long. ~/.profile виконується лише для оболонок входу, що відповідає інтерактивному сеансу SSH.

У ~/.profile Ubuntu також додає ~/.local/bin до PATH. Якщо claude працює одразу після входу, але оболонка всередині tmux повідомляє command not found, причина полягає саме в такому порядку виконання. Тому запускайте tmux з оболонки входу, як описано вище, а не зі скрипту, який пропускає profile.

Обидва застосунки підтримують SSH і mosh та зберігають ключі в застосунку. Відмінність полягає в інтерфейсі.

Blink Shell керується командами. У його запрошенні можна вводити ssh you@server або mosh you@server — це той самий синтаксис, що й у терміналі на настільному комп’ютері. Налаштування відкриваються командою config, а в розділі Keys можна створити пару ключів.

Termius керується формами. Спочатку потрібно заповнити запис хоста, а потім у його параметрах перемкнути протокол із SSH на Mosh. Termius містить власну реалізацію mosh і підтримує mosh 1.3.0 та новіші версії, тому на сервері все одно має бути встановлено пакет mosh.

В обох випадках створюйте ключ у застосунку. Не копіюйте на телефон наявний приватний ключ. Застосунок показує відкриту частину ключа. Це єдиний рядок, який потрібно додати до ~/.ssh/authorized_keys на сервері. У матеріалі Ключі SSH для кожного пристрою та відкликання ключа описано правила іменування та крок відкликання ключа. Для телефона це важливіше, ніж для ноутбука.

Увімкніть власне блокування термінального застосунку за допомогою біометрії або коду доступу. Без цього розблокований телефон на весь час активного екрана стає відкритою оболонкою на вашому сервері.

Android: Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Termux пакує OpenSSH і mosh у власному репозиторії, тому ssh, ssh-keygen і mosh працюють так само, як на настільній системі. Додайте надрукований рядок відкритого ключа до ~/.ssh/authorized_keys на сервері, а потім підключіться за допомогою mosh you@server.

Екранна клавіатура Android не має клавіші Esc і клавіші Ctrl, а Claude Code потребує обох. Termux може відображати власний рядок клавіш. Додайте один рядок до ~/.termux/termux.properties:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

Потім виконайте termux-reload-settings, і над клавіатурою з’явиться цей рядок. Після такого самого перезавантаження Termux також використовує моноширинний шрифт TrueType, розміщений у ~/.termux/font.ttf.

Android може зупинити Termux, коли він працює у фоновому режимі. У цьому випадку ви лише повторно підключитеся. Сеанс і агент працюють на сервері.

Чому термінал зависає, коли я виходжу із зони wifi, і що виправляє mosh?

SSH-з’єднання використовує TCP (transmission control protocol), а TCP-з’єднання визначається обома адресами та обома портами. Якщо вийти із зони дії wifi, телефон отримує нову адресу від мобільної мережі, тому старе з’єднання більше не відповідає жодному з кінцевих вузлів. Про це нічого не повідомляє. Термінал просто перестає відповідати, доки TCP не припинить спроби, після чого ssh виводить client_loop: send disconnect: Broken pipe. Щоб одразу завершити завислий сеанс, натисніть Enter, потім ~, потім ..

mosh (mobile shell) усуває цю причину збою. Він один раз використовує SSH, щоб увійти в систему та запустити процес mosh-server, зчитує порт UDP (user datagram protocol), який вибрав сервер, і закриває SSH-з’єднання. Після цього обидві сторони обмінюються дейтаграмами UDP, автентифікованими спільним ключем сеансу, тому сеанс визначається цим ключем, а не вашою адресою. Нова адреса просто продовжує передавання даних. mosh також локально відображає введені вами символи й перемальовує екран, коли сервер надсилає інший стан, тому залишається придатним для роботи через повільне мобільне з’єднання.

mosh використовує порт UDP у діапазоні від 60000 до 61000, тому відкрийте цей діапазон:

sudo ufw allow 60000:61000/udp
sudo ufw status

Відкриття портів за допомогою ufw містить решту відомостей про налаштування брандмауера. Якщо ваш провайдер надає окремий мережевий брандмауер у панелі керування, додайте там цей самий діапазон, оскільки правило ufw не може впливати на фільтр, розташований перед машиною.

Поширені дві причини збоїв mosh. Якщо вхід виконується успішно, але потім сеанс зависає й відображається Nothing received from server on UDP port 60001., це означає, що діапазон UDP заблоковано десь між телефоном і сервером. Якщо під час підключення повідомляється, що mosh-server не знайдено, пакет відсутній на сервері або не входить до змінної PATH під час входу. Встановіть його або вкажіть безпосередньо за допомогою mosh --server=/usr/bin/mosh-server you@server.

mosh також відмовляється запускатися, якщо локаль входу не використовує UTF-8, і повідомляє про це: mosh-server needs a UTF-8 native locale to run. Виправте локаль на сервері, а не на телефоні.

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

mosh не виконує дві функції. У README зазначено, що mosh не підтримує X forwarding або неінтерактивні способи використання SSH, зокрема port forwarding, тому для попереднього перегляду вебзастосунку, який щойно запустив Claude Code, все одно потрібен звичайний ssh -L 8080:127.0.0.1:8080 you@server. Крім того, mosh синхронізує лише видиму частину екрана, тому не має власного журналу прокручування. Тут це обмеження не має значення, оскільки журнал прокручування зберігає tmux: Ctrl-b, потім [ вмикає режим копіювання; прокручуйте перетягуванням або клавішами зі стрілками, а q завершує цей режим.

Зручна робота з телефона

Чотири рядки в ~/.tmux.conf на сервері виконують основну роботу:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

mouse on перетворює перетягування дотиком на прокручування, а дотик — на вибір панелі або вікна. Це замінює більшість клавіш префікса, які незручно вводити. status-position top переміщує рядок стану tmux від нижнього краю, де його закривають екранна клавіатура та панель підказок. default-terminal важливий, оскільки інакше tmux повідомляє Claude Code про термінал screen, через що кольори та псевдографіка відображаються гірше. Якщо після цього tmux відмовляється запускатися з missing or unsuitable terminal: tmux-256color, відсутній запис terminfo: sudo apt install ncurses-term.

Вивчіть чотири клавіші — і решта стане зручною.

  • Esc перериває відповідь Claude, зберігаючи вже виконану роботу. Саме цю клавішу варто розмістити найближче до великого пальця.
  • Ctrl+C також перериває поточну операцію. У порожньому запиті перше натискання очищає введені дані, а друге завершує Claude Code. Це більш грубий спосіб.
  • Подвійне натискання Esc очищає чернетку запиту, а в порожньому запиті натомість відкриває меню перемотування.
  • Для багаторядкового запиту введіть \, а потім натисніть Enter. Такий спосіб працює в кожному терміналі. Shift+Enter підтримується лише обмеженим переліком настільних терміналів, і мобільні клієнти до нього не належать.

Уникайте розділених панелей. Телефон у портретній орієнтації має приблизно 40 стовпців завширшки, тому вертикальний поділ залишає по 20 стовпців на панель, і кожна різниця переноситься та перетворюється на шум. Натомість використовуйте вікна tmux: Ctrl-b c створює нове вікно, а Ctrl-b n переходить до наступного. Поверніть телефон у горизонтальну орієнтацію, коли потрібно нормально прочитати різницю.

Тривала сесія на малому екрані здебільшого створює проблему з контекстом, тому варто прочитати матеріал керування контекстним вікном Claude Code перед спробою виконати повний робочий день у дорозі.

Захистіть систему: лише ключі, без паролів

Тепер телефон зберігає ключ до машини, яка редагує ваш код і виконує команди. Вимкніть автентифікацію за паролем. Файл drop-in безпечніший за безпосереднє редагування sshd_config, оскільки Ubuntu включає /etc/ssh/sshd_config.d/*.conf на початку sshd_config, а для параметра використовується перше знайдене значення.

sudo tee /etc/ssh/sshd_config.d/99-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

sshd -t перевіряє конфігурацію й нічого не виводить, якщо вона правильна. Якщо пропустити цю перевірку, одна помилка призведе до збою sshd під час повторного завантаження. Не закривайте поточний сеанс і перевірте підключення з другого сеансу, перш ніж щось закривати. Неправильний ключ призведе до Permission denied (publickey)., а після вимкнення паролів резервного способу входу не буде. У такому разі відновити доступ можна через консоль вашого провайдера.

Призначте кожному пристрою власний ключ. Якщо телефон буде втрачено, достатньо видалити один рядок із ~/.ssh/authorized_keys, а ноутбук продовжить працювати. За використання одного спільного ключа його доведеться змінити на кожному вашому пристрої.

Якщо в Ubuntu 24.04 перенести SSH на інший порт, врахуйте, що слухач належить до ssh.socket, тому окремий рядок Port нічого не змінить. Виконайте sudo systemctl edit ssh.socket, очистьте значення за замовчуванням за допомогою порожнього ListenStream=, а потім задайте свій порт у наступному рядку. У матеріалі Посилення захисту SSH на VPS описано це та інші аспекти захисту.

fail2ban для SSH майже не підвищує безпеку після вимкнення паролів, оскільки неправильний пароль взагалі не може бути прийнятий. Натомість він зменшує шум у журналах, завдяки чому справжню спробу входу легше помітити.

Надійніший варіант — не відкривати SSH у публічному інтернеті. Розмістіть сервер за VPN WireGuard, який ви розгорнули самостійно, вмикайте тунель на телефоні лише за потреби й дозвольте sshd слухати ListenAddress лише в тунелі. mosh працює через тунель, оскільки обидві сторони використовують UDP. Є один нюанс: тунель додає службові дані до пакетів. Якщо передавання великих файлів зупиняється, зменште MTU (максимальний розмір блока передавання) у конфігурації WireGuard на телефоні.

І ще один момент щодо такого способу роботи. На телефоні ви підтверджуєте запити дозволів на екрані, де одночасно видно лише кілька рядків diff. Це причина зберігати обмеження, а не вимикати їх. У матеріалі Безпечний запуск Claude Code на VPS описано обмеження для користувача й каталогів, які варто налаштувати до того, як сенсорний екран стане вашим основним способом доступу.

Повторне підключення та виявлення проблем

tmux attach виводить no server running on /tmp/tmux-1000/default, якщо сервер tmux більше не працює. Майже завжди це означає, що машину було перезавантажено. Перевірте це за допомогою uptime. Оновлення ядра з автоматичних оновлень безпеки перезавантажують систему. Після перезавантаження системи сеансу tmux немає, тому будь-який запуск Claude Code слід розглядати як такий, який можна запустити повторно.

can't find session: claude означає іншу проблему. Сервер tmux працює, але такого імені немає. tmux ls показує наявні сеанси.

Якщо після підключення ви бачите звичайний командний рядок shell замість Claude Code, процес завершився, але сеанс не завершився. Перевірте dmesg -T | tail на наявність рядка на кшталт Out of memory: Killed process 4821 (claude). Це відбувається під час великого редагування на системі, яка має менше за вимогу в 4 GB. Якщо такого рядка немає, Claude Code завершив роботу самостійно. Причину можна знайти в історії прокручування shell над командним рядком.

Якщо вікно відновлюється дуже малим і навколо нього залишається вільний простір, це означає, що два клієнти підключені з різними розмірами. tmux встановлює розмір вікна за найменшим підключеним клієнтом. Ваш ноутбук усе ще утримує сеанс завширшки 200 колонок, а телефон запитує ширину 40. Під час підключення від’єднайте інші клієнти: tmux attach -d -t claude.

FAQ

Чи можна запускати Claude Code безпосередньо на телефоні, а не на VPS?

Ні. Станом на July 2026 підтримуються macOS, Windows, Ubuntu 20.04 або новіші версії, Debian 10 або новіші версії та Alpine 3.19 або новіші версії, із 4 GB або більше RAM. Android та iOS до цього списку не входять. Телефон також переводить програми в режим сну та постійно змінює мережеву адресу, чого тривалий запуск агента не допускає. Запускайте Claude Code на сервері, а телефон використовуйте як дисплей.

Чи зберігається сеанс, якщо закрити програму або втратити сигнал?

Так. За це відповідають два окремі компоненти. tmux продовжує виконувати процес на сервері, тому після завершення з’єднання нічого не зупиняється. mosh підтримує саме з’єднання під час зміни адреси, тому перехід із wifi на мобільні дані навіть не потребує повторного підключення. Якщо використовувати звичайний SSH без tmux, розірване з’єднання надсилає SIGHUP, і Claude Code зупиняється посеред завдання.

Чому mosh підключається, а потім нічого не показує?

Якщо вхід успішний, а потім з’єднання зависає з повідомленням Nothing received from server on UDP port 60001., це означає, що UDP-порти від 60000 до 61000 закриті. Додайте цей діапазон в ufw, а потім додайте його ще раз у мережевий firewall вашого провайдера, який у більшості панелей є окремим засобом керування. Якщо mosh натомість повідомляє, що mosh-server не знайдено, на сервері відсутній пакет: sudo apt install mosh.

Як перервати роботу Claude Code з клавіатури без клавіші Esc?

Додайте рядок клавіш. Termux налаштовує його за допомогою extra-keys у ~/.termux/termux.properties, а Termius і Blink постачають рядок, який можна редагувати в налаштуваннях. Esc перериває поточну відповідь і зберігає вже виконану роботу. Ctrl+C також перериває роботу, але подвійне натискання в порожньому запрошенні завершує Claude Code, тому спочатку використовуйте Esc.

Чи достатньо безпечно відкривати SSH в інтернет?

Якщо автентифікацію за паролем вимкнено, успішно пройти автентифікацію можна лише за допомогою ключа, який ніколи не залишає ваших пристроїв. Для машини, яку можна перебудувати, це прийнятний ризик. Створіть окремий ключ для кожного пристрою, щоб у разі втрати телефона потрібно було змінити лише один рядок у authorized_keys. Якщо ви не хочете взагалі приймати підключення на загальнодоступному порту, підключіть сервер до WireGuard і налаштуйте sshd на прослуховування адреси тунелю.