
magic-wormhole: безопасная передача файлов по одноразовому коду
Table of Contents
Привет,
сегодня хочу рассказать про небольшой 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
Вернёмся к пятнице. Прагматичный процесс обычно такой:
- Собрать support bundle (логи, экспорт, несколько скриншотов).
- Опционально посчитать хэш, чтобы потом убедиться, что пришёл ровно тот же пакет.
- Отправить bundle через magic-wormhole.
- Передать код по второму каналу (звонок, отдельный чат, просто продиктовать).
Со стороны отправителя:
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 остаются правдой. Если отправитель скомпрометирован, он может отправить что угодно. Если получатель скомпрометирован, файл скомпрометирован после получения.
Практические правила (которые реально помогают)
- Не делитесь кодом в том же канале, где ссылка на тикет или контекст файла. Лучше: звонок или отдельный приватный чат.
- Считайте, что в логах могут быть токены, имена хостов или персональные данные. Отправляйте только необходимое.
- Для критичных артефактов: передайте хэш отдельно и проверьте после получения.
Установка (коротко и по делу)
На многих системах это одна команда через пакетный менеджер:
- 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, где часто нет времени и желания выстраивать цепочку согласований под каждый запрос поддержки, инструмент “достаточно безопасный и сразу готовый” часто оказывается ровно тем, что нужно.
Источники и ссылки
- Документация magic-wormhole (Read the Docs)
- magic-wormhole на GitHub
- wormhole-william (Go, single binary)
- magic-wormhole на PyPI
До следующего раза, Joe


