
개발자를 위한 안전하고 일시적인 비밀 공유.
개발자를 위한 안전하고 일회성인 비밀 공유.
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
git clone https://github.com/FlerAlex/enseal.git cd enseal cargo build --release
### 사전 빌드된 바이너리
Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), Windows용 [GitHub Releases](https://github.com/FlerAlex/enseal/releases)에서 다운로드하세요.
## 빠른 시작
### 익명 모드 (설정 불필요)
일회용 코드를 사용하여 비밀을 공유하세요. 키도, 계정도 필요 없습니다 — 즉시 작동합니다.```bash
# terminal 1 (sender)
enseal share .env
Share code: 7-guitarist-revenge
Secrets: 14 variables
Expires: on first receive
# terminal 2 (recipient) — enter the code
enseal receive 7-guitarist-revenge
ok: 14 secrets written to .env
단일 비밀에도 작동합니다:```bash
echo "my-api-token" | enseal share --label "API key" Share code: 4-orbital-hammock
enseal receive 4-orbital-hammock my-api-token
두 터미널이 동시에 열려 있어야 합니다 — 보내는 쪽은 받는 쪽이 연결될 때까지 기다립니다.
### 신원 모드 (키 기반, 코드 없음)
키 신뢰가 확립된 팀을 위한 기능입니다. 이름으로 암호화하며, 추가 조정이 필요하지 않습니다.```bash
# one-time setup
enseal keys init
enseal keys export > my-key.pub # share this with teammates
enseal keys import teammate-key.pub # import theirs
# sender encrypts to recipient by name
enseal share .env --to sarah
# or push through the public relay (no codes at all)
enseal share .env --to sarah --relay wss://relay.enseal.dev
# or produce an encrypted file (no network)
enseal share .env --to sarah --output ./drop/
enseal inject 7-guitarist-revenge -- npm start
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
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
With --relay, anonymous mode bypasses wormhole and uses the enseal relay transport instead. Both sides must use the same 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](https://burnurl.dev)에 게시하며, 수신자가 브라우저에서 열 수 있는 자체 파괴 URL을 반환합니다. 수신자 측에서 CLI가 필요하지 않습니다.```bash
enseal share .env --upload
# Secret URL: https://burnurl.dev/s/a3f9c2e1...
# Expires: 2026-03-08 19:42:00 UTC (24h)
# Reads: 1 (self-destructs on first open)
수신자는 브라우저에서 URL을 열 수 있습니다 — enseal 설치가 필요하지 않습니다. --passphrase를 추가하여 업로드 전에 클라이언트 측에서 암호화합니다 (서버는 암호문만 확인합니다):```bash
enseal share .env --upload --passphrase # prompts for passphrase
enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)
API 접근은 burnurl.dev에서 Pro 또는 Team 플랜이 필요합니다. `BURNURL_API_KEY`를 키로 설정하세요. 자체 호스팅 인스턴스의 기본 URL을 재정의하려면: `BURNURL_URL=https://burnurl.internal`.
**Identity 모드** — 알려진 팀원을 위한 공개 키 암호화. 이름으로 암호화합니다.```bash
enseal keys init # one-time setup
enseal share .env --to sarah # encrypt to sarah's public key
Identity mode는 세 가지 전송 옵션을 지원합니다:```bash
enseal share .env --to sarah
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal share .env --to sarah --output ./drop/
### 유연한 입력
enseal은 여러 소스로부터 비밀을 수락합니다:```bash
# .env file (default)
enseal share .env
enseal share staging.env
# environment profile
enseal share --env staging # resolves to .env.staging
# pipe from stdin
echo "sk_live_abc123" | enseal share
cat secrets.env | enseal share
pass show stripe/key | enseal share --to sarah
# inline (careful — visible in shell history)
enseal share --secret "API_KEY=sk_live_abc123"
# wrap raw string as KEY=VALUE
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
Supports `${VAR:-default}` fallback syntax. Circular and forward references are detected and rejected. Use `--no-interpolate` to send raw `${VAR}` syntax.
### 필터링
전송할 변수를 제어합니다:```bash
# exclude public/non-secret vars
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"
# send only matching vars
enseal share .env --include "^DB_|^API_"
# skip .env parsing entirely (send raw file)
enseal share .env --no-filter
출력이 전송된 내용에 맞게 조정됩니다:```bash
enseal receive CODE ok: 14 secrets written to .env
enseal receive CODE --output staging.env
enseal receive CODE sk_live_abc123
enseal receive CODE --clipboard ok: copied to clipboard
enseal receive CODE --no-write
enseal receive ./staging.env.age ok: signature verified, file decrypted ok: 14 secrets written to .env
### Inject
비밀을 수신하여 자식 프로세스에 환경 변수로 직접 주입합니다. 비밀은 파일 시스템에 닿지 않습니다.```bash
# anonymous mode: inject via wormhole code
enseal inject 7-guitarist-revenge -- npm start
# identity mode: listen for incoming transfer on relay
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
# from encrypted file drop
enseal inject ./staging.env.age -- python manage.py runserver
--listen을 사용하면 수신자가 릴레이에 연결하여 대기합니다. 송신자는 enseal share .env --to alex --relay wss://relay.enseal.dev로 푸시합니다 — 코드 교환이 없고, 조정이 전혀 필요하지 않습니다.
공유 외에도, enseal은 완전한 .env 보안 툴킷입니다:```bash
enseal check error: missing from .env (present in .env.example): JWT_SECRET, REDIS_URL
enseal diff .env.development .env.staging
enseal redact .env DATABASE_URL= API_KEY= PORT=
enseal validate .env error: missing required: JWT_SECRET error: PORT value "abc" is not an integer ok: 11/14 variables passed validation
enseal template .env
### 저장 데이터 암호화
안전한 git 저장을 위해 age 암호화를 사용하여 `.env` 파일을 암호화합니다:```bash
# whole-file encryption
enseal encrypt .env
ok: .env encrypted in-place (14 variables, age key)
enseal decrypt .env