원격 OpenClaw (macOS ⇄ 원격 호스트)
이 흐름을 사용하면 macOS app이 다른 호스트(데스크톱/서버)에서 실행 중인 OpenClaw gateway를 완전히 원격 제어할 수 있습니다. 이것이 앱의 Remote over SSH(remote run) 기능입니다. health checks, Voice Wake forwarding, Web Chat까지 모두 _Settings → General_의 동일한 remote SSH config를 재사용합니다.모드
- 로컬(이 Mac): 모든 것이 이 노트북에서 실행됩니다. SSH는 사용하지 않습니다.
- Remote over SSH (기본값): OpenClaw commands는 원격 호스트에서 실행됩니다. mac app은
-o BatchMode, 선택한 identity/key, 그리고 local port-forward를 포함한 SSH 연결을 엽니다. - Remote direct (ws/wss): SSH tunnel이 없습니다. mac app이 gateway URL에 직접 연결합니다. 예를 들어 Tailscale Serve나 공개 HTTPS reverse proxy를 사용할 수 있습니다.
원격 전송 방식
원격 모드는 두 가지 전송 방식을 지원합니다.- SSH tunnel(기본값):
ssh -N -L ...로 gateway port를 localhost에 포워딩합니다. tunnel이 loopback이므로 gateway는 node IP를127.0.0.1로 보게 됩니다. - Direct (ws/wss): gateway URL에 직접 연결합니다. gateway는 실제 client IP를 봅니다.
원격 호스트의 사전 요구 사항
- Node + pnpm을 설치하고 OpenClaw CLI를 빌드/설치합니다 (
pnpm install && pnpm build && pnpm link --global). - non-interactive shells에서도
openclaw가 PATH에 있도록 보장합니다. 필요하면/usr/local/bin또는/opt/homebrew/bin에 symlink하세요. - key auth로 SSH를 열어 둡니다. LAN 밖에서도 안정적으로 도달할 수 있도록 Tailscale IP 사용을 권장합니다.
macOS 앱 설정
- Settings → General 을 엽니다.
- OpenClaw runs 아래에서 Remote over SSH를 선택하고 다음을 설정합니다.
- Transport: SSH tunnel 또는 Direct (ws/wss)
- SSH target:
user@host(선택적으로:port포함)- gateway가 같은 LAN에 있고 Bonjour를 광고한다면 discovered list에서 선택해 이 필드를 자동으로 채울 수 있습니다.
- Gateway URL (Direct 전용):
wss://gateway.example.ts.net(ws://...는 local/LAN용) - Identity file (advanced): key file 경로
- Project root (advanced): commands에 사용하는 remote checkout path
- CLI path (advanced): 실행 가능한
openclawentrypoint/binary의 선택적 path (advertised되면 자동으로 채워짐)
- Test remote를 누릅니다. 성공하면 원격
openclaw status --json이 올바르게 실행된다는 뜻입니다. 실패는 대개 PATH/CLI 문제를 의미하며, exit 127은 원격에서 CLI를 찾지 못했다는 뜻입니다. - 이제 상태 확인과 Web Chat도 이 SSH 터널을 통해 자동으로 실행됩니다.
Web Chat
- SSH tunnel: Web Chat은 포워딩된 WebSocket control port(기본값 18789)를 통해 gateway에 연결합니다.
- Direct (ws/wss): Web Chat은 구성된 gateway URL에 바로 연결합니다.
- 별도의 WebChat HTTP server는 더 이상 없습니다.
권한
- 원격 호스트에는 로컬과 동일한 TCC approvals(Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications)이 필요합니다. 해당 머신에서 onboarding을 실행해 한 번 승인해 두세요.
- nodes는
node.list/node.describe를 통해 자신의 permission state를 광고하므로, agents가 사용 가능한 항목을 알 수 있습니다.
보안 참고 사항
- 원격 호스트에서는 loopback bind를 선호하고 SSH 또는 Tailscale로 연결하세요.
- SSH tunneling은 strict host-key checking을 사용합니다. 먼저 host key를 신뢰해
~/.ssh/known_hosts에 존재하도록 하세요. - Gateway를 non-loopback interface에 bind한다면 token/password auth를 요구하세요.
- Security 및 Tailscale도 참고하세요.
WhatsApp login flow (원격)
- 원격 호스트에서
openclaw channels login --verbose를 실행합니다. 휴대폰의 WhatsApp으로 QR 코드를 스캔하세요. - auth가 만료되면 그 호스트에서 login 명령을 다시 실행하세요. health check가 링크 문제를 표시합니다.
문제 해결
- exit 127 / not found: non-login shell의 PATH에
openclaw가 없습니다./etc/paths, shell rc, 또는/usr/local/bin//opt/homebrew/binsymlink에 추가하세요. - Health probe failed: SSH reachability, PATH, 그리고 Baileys가 로그인되어 있는지 (
openclaw status --json) 확인하세요. - Web Chat stuck: gateway가 원격 호스트에서 실행 중인지, 포워딩된 port가 gateway WS port와 일치하는지 확인하세요. UI는 healthy WS connection이 필요합니다.
- Node IP shows 127.0.0.1: SSH tunnel에서는 정상입니다. gateway가 실제 client IP를 보게 하려면 Transport를 **Direct (ws/wss)**로 바꾸세요.
- Voice Wake: remote mode에서는 trigger phrases가 자동으로 전달되며 별도의 forwarder는 필요하지 않습니다.
알림 소리
알림별로 scripts에서openclaw와 node.invoke를 사용해 소리를 선택할 수 있습니다. 예: