03.
— Section 3
Credentials
macOS Keychain
비밀번호가 디스크에 저장되지 않습니다.
jmapcli는 디스크에 어떠한 비밀도 보관하지 않습니다. 비밀번호(또는 bearer 토큰)는 macOS 로그인 Keychain에 저장되며, 계정 파일 — ~/.config/jmapcli/config.json, 권한 0600 — 에는 서버 URL, 사용자 이름, 기본 플래그만 저장됩니다. 터미널에서 Keychain을 처음 사용하시나요? 전체 워크플로는 내장된 security 명령 세 가지로 완성됩니다.
1 · 비밀 저장 — 그리고 다시 읽기. macOS가 값을 입력하라는 프롬프트를 표시하므로, 비밀은 커맨드 라인에 입력되거나 화면에 표시되거나 셸 히스토리에 기록되지 않습니다.
# store it — you’re prompted for the secret, nothing echoes
$ security add-generic-password -U -s jmap-password -a you@example.com -l "Boogie JMAP password" -w
# read it back at any time
$ security find-generic-password -s jmap-password -a you@example.com -w
# remove it
$ security delete-generic-password -s jmap-password -a you@example.com
- -s
- service — jmapcli가 조회하는 이름: 비밀번호의 경우 jmap-password, bearer 토큰(예: Fastmail)의 경우 jmap-token; 사용하는 항목 하나만 설정하세요.
- -a
- account — 이메일 주소(jmapcli에 입력하는 사용자 이름과 동일).
- -l
- label — Keychain 접근 앱에서 표시될 이름; -U는 기존 항목을 제자리에서 업데이트합니다.
- -w
- 값 없이 — 비밀 입력 프롬프트를 표시합니다. 이 부분이 비밀을 ~/.zsh_history 및 프로세스 목록에서 보호합니다.
2 · jmapcli에 서버를 등록합니다. 계정을 한 번만 등록하면 됩니다. 비밀은 방금 저장한 Keychain 항목에서 직접 가져오므로 커맨드 라인에 나타나지 않습니다.
$ jmapcli login --url https://mail.example.com --username you@example.com \
--password "$(security find-generic-password -s jmap-password -a you@example.com -w)"
# token auth: swap --password for --token (and store under jmap-token above)
$ jmapcli list # from here on, every command reads the Keychain for you
3.1
히스토리, 로그 — 또는 AI의 컨텍스트 어디에도 없음
비밀이 Keychain에 저장되면 일상적인 명령(list, send, draft, sync)은 비밀번호를 전혀 사용하지 않으므로, ~/.zsh_history, 프로세스 목록, CI 로그 어디에도 캡처될 수 없습니다. 바로 이것이 jmapcli를 터미널 AI 도구에서 안전하게 사용할 수 있는 이유입니다 — 에이전트는 JMAP 클라이언트를 받을 뿐, 비밀은 절대 전달되지 않습니다.
— zsh
CI · agents
3.2
비밀번호 교체 또는 로그아웃
비밀번호를 변경했나요? security add-generic-password … -w 명령을 다시 실행하세요 — -U가 제자리에서 덮어씁니다. 계정을 제거하려면 jmapcli logout을 실행하면 설정 항목과 Keychain 비밀이 한 번에 삭제됩니다(--all은 모든 계정을 초기화합니다).
— rotate
logout
3.3
Mac별 독립 저장 — 의도된 설계
로그인 Keychain은 iCloud를 통해 동기화되지 않습니다 — 이는 의도된 경계로, 비밀번호가 입력한 Mac을 벗어나지 않도록 합니다. Mac마다 security 단계를 한 번씩 반복하세요; config.json은 비밀을 포함하지 않으므로 동기화된 홈 폴더에서 사용할 수 있습니다.
— per
machine