2026년, launchd 아래 OpenClaw 게이트웨이 토큰—임대 ProxyMac Mac mini에서 SSH는 인증되는데 데몬이 token_missing_config를 반복할 때
OpenClaw를 Apple Silicon Mac mini에 올리고 홍콩·일본·한국·싱가포르·미국의 ProxyMac 호스트에서 운영하는 팀은 터미널에 베어러 토큰을 붙여 넣고 openclaw gateway status가 초록으로 바뀌는 것을 본 뒤 재부팅했다가—launchd가 게이트웨이를 계속 재시작하고 로그에 token_missing_config 또는「인증은 설정됐지만 토큰이 없다」가 찍히는 상황을 자주 겪습니다. 실패의 본질은 암호가 아니라 자격 증명의 위치에 대해 대화형 셸, ~/.openclaw/ 아래 JSON, launchd가 물려받는 환경 블록이 서로 어긋나 있다는 것입니다. 이 글은 (1) 그 드리프트의 멘탈 모델, (2) 네 줄짜리 일치 매트릭스, (3) PagerDuty 전에 권한 실수를 잡는 파일 시스템 확인, (4) 강화된 plist 패턴, (5) 아홉 단계 운영 런북을 제공하고 launchd와 SSH 환경, Keychain 시크릿 위생, 게이트웨이 재시작 복구, JSONL 진단으로 연결합니다.
- 증상 묶음: 수동 CLI 검사는 통과하지만 종료 코드 78급 재시작이 45~90초마다 반복된다.
- 숨은 발판: 게이트웨이는 사용자
runner인데 JSON은/Users/admin/에 있다—전형적인 멀티 계정 드리프트. - 텔레메트리 앵커: JSONL의
auth줄을 라벨 편집 후launchctl print gui/$(id -u)출력과 대조한다.
왜「분명 export 했는데」게이트웨이는 토큰을 잊는가
OpenClaw는 상류 문서대로 먼저 설정 파일에서 게이트웨이 인증을 해석하고 선택적 환경 덮어쓰기를 적용합니다. SSH 세션은 ~/.zprofile을 읽고 온보딩 중 export한 값을 물려받으며 대화형 UID가 소유한 파일을 문제 없이 읽습니다. LaunchAgent는 launchd에서 시작되어 명시적 EnvironmentVariables와 잘린 PATH만 상속하고 ~는 서비스 계정 홈으로 해석됩니다—다른 관리자로 JSON을 편집했더라도요. 이 사실들이 맞을 때까지 데몬은 클라우드 리전과 무관하게 루프합니다.
sudo -u svcaccount printenv OPENCLAW_GATEWAY_TOKEN가 비어 있는데 터미널에는 값이 보이면 환경 불일치가 증명된 것이며 토큰 자체 결함이 아닙니다.
삼방 패리티: 대화형 셸, 디스크의 JSON, LaunchAgent 환경
| 소스 | ~/.openclaw/openclaw.json 읽기 |
셸 export 표시 | 무인 게이트웨이 권장 |
|---|---|---|---|
| SSH 로그인 셸 | 예—서비스 사용자와 UID가 일치해야 함 | 예—dotfile 로드 후 | 디버깅만 |
ssh host command 비로그인 |
경우에 따라—셸 모드에 따름 | 종종 아니오 | 카나리아 테스트 |
| LaunchAgent plist | 예—작업을 실행하는 계정 홈에서 | plist 키만 | 프로덕션 기준선 |
| plist가 실행하는 래퍼 | 예—스크립트가 권한을 올바르게 내리면 | exec 전 스크립트가 export한 것 | 고급 시크릿 주입 |
API를 의심하기 전에 JSON 위치·소유권·POSIX 권한 확인
LaunchAgent와 동일한 UID로 인코딩된 사용자로 ls -le ~/.openclaw/openclaw.json을 실행하세요. 권한은 600, 소유자는 해당 UID여야 합니다—테넌트용 mini에서 의도하지 않은 시스템 데몬으로 돌리지 않는 한 root 소유는 드뭅니다. 여러 엔지니어가 sudo tee로 건드린 뒤 게이트웨이 사용자에게는 거부되는 ACL 조각이 남아 관리자 대화 읽기만 성공할 수 있습니다. launchctl print gui/$UID(도메인은 환경에 맞게 gui와 user 선택)과 대조해 실제로 OpenClaw를 감독하는 plist 라벨을 확인하세요.
디스크 압박으로 설정 루트를 옮겼다면—디스크 로테이션 글 참조—JSON 안의 상대 경로가 데몬 작업 디렉터리에서 여전히 해석되는지 다시 확인하세요.
plist 패턴: EnvironmentVariables와 래퍼 exec
OPENCLAW_LOG_LEVEL=debug 같은 짧은 비밀이 아닌 플래그는 EnvironmentVariables에 직접 선언합니다. 베어러 토큰은 XML에 긴 문자열을 붙여 넣기보다 파일 참조나 Keychain 로드를 하는 작은 래퍼를 시크릿 가이드에 맞춰 쓰는 편이 안전합니다. 래퍼는 /usr/local/libexec/openclaw/ 또는 잠근 ~/svc/bin에 두고 분기마다 소유권을 검토하세요.
launchctl kickstart -k gui/$(id -u)/your.label를 한 번만—연속 실행은 작업 트랜잭션이 겹쳐 구조화 로그 타임라인을 읽기 어렵게 만듭니다.
HK / JP / KR / SG / US mini에서 토큰 루프를 멈추는 아홉 단계
- CI 훅 동결—사람이 깨끗한 한 번의 부팅 사이클을 잡을 때까지 게이트웨이 자동 재시작 중지.
- UID/GID 기록—LaunchAgent 세션 안의
id와launchctl print user/$(id -u)도메인. - 설정 diff: 설정 버전 관리 Git 백업과
diff ~/.openclaw/openclaw.json. - JSON 구문:
python3 -m json.tool또는jq .로 긴급 편집의 trailing comma 검출. - 환경 비교: SSH의
env | sort와launchctl print의 EnvironmentVariables 절. - PATH 정렬:
openclaw가ProgramArguments절대 경로로 해석되도록 PATH 글에 맞춤. - 깨끗한 재시작: 복구 순서에 따라 kickstart—무작정 bootout 반복은 피함.
- JSONL tail: 인바운드를 되돌리기 전에
authenticated=true에 해당하는 줄 확인. - 문서화: 티켓에 마스킹된 발췌와 plist 체크섬을 첨부.
FAQ
테넌트 간에 토큰을 공유해도 되나요? 벤더 대시보드가 허용하면 리전마다 다른 자격 증명을—한 대 mini를 돌릴 때 폭발 반경을 줄입니다.
새 mini로 옮기면 토큰이 깨지나요? 파일은 옮길 수 있지만 발급 쪽 세션은 별개—호스트 정체성이 바뀌면 명시적 로테이션을 계획하세요.
인바운드 웹훅은 어디에 두나요? 인증이 안정된 뒤 HTTP 게이트웨이 패턴으로 진입점을 배선해 부분 설정을 재시도가 증폭하지 않게 합니다.
결정적인 홈 디렉터리가 ProxyMac 테넌트에 도움이 되는 이유
임대 Mac mini M4를 HK / JP / KR / SG / US에서 쓰면 설정 트리용 장수명 경로, 자동화 계정의 예측 가능한 UID, 상시 게이트웨이용 Apple Silicon 효율을 한 번에 얻습니다—리전마다 금속을 살 필요가 없습니다. 리전 비교는 요금, 운영 드릴은 도움말 센터, Keychain 프롬프트가 필요한 작업은 VNC로 리허설하세요.