
네이티브 OS 자격 증명 저장소(macOS 키체인, Linux Secret Service, Windows Credential Manager)를 사용하여 환경 비밀을 관리하는 안전한 CLI 도구
네이티브 OS 자격 증명 저장소를 사용하는 안전한 환경 변수 비밀 관리 도구.

myapp.dev, stripe-api.prod, work.staging)cmd로 명령 저장 및 재실행 (검색, 목록, 실행, 삭제).env 파일로 비밀 내보내기 (audit를 통한 생성 추적 포함)eval $(envsec env)).env 파일에서 비밀 로드 (충돌 감지 포함)envsec tui)다음 패키지를 포함하는 모노레포입니다:
| 패키지 | 설명 | npm |
|---|---|---|
envsec | 비밀 관리용 CLI 도구 | |
@envsec/sdk | 프로그래밍 방식으로 비밀을 로드하는 Node.js / Bun SDK | |
@envsec/core | 핵심 엔진 — OS 자격 증명 저장소 어댑터 + 메타데이터 DB | |
@envsec/tui | 비밀 관리를 위한 대화형 터미널 UI |
Node.js 또는 Bun에서 비밀에 프로그래밍 방식으로 접근하려면 @envsec/sdk를 사용하세요:```bash
npm install @envsec/sdk
I need the actual content of chunk 3 to translate it. Please provide the Markdown text you'd like translated.```typescript
import { loadSecrets } from "@envsec/sdk";
// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });
// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();
전체 API, 다중 컨텍스트 지원 및 옵션에 대한 자세한 내용은 SDK 문서를 참조하세요.
추가 종속성 없음. security CLI 도구를 통해 내장된 Keychain을 사용합니다.
libsecret-tools( secret-tool 명령 제공)가 필요하며, 이는 D-Bus를 통해 GNOME Keyring, KDE Wallet 또는 기타 Secret Service API 제공자와 통신합니다.```bash
sudo apt install libsecret-tools
sudo dnf install libsecret
sudo pacman -S libsecret
D-Bus 세션이 실행 중이고 키링 데몬(예: `gnome-keyring-daemon`)이 활성화되어 있어야 합니다. 대부분의 데스크톱 환경에서는 이를 자동으로 처리합니다.
### Windows
추가 종속성이 필요 없습니다. `cmdkey`와 PowerShell을 통해 내장된 Windows 자격 증명 관리자를 사용합니다.
## 설치
### Homebrew (macOS / Linux)```bash
brew tap davidnussio/homebrew-tap
brew install envsec
npm install -g envsec
### npx (설치 없이)```bash
npx envsec
mise use -g npm:envsec
## 사용법
대부분의 명령은 `--context`(또는 `-c`)로 컨텍스트를 지정해야 합니다.
컨텍스트는 비밀을 그룹화하기 위한 자유 형식 레이블입니다. 예: `myapp.dev`, `stripe-api.prod`, `work.staging`.
### 전역 옵션
다음 옵션은 모든 명령에서 사용할 수 있습니다:
- `--context`, `-c` — 컨텍스트 이름(예: `myapp.dev`, `stripe-api.prod`). `ENVSEC_CONTEXT` 환경 변수도 읽습니다
- `--debug`, `-d` — 디버그 로깅 활성화
- `--json` — 스크립팅을 위해 JSON 형식으로 출력
- `--db` — SQLite 데이터베이스 파일 경로(기본값: `~/.envsec/store.sqlite`). `ENVSEC_DB` 환경 변수도 읽습니다
### 사용자 지정 데이터베이스 경로
기본적으로 메타데이터는 `~/.envsec/store.sqlite`에 저장됩니다. `--db` 또는 `ENVSEC_DB` 환경 변수로 이를 재정의할 수 있습니다:```bash
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list
# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list
--db 플래그는 ENVSEC_DB보다 우선합니다. 사용 사례로는 프로젝트별 데이터베이스, 네트워크 드라이브의 팀 공유 데이터베이스, 임시 스토리지를 사용하는 CI/CD 등이 있습니다.
OS 자격 증명 저장소에 비밀을 저장합니다.
<key> — 비밀 키 이름 (예: api.key, db.password)--value, -v — 저장할 값 (대화형 마스킹 프롬프트를 위해 생략 가능)--expires, -e — 만료 기간 (예: 30m, 2h, 7d, 4w, 3mo, 1y)```bashenvsec -c myapp.dev add api.key --value "sk-abc123"
envsec -c myapp.dev add api.key -v "sk-abc123"
envsec -c myapp.dev add api.key
envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d
envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo
### Get a secret
OS 자격 증명 저장소에서 비밀 값을 검색합니다.
- `<key>` — 검색할 비밀 키 이름
- `--quiet`, `-q` — 원시 값만 출력합니다(경고나 추가 출력 없음)
- `--json` — JSON 형식으로 출력합니다(context, key, value, expires_at 포함)```bash
envsec -c myapp.dev get api.key
# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q
OS 자격 증명 저장소에서 비밀을 제거합니다.
<key> — 삭제할 비밀 키 이름(--all 사용 시 선택 사항)--yes, -y — 확인 프롬프트 건너뛰기--all — 컨텍스트의 모든 비밀 삭제```bash
envsec -c myapp.dev delete api.keyenvsec -c myapp.dev del api.key
### 비밀번호 이름 변경
동일한 컨텍스트 내에서 비밀번호 키의 이름을 변경합니다. 값과 만료 메타데이터는 유지됩니다.
- `<old-key>` — 현재 비밀번호 키 이름
- `<new-key>` — 새 비밀번호 키 이름
- `--force`, `-f` — 대상이 이미 존재하는 경우 덮어씁니다```bash
# Rename a key
envsec -c myapp.dev rename old.key new.key
# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force
컨텍스트의 모든 시크릿 키와 메타데이터를 나열합니다.
--json — JSON 형식으로 출력```bash
envsec -c myapp.dev list### 모든 컨텍스트 나열
비밀번호 개수와 함께 사용 가능한 모든 컨텍스트를 나열합니다.
- `--json` — JSON 형식으로 출력```bash
# Without --context, lists all available contexts with secret counts
envsec list
글로브 패턴을 사용하여 시크릿 또는 컨텍스트를 검색합니다.
<pattern> — 검색할 글로브 패턴 (예: api.*, myapp.*)--json — JSON 형식으로 출력```bashenvsec -c myapp.dev search "api.*"
envsec search "myapp.*"
### 컨텍스트 간 시크릿 이동
한 컨텍스트에서 다른 컨텍스트로 시크릿을 이동합니다. 이동 후 원본 시크릿은 제거됩니다.
- `<pattern>` — 이동할 Glob 패턴 또는 정확한 키 (`--all` 사용 시 선택 사항)
- `--to`, `-t` — 시크릿을 이동할 대상 컨텍스트
- `--all` — 소스 컨텍스트의 모든 시크릿 이동
- `--force`, `-f` — 대상 컨텍스트의 기존 시크릿 덮어쓰기
- `--yes`, `-y` — 확인 프롬프트 건너뛰기```bash
# Move a single secret
envsec -c myapp.dev move api.token --to myapp.prod
# Move secrets matching a glob pattern
envsec -c myapp.dev move "redis.*" --to myapp.prod -y
# Move all secrets from one context to another
envsec -c myapp.dev move --all --to myapp.prod -y
# Overwrite existing secrets in the target context
envsec -c myapp.dev move "redis.*" --to myapp.prod --force -y
한 컨텍스트에서 다른 컨텍스트로 비밀을 복사합니다. 원본 비밀은 그대로 유지됩니다.
<pattern> — 복사할 키의 Glob 패턴 또는 정확한 키 (--all 사용 시 선택 사항)--to, -t — 비밀을 복사할 대상 컨텍스트--all — 소스 컨텍스트의 모든 비밀 복사--force, -f — 대상 컨텍스트의 기존 비밀 덮어쓰기--yes, -y — 확인 프롬프트 건너뛰기```bashenvsec -c myapp.dev copy api.token --to myapp.staging
envsec -c myapp.dev copy "redis.*" --to myapp.staging -y
envsec -c myapp.dev copy --all --to myapp.staging -y
envsec -c myapp.dev copy "redis.*" --to myapp.staging --force -y
### 비밀 값으로 명령 실행
비밀 값을 플레이스홀더로 보간하거나 환경 변수로 주입하여 명령을 실행합니다.