팀은 점점 역할을 나눕니다. OpenClaw 게이트웨이는 전용 macOS 호스트—종종 빌린 클라우드 Mac mini—에서 돌고, 엔지니어는 노트북이나 CI에서 openclaw를 호출합니다. SSH 포트 포워딩은 서비스 포트를 인터넷에 올리지 않고 간격을 메웁니다. 로컬 CLI는 127.0.0.1에 말을 걸고 OpenSSH가 그 소켓을 원격 루프백의 데몬에 매핑합니다. 여기서는 터널 패턴, 지연 예산, 헬스 프로브, macOS 개인 정보 보호 프롬프트와의 교차점을 정리합니다. 게이트웨이 온보딩과 TCC를 함께 읽고, 게이트웨이 헬스 모니터링으로 사람보다 먼저 합성 검사가 실패하도록 하세요.
포트를 열기보다 터널을 쓰는 이유
0.0.0.0 바인딩은 포트 스캔과 잘못된 방화벽 규칙을 부릅니다. 루프백과 SSH는 기존 키 기반 인증, sshd에서 물려받는 속도 제한, 규정 준수용 점프 호스트를 재사용합니다. WebSocket이 많은 게이트웨이라면 로드밸런서 유휴 타임아웃이 터널을 조용히 끊지 않는지 확인하세요. 대부분의 실패는 CLI에 “이상한 끊김”으로 보입니다.
CI 파이프라인은 비밀을 러너 환경에 가둘 수 있습니다. 수명 짧은 SSH 키를 주입하고, 터널 단계를 거친 뒤 openclaw doctor를 실행하고 마지막에 모두 폐기합니다. Runbook 맨 아래에 정확한 원격 포트를 적어 업그레이드 후 18789와 사용자 지정 값을 헷갈리지 않게 하세요.
Tailscale이나 ZeroTier가 허용되면 SSH를 생략할 수 있지만 그때도 누가 게이트웨이 IP에 닿는지 제한해야 합니다. SIEM에 이미 있는 SSH 감사 로그를 쓰는 장점은 터널이 큽니다.
SSH 로컬 포워드 예시
게이트웨이가 원격 Mac의 127.0.0.1:18789에서 듣는다고 가정합니다. 노트북에서:
ssh -N -L 18789:127.0.0.1:18789 user@cloud-mac.example
이어서 OPENCLAW_GATEWAY_URL(버전에 맞는 플래그)를 ws://127.0.0.1:18789로 둡니다. 밤샘 작업에는 -o ServerAliveInterval=30을 추가해 NAT가 긴 포워드를 가만히 끊지 않게 합니다.
Windows·Linux 개발자도 같은 포워드를 씁니다. 핵심은 터널 안에서도 WebSocket 업그레이드 헤더가 일관되는 것입니다. 회사 프록시가 WebSocket을 깨면 ProxyCommand로 bastion을 먼저 빠져나온 뒤 Mac에 접속하세요. 위키에는 전체 명령줄을 붙여넣고 조각만 공유하지 마십시오.
클라이언트 쪽 systemd 사용자 유닛이나 macOS LaunchAgent로 터널을 긴 작업 동안 유지하고, 지수 백오프가 있는 autossh류로 sshd를 두드리지 않는 재연결을 로그에 남깁니다. 재연결 로그에 게이트웨이 버전 문자열을 포함하면 지원이 릴리스와 상관관계를 잡기 쉽습니다.
지연과 SLO 표
| 경로 | 전형적 p95 RTT | 운영 메모 |
|---|---|---|
| 같은 메트로 클라우드 리전 | 20~60ms | 대부분의 CLI 상호작용은 거의 네이티브처럼 느껴짐. |
| 리전 간 SSH | 120~220ms | 도구 호출 타임아웃을 넓혀야 할 수 있음. |
| 호텔 Wi‑Fi+VPN | 250ms 이상 | 에이전트 재시도를 예상하고 하트비트 창을 넓힘. |
헬스 모니터링 글의 합성 프로브와 맞추고 p95가 250ms를 5분 넘기면 Slack이 묻히기 전에 페이징하세요. LLM 공급자로의 토큰 스트리밍은 또 다른 지연 층을 얹습니다. 대시보드에 게이트웨이 ping과 모델 엔드포인트를 함께 올려 SSH를 쫓다가 실제로는 API 라우팅이 막힌 오진을 줄입니다.
부하 테스트는 Linux 점프 호스트에 tc netem으로 인공 지연을 얹어 플러그인에 숨은 2초 sleep을 찾아냅니다. 정적 마케팅 팀은 잘 안 하지만 에이전트 팀은 할 가치가 있습니다.
임대 mini에서의 운영
임대 Mac mini는 회사 노트보다 디스크를 더 자주 재초기화합니다. 업그레이드 전 스냅샷, ~/.openclaw보내기, LaunchAgent plist의 버전 관리를 습관화하세요. 두 사람이 한 대를 쓰면 SSH 키와 터널 포트에 네임스페이스를 붙여 오후 데모와 야간 CI가 충돌하지 않게 합니다.
주당 30~45분의 대화형 VNC를 확보해 SSH만으로는 나오지 않는 TCC 대화상자를 처리합니다—특히 macOS 소수 업데이트 직후. 짧은 버스트 임대는 하루 약 $16.9로, 손쉬운 사용 권한이 조용히 사라져 데모를 놓치는 손실보다 저렴한 경우가 많습니다. API 키 순환은 호스트 전체 재부팅 없이 게이트웨이 작업만 재시작하면 되고, 일부 공급자는 나가는 WebSocket을 막으니 이그레스 테스트를 짝으로 돌립니다.
가시성: 클라이언트 쪽 launchd/systemd로 SSH를 감싼다면 터널 가동 메트릭을 보내고 재연결 루프만 알람으로 올립니다. 재해 복구: 상태 디렉터리를 클라이언트 측 암호화 tarball로 밤마다 만들고 분기마다 일회용 mini에서 복원 연습을 합니다. 버전 스큐는 npm 전역 CLI가 올라가고 LaunchAgent가 게이트웨이 바이너리를 고정하는 패턴이 흔합니다. 터널 뒤에서 openclaw doctor로 맞출 때까지 반복하고 WebSocket 종료 코드 미스터리를 줄입니다.
비밀 위생: 점프 박스 셸 기록에 공급자 키를 export하지 말고 수명 짧은 환경 주입이나 볼트 사이드카를 씁니다. 게이트웨이가 평문 HTTP라면 SSH가 애플리케이션 페이로드를 암호화해도 부족할 수 있으니 TLS 종료를 올바르게 두거나 stunnel을 검토합니다. 온콜 교육에서는 “터널 다운”과 “게이트웨이 비정상”을 분리해 TCP가 즉시 죽는 전자와 소켓은 살아 있으나 헬스가 빨간 후자에 서로 다른 런북을 매칭합니다.
문서 산출물로 노트북→bastion→클라우드 mini→게이트웨이→모델 공급자 한 장 다이어그램에 포트 번호와 TLS 경계를 색으로 표시하세요. 신입이 첫날 같은 터널 명령을 재현하면 성공입니다. 릴리스 전 체크리스트: 일회용 API 키로 터널 경유 CLI를 한 바퀴 돌리고 스트리밍 토큰이 도착하는지, Sonoma와 Sequoia에서 파일 시스템 샌드박스 경로가 풀리는지 확인하며 감사용으로 성공 핸드셰이크 스크린샷을 릴리스 노트에 첨부합니다.
FAQ
SSH 터널을 쓸 때 게이트웨이는 0.0.0.0에서 리슨해야 하나요?
원격 측은 루프백을 권장하고 SSH로 전달하세요. 정책이 명시하지 않는 한 공용 인터페이스에 포트를 내지 마십시오.
터널에서 허용되는 지연은 얼마나 되나요?
대화형 사용은 p95로 대략 150~250ms를 넘기면 체감이 나빠지기 쉽습니다. 프로덕션과 같은 프로브로 측정하세요.
클라우드 Mac에서도 macOS TCC가 적용되나요?
예. 게이트웨이가 도는 머신에서 프롬프트를 완료하고, 많은 경우 VNC와 온보딩 가이드가 필요합니다.
Mac mini(Apple 실리콘)는 항상 켜 두는 OpenClaw 게이트웨이에 자연스럽게 맞는 조용하고 전력 효율적인 상자입니다. MacHTML은 SSH/VNC가 포함된 베어메탈 임대로 하드웨어 구매 없이 터널과 게이트웨이 구성을 리허설할 수 있습니다.
클라우드 Mac mini의 OpenClaw 게이트웨이
Mac mini 시간을 빌려 SSH 터널, 헬스 프로브, doctor 진단을 실제 macOS에서 연습하세요.