
Безопасное, эфемерное совместное использование секретов для разработчиков.
Безопасный, эфемерный обмен секретами для разработчиков.
Хватит вставлять секреты в Slack. enseal делает безопасный путь быстрее небезопасного — делитесь файлами .env и секретами через зашифрованные одноразовые каналы одной командой без настройки.```bash
$ enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables (staging) Expires: on first receive
$ enseal receive 7-guitarist-revenge ok: 14 secrets written to .env
## Установка
### Из crates.io```bash
cargo install enseal
``````bash
git clone https://github.com/FlerAlex/enseal.git
cd enseal
cargo build --release
# binary at ./target/release/enseal
Загрузить из GitHub Releases для Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) и Windows.
Делитесь секретами с помощью одноразового кода. Никаких ключей, никаких аккаунтов — работает сразу.```bash
enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables Expires: on first receive
enseal receive 7-guitarist-revenge ok: 14 secrets written to .env
Работает также с одиночными секретами:```bash
# terminal 1 — pipe a token
echo "my-api-token" | enseal share --label "API key"
Share code: 4-orbital-hammock
# terminal 2 — prints to stdout
enseal receive 4-orbital-hammock
my-api-token
Оба терминала должны быть открыты одновременно — отправитель ждет, пока получатель подключится.
Для команд с установленным доверием к ключам. Шифрование по имени, координация не требуется.```bash
enseal keys init enseal keys export > my-key.pub # share this with teammates enseal keys import teammate-key.pub # import theirs
enseal share .env --to sarah
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal share .env --to sarah --output ./drop/
### Внедрить секреты в процесс (никогда не касаясь диска)```bash
# anonymous mode: sender gives you a code
enseal inject 7-guitarist-revenge -- npm start
# identity mode: listen on relay, sender pushes when ready
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
# from an encrypted file drop
enseal inject ./staging.env.age -- python manage.py runserver
Секреты существуют только в памяти дочернего процесса. Когда он завершается, они исчезают.
Анонимный режим (по умолчанию) — на основе wormhole, без настройки. Всё, что нужно — читаемый человеком код. Взаимная аутентификация SPAKE2 предотвращает MITM-атаки.```bash enseal share .env # generates wormhole code enseal receive 7-guitarist-revenge # uses code
С флагом `--relay`, анонимный режим обходит wormhole и использует transport enseal relay вместо этого. Обе стороны должны использовать один и тот же relay:```bash
enseal share .env --relay ws://relay.internal:4443 # generates channel code
enseal receive 3421-amber-frost --relay ws://relay.internal:4443
Асинхронная загрузка (--upload) — только для отправителя. Шифрует локально и отправляет на burnurl.dev, возвращая самоуничтожающуюся ссылку, которую получатель открывает в браузере. CLI не требуется на стороне получателя.```bash
enseal share .env --upload
Получатель открывает URL в любом браузере — установка enseal не требуется. Добавьте `--passphrase` для шифрования на стороне клиента перед загрузкой (сервер видит только шифротекст):```bash
enseal share .env --upload --passphrase # prompts for passphrase
enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)
Для доступа к API требуется тарифный план Pro или Team на burnurl.dev. Установите BURNURL_API_KEY как ваш ключ. Переопределите базовый URL для автономных экземпляров: BURNURL_URL=https://burnurl.internal.
Режим идентификации — шифрование с открытым ключом для знакомых участников команды. Шифруйте для указанного имени.```bash enseal keys init # one-time setup enseal share .env --to sarah # encrypt to sarah's public key
Режим Identity поддерживает три варианта транспорта:```bash
# wormhole (default, no --relay): generates a code like anonymous mode
enseal share .env --to sarah
# relay push (with --relay): zero codes, pushes directly to recipient's channel
enseal share .env --to sarah --relay wss://relay.enseal.dev
# file drop (with --output): no network, produces encrypted file
enseal share .env --to sarah --output ./drop/
# produces ./drop/[email protected]
enseal принимает секреты из нескольких источников:```bash
enseal share .env enseal share staging.env
enseal share --env staging # resolves to .env.staging
echo "sk_live_abc123" | enseal share cat secrets.env | enseal share pass show stripe/key | enseal share --to sarah
enseal share --secret "API_KEY=sk_live_abc123"
echo "sk_live_abc123" | enseal share --as STRIPE_KEY
### Интерполяция переменных
Ссылки `${VAR}` разрешаются перед отправкой, чтобы получатели получили полностью развернутые значения:```env
DB_HOST=postgres.internal
DB_PORT=5432
DATABASE_URL=postgres://user:pass@${DB_HOST}:${DB_PORT}/myapp
Поддерживает синтаксис подстановки ${VAR:-default}. Циклические и прямые ссылки обнаруживаются и отклоняются. Используйте --no-interpolate для отправки сырого синтаксиса ${VAR}.
Управляйте, какие переменные отправляются:```bash
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"
enseal share .env --include "^DB_|^API_"
enseal share .env --no-filter
### Умный приём
Вывод адаптируется к тому, что было отправлено:```bash
# .env payload -> writes to file
enseal receive CODE
ok: 14 secrets written to .env
# write to specific file
enseal receive CODE --output staging.env
# raw string -> prints to stdout (pipe-friendly)
enseal receive CODE
sk_live_abc123
# force clipboard
enseal receive CODE --clipboard
ok: copied to clipboard
# force stdout for any payload
enseal receive CODE --no-write
# receive from encrypted file drop (identity mode)
enseal receive ./staging.env.age
ok: signature verified, file decrypted
ok: 14 secrets written to .env
Получайте секреты и внедряйте их непосредственно как переменные окружения в дочерний процесс. Секреты никогда не касаются файловой системы.```bash
enseal inject 7-guitarist-revenge -- npm start
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up