Почему «просто SSH» ломает интерактив на джиттерной линии
Пакетные конвейеры и зеркала зависимостей терпят кратковременные обрывы, потому что клиенты умеют докачивать байты. Живой ввод и экран с партнёром в другом часовом поясе не терпят залипания эха и потери состояния при каждом роуминге Wi‑Fi. SSH держит всё на одном TCP‑потоке: любой длинный затык превращается в «мертвый» терминал, пока вы не перезапустите клиент. Mosh переносит отрисовку локально и использует отдельный UDP‑канал для синхронизации, поэтому сессия переживает типичные потери на последней миле. Это не замена каноническому пути для больших деревьев артефактов: для фан‑аута бинарников по узлам по‑прежнему смотрите отдельный материал про rsync и пороги диска на кластере Mac mini M4, а здесь держим фокус на входе оператора и инженера.
- Интерактив: задержка заметна раньше, чем падает пропускная способность файлового канала.
- Роуминг: смена сети убивает долгоживущий TCP‑сеанс SSH без аккуратного мультиплексора.
- Безопасность периметра: UDP‑диапазон Mosh реже встречает готовые профили, чем порт двадцать два.
Матрица решений: Mosh против SSH для общего Mac mini M4
Ниже — практическая сетка для команд, которые арендуют выделенные Mac на clustervps и делят один узел между несколькими таймзонами. Цель — быстро согласовать вход без споров «у меня работает».
| Критерий | SSH | Mosh |
|---|---|---|
| Восстановление после джиттера | Нужны внешние обходы: мультиплексор, агрессивный ServerAlive, ручной перезапуск. | Локальный предиктивный рендер и UDP‑синхронизация переживают типичные потери. |
| Порты и аудит | Один привычный TCP‑порт двадцать два, проще объяснить безопасникам. | Требуется явный профиль UDP и сужение диапазона на сервере. |
| Параллельные сборки | Нейтрален к flock, если агенты не делят один TTY. |
Также нейтрален: блокировки живут в файловой системе, а не в транспорте. |
Перед закупкой сверьте площадку и лимиты с публичной страницей тарифов Mac; там же видно конфигурации памяти без входа в консоль.
Чек-лист портов и брандмауэра
Боевой профиль для Mosh на macOS включает три слоя: разрешённый TCP для первичного SSH‑логина, отдельный UDP‑диапазон для datagram‑канала и симметричные правила на ноутбуке инженера. Не полагайтесь на «открыть всё UDP»: зафиксируйте верхнюю и нижнюю границу в конфигурации сервера и повторите её в корпоративном фаерволе.
- TCP двадцать два: первичная аутентификация и старт Mosh; держите только нужные подсети jump‑хоста.
- UDP шестьсот тысяч плюс: сузьте до десятка портов на инстанс и пропишите в runbook; на клиенте разрешите исходящий UDP в тот же диапазон.
- NAT и CGNAT: проверьте, что провайдер не режет долгоживущий UDP; иначе оставьте SSH плюс мультиплексор как запасной путь.
- Логирование: фиксируйте только факт открытия диапазона и версию Mosh, без ключей в syslog.
Комбинация блокировок сборки и flock
Параллельные агенты на одном узле легко пересекаются в каталоге сборки. Оболочка flock сериализует критические секции: один процесс держит файл блокировки, остальные ждут или уходят в очередь с понятным кодом возврата. Это ортогонально выбору Mosh или SSH: транспорт не знает о ваших Makefile‑таргетах. Практическое правило — держать блокировку на коротком пути внутри общего тома и никогда не вкладывать сетевые операции внутрь критической секции.
Для смешанных сценариев, где один инженер в Mosh правит CMake, а второй по SSH гоняет агент CI, договоритесь об имени файла блокировки и таймауте ожидания. Добавьте метку ревизии в имя артефактной папки, чтобы promote не читал полупустой каталог. Если нужен канонический поток выкладки бинарников между Mac, вернитесь к матрице rsync и promote, но не смешивайте долгий файловый sync с интерактивной сессией в одном TTY.
- Единый lockfile: путь вроде
/var/tmp/build-ci.lockи права группы сборки. - Таймаут: ждать не дольше одной минуты, затем падать с явным сообщением в лог агента.
- Очистка: при аварийном kill удалять lock в postamble или использовать
flockс FD, чтобы ОС освободила дескриптор.
Пять шагов приёмки интерактивного входа
- Базовый SSH. Подтвердите ключи, jump и лимиты попыток до включения Mosh.
- Профиль UDP. Откройте согласованный диапазон на сервере и клиенте, зафиксируйте скриншот правил для аудита.
- Имитация джиттера. Искусственно ограничьте полосу и добавьте потери пакетов в лаборатории, сравните задержку ввода.
- Совместный стресс. Два инженера в разных городах открывают одну задачу: один в Mosh, второй по SSH с
flockна сборке. - Runbook отката. Если UDP заблокирован провайдером, переключитесь на SSH плюс мультиплексор без смены пользователей.
Цифры и формулировки для внутреннего регламента
flock для CI на общем MacЭти величины не являются договорной SLA clustervps: это инженерные ориентиры, которые помогают согласовать ожидания команды и службы информационной безопасности. Для вопросов по доступу без личного кабинета используйте публичные страницы справочного центра и карту регионов на главной.
FAQ
Нужен ли Mosh, если уже есть стабильный корпоративный VPN? VPN упорядочивает маршрут, но не отменяет потери на последней миле. Для длинных парных сессий Mosh даёт предсказуемый UX; для массовой доставки артефактов оставьте отдельный канал.
Можно ли ужать UDP‑диапазон до пары портов? Да, если число одновременных сессий невелико: задайте серверный диапазон и зеркально откройте его на периметре, иначе новые подключения получат отказ.
Ломает ли Mosh параллельные агенты с flock? Нет, если блокировки на файловой системе и не завязаны на сетевой вызов внутри критической секции; транспорт лишь доставляет TTY.
Тарифы и справка для согласования входа на Mac
Сравните конфигурации на странице тарифов и откройте справочный центр — обе ссылки публичные, без обязательного логина в консоль.