magic-wormhole: безопасная передача файлов по одноразовому коду

magic-wormhole: безопасная передача файлов по одноразовому коду

5 min read
Network

Привет,

сегодня хочу рассказать про небольшой CLI-инструмент, к которому я регулярно возвращаюсь в поддержке и при инцидентах: magic-wormhole. Он решает задачу, которая в обычном бизнесе встречается куда чаще любых глянцевых “enterprise”-историй: нужно передать файл (или каталог) прямо сейчас, но e-mail слишком ограничен, облачная ссылка может быть политически или юридически нежелательной, а “давайте быстро откроем порт” не вариант.

Пятница, 16:47. Компания примерно на 60 сотрудников: центральный файловый сервер тормозит, пользователи жалуются на таймауты, а внешний IT-подрядчик просит support bundle с логами и небольшим экспортом конфигурации. Пакет около 900 МБ. Почта не пропускает, SharePoint запрещён из-за требований комплаенса, а поднимать ad-hoc FTP это кошмар, который в 2026 году точно не хочется создавать.

Вот для таких случаев magic-wormhole и создан: обменялись одноразовым кодом, передали файл с end-to-end шифрованием, готово.

Что такое magic-wormhole?

magic-wormhole это лёгкий инструмент для ad-hoc передачи файлов между двумя компьютерами. Вся магия в wormhole code (например 7-coral-lion): обе стороны вводят один и тот же код, и на его основе поднимается end-to-end зашифрованное соединение.

Важно то, чего magic-wormhole не требует:

  • никаких аккаунтов
  • никакого портала входа
  • никакого “загрузить куда-то и раздать ссылку”
  • никаких входящих правил на firewall

Обеим сторонам нужен только установленный wormhole и исходящий доступ в интернет. На практике: если исходящий HTTP(S) работает, то magic-wormhole чаще всего тоже работает.

Реальный кейс для SMB

Вернёмся к пятнице. Прагматичный процесс обычно такой:

  1. Собрать support bundle (логи, экспорт, несколько скриншотов).
  2. Опционально посчитать хэш, чтобы потом убедиться, что пришёл ровно тот же пакет.
  3. Отправить bundle через magic-wormhole.
  4. Передать код по второму каналу (звонок, отдельный чат, просто продиктовать).

Со стороны отправителя:

tar -czf support-bundle.tgz ./logs ./config-export
sha256sum support-bundle.tgz
wormhole send support-bundle.tgz

magic-wormhole покажет код. Получатель запускает:

wormhole receive

Вводишь код, скачивание идёт, дальше можно сверить хэши. В реальности такая комбинация “быстро” и “при этом аккуратно” очень помогает многим небольшим компаниям.

Как я использую это на практике

Отправить файл с A на B

Отправитель:

wormhole send /path/to/file.zip

Получатель:

wormhole receive

Файл сохраняется в текущую директорию. Я часто создаю отдельную папку, чтобы ничего не потерялось между Downloads и Desktop:

mkdir -p ~/wormhole-recv && cd ~/wormhole-recv
wormhole receive

Отправить директорию

Если нужно отправить целую папку:

wormhole send --dir ./support-bundle/

Что происходит “под капотом” (коротко и без маркетинга)

Внутри magic-wormhole делает три вещи, которые иначе пришлось бы собирать вручную: сводит два клиента, безопасно договаривается о ключах и надёжно переносит данные, даже когда мешают NAT и корпоративные firewall.

ШагЧто происходитЗачем это нужно
1. КодОтправитель генерирует короткий одноразовый код.Простой shared secret для этого переноса.
2. RendezvousОба клиента подключаются к rendezvous серверу (по умолчанию публичная “mailbox”).Клиенты находят друг друга без входящих портов.
3. PAKEИз кода через SPAKE2 (PAKE) выводится общий ключ.E2E-ключ без классического управления ключами.
4. Data pathСначала пробуется прямое соединение, затем fallback через relay/transit.Работает за NAT и в типичных офисных сетях.
5. E2E transferДанные шифруются и защищаются по целостности end-to-end.Relay видит только ciphertext.

Ключевая мысль: rendezvous/relay это инфраструктура, но не место, где ваши данные лежат в открытом виде.

Безопасность: сильные стороны, ограничения и несколько правил

Мне нравится, что модель безопасности у magic-wormhole довольно честная: есть end-to-end шифрование, но идентичность не появляется автоматически.

Что вы получаете

  • End-to-end шифрование: содержимое защищено между отправителем и получателем, даже если используется relay.
  • Короткий жизненный цикл: код рассчитан на один перенос, а не на постоянный пароль.
  • Небольшая поверхность атаки: нет сервера, который нужно жёстко настраивать, нет управления пользователями, нет веб-интерфейса.

На что нужно обратить внимание

  • Код это пароль. Кто знает код, тот и “ваш peer”. Если код попадает в открытый тикет, это проблема.
  • Нет аудита по умолчанию. Для одних компаний это плюс, для других стоп-фактор. Если нужны DLP, согласования и трассируемость, используйте официальный канал.
  • Endpoints остаются правдой. Если отправитель скомпрометирован, он может отправить что угодно. Если получатель скомпрометирован, файл скомпрометирован после получения.

Практические правила (которые реально помогают)

  1. Не делитесь кодом в том же канале, где ссылка на тикет или контекст файла. Лучше: звонок или отдельный приватный чат.
  2. Считайте, что в логах могут быть токены, имена хостов или персональные данные. Отправляйте только необходимое.
  3. Для критичных артефактов: передайте хэш отдельно и проверьте после получения.

Установка (коротко и по делу)

На многих системах это одна команда через пакетный менеджер:

  • Debian/Ubuntu: sudo apt install magic-wormhole
  • macOS: brew install magic-wormhole

Если пакеты в дистрибутиве устарели, pipx часто самый чистый вариант:

pipx install magic-wormhole
pipx ensurepath

А если вы вообще не хотите Python (минимальный сервер, контейнер, rescue environment): wormhole-william это совместимый Go-порт в виде single binary.

Автоматизация и self-hosting

Для контролируемых процессов magic-wormhole можно использовать в скриптах:

CODE="5-alpaca-orbit"
wormhole send --code "$CODE" /path/to/db.dump

Получатель:

wormhole receive --code "$CODE" --accept-file

Это удобно, но как только вы фиксируете код, вы снова занимаетесь управлением секретами. Если автоматизируете, делайте это с нормальным secret handling и короткими TTL.

Если вам нужен полный контроль над rendezvous/relay, можно указать собственную инфраструктуру, включая:

  • --relay-url для вашего rendezvous сервера
  • --transit-helper для вашего transit relay

Итоги

magic-wormhole не заменяет управляемые корпоративные процессы передачи файлов. Но как повседневный инструмент он отличен: быстро, без лишних зависимостей и с понятной моделью безопасности.

Особенно в мире SMB, где часто нет времени и желания выстраивать цепочку согласований под каждый запрос поддержки, инструмент “достаточно безопасный и сразу готовый” часто оказывается ровно тем, что нужно.

Источники и ссылки

До следующего раза, Joe

© 2026 trueNetLab