Wendov1.0 · iOS и Android
Русский

Гайды

Mosh или SSH на телефоне: что выбрать, чтобы следить за агентом

Ты запускаешь Claude Code на долгую задачу, закрываешь ноутбук и уходишь. Поезд въезжает в тоннель, телефон переключается с Wi-Fi на мобильную сеть и на минуту теряет сигнал, а когда ты снова смотришь на экран, SSH-сессия мертва. Так и должно быть: SSH никогда не проектировали для клиента, который меняет сеть каждые несколько минут, а Mosh и Eternal Terminal появились именно для этого.

Вот что делает каждый из них, что происходит на телефоне и как выбрать. Если нужна полная картина того, как управлять агентом из кармана, начни со статьи Как пользоваться Claude Code с телефона.

Что происходит с SSH на телефоне

SSH работает поверх TCP-соединения, а оно привязано к одному IP-адресу и одной паре сокетов. Когда телефон переходит с Wi-Fi на мобильную сеть, его IP меняется, и сервер об этом не узнаёт. Соединение зависает, пока его не убьёт таймаут. То же самое происходит, когда iOS или Android отключают сеть приложению, чтобы сэкономить батарею, или убивают приложение, потому что нужна память.

Теряется не только экран. Процесс, привязанный к этой SSH-сессии, может получить SIGHUP и умереть вместе с ней. Поэтому агент, запущенный прямо из SSH-оболочки, хрупок, и поэтому парная к этой статье tmux для кодинг-агентов почти обязательна.

Mosh: UDP и тихое переподключение

Mosh (mobile shell) использует SSH только для старта. Он проходит аутентификацию по SSH, запускает mosh-server на твоём компьютере и дальше общается по UDP. Раз TCP-соединения, которое можно порвать, нет, клиент может сменить IP, потерять сигнал или уснуть, а когда сеть вернётся, сессия будет на месте.

На практике:

  • Ты переключаешься с Wi-Fi на мобильную сеть, а сессия этого не замечает.
  • Если сервер перестал отвечать, приложение сообщает об этом, а не закрывает сессию.
  • Локальное эхо с предсказанием: то, что ты набираешь, рисуется сразу, подчёркнутым, и подтверждается, когда отвечает сервер. На мобильной сети с задержками разницу почувствуешь.

Чем за это приходится платить:

  • На компьютере должны быть открыты UDP 60000–61000 (каждой сессии нужен один порт из этого диапазона).
  • Нет прокрутки назад. Mosh синхронизирует только то, что на экране. Если хочешь пролистать вверх и прочитать, что напечатал агент, работай внутри tmux.
  • Если ОС убивает приложение, сессия Mosh заканчивается и возобновить её нельзя.

Eternal Terminal: TCP, но с возобновлением

Eternal Terminal (ET) идёт в обратную сторону. Он работает поверх TCP, по умолчанию на порту 2022, но хранит собственное состояние сессии, поэтому при обрыве соединения восстанавливает его и досылает пропущенное. Ему нужны запущенный etserver на компьютере и etterminal в PATH SSH-сессии.

На телефоне его преимущество в том, что это единственный транспорт в Wendo, который переживает закрытие приложения. Сессия появляется на экране «Главная» и при открытии продолжается с того же места. Wendo помечает ET как экспериментальный, так что имей это в виду, прежде чем на него полагаться.

Быстрое сравнение

| | SSH | Mosh | ET |
|---|---|---|---|
| Транспорт | TCP | UDP | TCP (2022) |
| Wi-Fi ↔ мобильная сеть | Обрывается | Переживает | Переживает |
| Телефон спит | Обрывается | Переживает | Переживает |
| Приложение убито ОС | Обрывается | Теряется | Возобновляется |
| Прокрутка назад | Есть | Нет | Есть |
| С Jump Host в Wendo | Да | Нет | Нет |

Установка mosh-server

На компьютере, где работает агент:

# macOS
brew install mosh

# Debian / Ubuntu
sudo apt install mosh

# Fedora
sudo dnf install mosh

Проверь, что он есть в PATH обычного SSH-подключения, а не только твоего интерактивного терминала:

ssh my-server 'which mosh-server'

На Mac с Apple Silicon Homebrew кладёт его в /opt/homebrew/bin/mosh-server, а этого каталога может не быть в PATH неинтерактивной сессии. Если так и вышло, Wendo позволяет задать путь к mosh-server в настройках подключения.

Про файрвол

Mosh нужен входящий UDP 60000–61000. В Linux с ufw:

sudo ufw allow 60000:61000/udp

С firewalld:

sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload

Если компьютер стоит за роутером, пробрось этот диапазон UDP так же, как проброс порта 22. Для ET точно так же открой TCP 2022 (sudo ufw allow 2022/tcp).

Если твой SSH идёт через прокси или балансировщик, UDP-трафик Mosh может уйти на неправильный IP. Для такого случая в Wendo есть параметр «Использовать IP сервера для UDP».

Выбор в Wendo

При редактировании подключения поле Транспорт предлагает Авто, SSH, MOSH и ET. В режиме Авто Wendo сначала пробует Mosh, затем ET, а если ничего не доступно, переходит на SSH. Начни с Авто.

Практическое правило:

  • Ты будешь ходить с телефоном, а сессии длятся минуты: Mosh.
  • Ты хочешь закрыть приложение, вернуться через час и найти сессию на экране «Главная»: ET.
  • Ты подключаешься через Jump Host: SSH. В Wendo ни Mosh, ни ET с Jump Host не работают.
  • Твой компьютер не может открыть UDP-порты: ET или SSH.

Mosh и Eternal Terminal входят в Wendo Pro; без Pro подключение идёт по SSH. Поля описаны в документации по сессиям.

Какой бы транспорт ты ни выбрал, запускай агента внутри tmux. Транспорт поддерживает жизнь экрана; tmux поддерживает жизнь процесса и даёт прокрутку назад, которой нет в Mosh. Обычная связка — Mosh или ET для канала и tmux для работы, а минимум tmux, который нужен, описан здесь. Чтобы получать уведомления, когда агент просит разрешение, смотри хуки.