비밀번호 매니저 — Mac + Windows 통합 셋업과 CLI 자동화
1Password / Bitwarden 양 머신 셋업, SSH·Git·dotfiles에서 자동 fetch까지.
비밀번호 매니저는 두 가지 경계에서 가치가 생긴다 — (1) 브라우저 자동 채우기, (2) 터미널·dotfiles·CI에서 CLI로 시크릿 자동 fetch. (1)만 쓰면 1Password를 50% 활용한 셈이다. CLI 자동화를 같이 셋업하면 .env에 시크릿 평문을 쓰지 않아도 되고, 새 머신 부트스트랩이 한 줄 명령으로 끝난다.
이 가이드는 1Password (권장) · Bitwarden 두 옵션을 비교하고, Mac + Windows 양쪽에 통합 셋업하는 방법.
TL;DR
| 항목 | 1Password | Bitwarden |
|---|---|---|
| 가격 | 유료 ($/월) | 무료 + 유료 옵션 |
| 보안 모델 | E2E + Secret Key (디바이스 인증) | E2E + master password |
| CLI 품질 | ✅ 매우 좋음 (op CLI + biometric) | 양호 (bw CLI) |
| SSH 통합 | ✅ 네이티브 SSH agent | 수동 |
| Git 서명 통합 | ✅ ssh-key로 commit 서명 | 수동 |
| 모바일 / 가족 공유 | ✅ | ✅ |
| 셀프 호스팅 | ❌ | ✅ (Vaultwarden) |
권장: 1Password (개발자 워크플로 통합 ↑). 비용 민감 또는 셀프호스팅 원하면 Bitwarden.
1. 1Password 셋업
1.1 설치 (Mac)
brew install --cask 1password 1password-cli1.2 설치 (Windows)
winget install --id AgileBits.1Password -e
winget install --id AgileBits.1Password.CLI -e1.3 첫 로그인
데스크톱 앱 → 계정 로그인 (Email + Secret Key + Master Password). Secret Key는 가입 시 받은 PDF 또는 다른 디바이스에서.
1.4 CLI ↔ 데스크톱 통합
데스크톱 앱 → Settings → Developer → "Integrate with 1Password CLI" ✅. 이게 핵심 — op 명령이 GUI biometric (Touch ID / Windows Hello)으로 인증된다.
확인:
op vault list
# 비밀번호 입력 없이 Touch ID/Windows Hello로 unlock2. SSH 키 통합 (1Password)
전통적으로 SSH 키는 ~/.ssh/id_ed25519 평문 파일. 1Password는 SSH agent를 내장해서 키를 vault에 저장하고 사용 시점에 biometric 인증.
2.1 키 생성
1Password 데스크톱 → "+" → SSH Key:
- Name:
personal-ed25519 - Algorithm: Ed25519
- 자동으로 키 페어 생성
2.2 SSH agent 활성화
데스크톱 → Settings → Developer → "Use the SSH agent" ✅
- macOS:
~/.ssh/config에 자동 추가 - Windows: 환경변수 자동 셋업
2.3 GitHub에 공개 키 등록
1Password vault → 해당 키 항목 → "Public key" 복사 → GitHub → Settings → SSH and GPG keys → New SSH key.
2.4 테스트
ssh -T git@github.com
# Hi yourname! You've successfully authenticated...
# (이 시점에 Touch ID/Windows Hello 한 번)이제
~/.ssh/에 키 파일이 없어도 SSH 동작. 새 머신은 1Password 로그인만 하면 자동 사용 가능.
3. Git commit 서명 (SSH 키로)
GPG보다 단순. 같은 1Password SSH 키로 commit 서명:
git config --global gpg.format ssh
git config --global user.signingkey "ssh-ed25519 AAAA... your-comment"
# 위 공개 키는 1Password 키 항목에서 복사
git config --global commit.gpgsign true이제 git commit 시 1Password biometric → 자동 서명. GitHub Settings → SSH and GPG keys → "Add new signing key" 에 같은 공개 키 등록.
4. .env / API 키 통합
직접 .env에 평문 작성 대신 1Password에서 fetch:
4.1 vault에 시크릿 추가
1Password → "+" → API Credential:
- Title:
Anthropic API Key - Credential:
sk-ant-... - Tags:
dev,api
4.2 CLI로 fetch
op item get "Anthropic API Key" --fields credential
# sk-ant-...4.3 op run — 자동 주입
.env.tmpl 파일에 placeholder만:
ANTHROPIC_API_KEY=op://Private/Anthropic API Key/credential
GITHUB_TOKEN=op://Private/GitHub/token
실행:
op run --env-file=.env.tmpl -- npm run dev
# 환경변수에 실제 값 주입된 상태로 명령 실행.env.tmpl은 git commit 안전 (참조만 있음). 실제 시크릿은 vault에만.
4.4 chezmoi 통합
mac/dotfiles에서 본 chezmoi 템플릿:
# dot_env.tmpl
export ANTHROPIC_API_KEY={{ onepasswordRead "op://Private/Anthropic/credential" }}
chezmoi apply 시 자동 주입 → 새 머신에 평문 .env 생성.
5. Bitwarden — 무료 대안
5.1 설치
# Mac
brew install --cask bitwarden bitwarden-cli
# Windows
winget install Bitwarden.Bitwarden
winget install Bitwarden.CLI5.2 로그인 + 세션
bw login email@example.com
# Master password 입력 → API Key 반환
# 세션 변수 export
export BW_SESSION="$(bw unlock --raw)"
# 또는 .zshrc에 함수로:
function bwl { export BW_SESSION="$(bw unlock --raw)"; }5.3 시크릿 가져오기
bw get item "Anthropic API"
bw get password "Anthropic API"
bw get notes "Some Long Note"JSON 출력이라 jq와 조합 좋다:
bw get item "GitHub" | jq -r '.login.password'5.4 약점
- SSH agent 미통합 (수동으로 키 vault에 저장하지만 자동 사용 안 됨)
- Git commit 서명 자동화 없음
- biometric 통합이 OS·앱 의존적 (1Password보다 매끄럽지 않음)
5.5 셀프 호스팅 (Vaultwarden)
# Mac/Linux docker
docker run -d \
--name vaultwarden \
-v ./vw-data:/data \
-p 8000:80 \
vaultwarden/server:latest홈 서버에 두고 bw config server http://your-server:8000 으로 전환. Bitwarden 클라이언트 그대로 사용 가능.
6. 양 머신 워크플로
Mac에서 추가한 시크릿이 Windows에서도 즉시 사용 가능 (양쪽 vault 동기화는 자동):
# Mac에서 새 키 추가
op item create --category="API Credential" \
--title="New Service" \
--vault="Private" \
credential="sk-..."
# Windows pwsh에서 즉시 사용
op item get "New Service" --fields credential.env.tmpl 자체는 Git/Syncthing으로 양 머신 공유 (값은 vault에만, 템플릿은 안전).
검증
op vault list또는bw list folders— 인증 동작ssh -T git@github.com— 1Password SSH agent로 인증, Touch ID 한 번git commit -S -m "test"→git log --show-signature→ "Good signature" 표시op run --env-file=.env.tmpl -- env | grep MY_KEY→ 실제 값 주입 확인- Windows에서 1Password CLI 로그인 후 같은 vault 접근 가능 확인
트러블슈팅
op CLI가 GUI와 연동 안 됨
- 데스크톱 → Settings → Developer → "Integrate with 1Password CLI" 체크 누락
- 데스크톱 앱이 실행 중이어야 함 (로그인된 상태)
- macOS: 시스템 환경설정 → 보안 → biometric 권한 부여
Bitwarden 세션 만료
기본 30분 idle 후 lock. bw unlock --raw 다시. .zshrc에 자동 unlock 함수 두지 말 것 — 마스터 패스워드가 환경에 남음.
SSH agent 두 개 (1Password vs ssh-agent)
~/.ssh/config에 명시:
Host github.com
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Windows는 환경변수 SSH_AUTH_SOCK 으로.
op run이 quoting 깨짐
op inject 사용 권장 (더 명확): op inject -i .env.tmpl -o .env.runtime && source .env.runtime. 단 평문 파일이 잠시 생성됨 — 끝나면 삭제.
가족/팀 vault 공유 시 권한 문제
1Password Business → vault별 권한. CLI는 어떤 vault에 접근 권한 있는지 op vault list로 확인. 권한 없으면 명령 실패.
참고
- mac/dotfiles — chezmoi + 1Password 통합
- multi-os/file-sync —
.env.tmpl같은 비밀이 아닌 파일은 Syncthing - 1Password CLI 공식
- Bitwarden CLI
- Vaultwarden (self-host)
변경 이력
- 2026-05-12: 첫 작성. 1Password vs Bitwarden 비교 + SSH 통합·Git 서명·env 자동 주입·양 머신 워크플로 + 트러블슈팅 5종.