Chạy OpenClaw.app với Remote Gateway

OpenClaw.app sử dụng SSH tunneling để kết nối với remote gateway. Hướng dẫn này sẽ chỉ các bạn cách thiết lập.

Tổng quan

┌─────────────────────────────────────────────────────────────┐
│                        Client Machine                          │
│                                                              │
│  OpenClaw.app ──► ws://127.0.0.1:18789 (local port)           │
│                     │                                        │
│                     ▼                                        │
│  SSH Tunnel ────────────────────────────────────────────────│
│                     │                                        │
└─────────────────────┼──────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                         Remote Machine                        │
│                                                              │
│  Gateway WebSocket ──► ws://127.0.0.1:18789 ──►              │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Thiết lập nhanh

Bước 1: Thêm SSH Config

Mở file ~/.ssh/config và thêm vào:

Host remote-gateway
    HostName <REMOTE_IP>          # ví dụ: 172.27.187.184
    User <REMOTE_USER>            # ví dụ: jefferson
    LocalForward 18789 127.0.0.1:18789
    IdentityFile ~/.ssh/id_rsa

Thay <REMOTE_IP><REMOTE_USER> bằng giá trị của các bạn.

Bước 2: Copy SSH Key

Copy public key của các bạn sang remote machine (nhập password một lần):

ssh-copy-id -i ~/.ssh/id_rsa <REMOTE_USER>@<REMOTE_IP>

Bước 3: Đặt Gateway Token

launchctl setenv OPENCLAW_GATEWAY_TOKEN "<your-token>"

Bước 4: Khởi động SSH Tunnel

ssh -N remote-gateway &

Bước 5: Khởi động lại OpenClaw.app

# Thoát OpenClaw.app (⌘Q), sau đó mở lại:
open /path/to/OpenClaw.app

Ứng dụng giờ sẽ kết nối với remote gateway thông qua SSH tunnel.


Tự động khởi động Tunnel khi đăng nhập

Để SSH tunnel tự động khởi động khi các bạn đăng nhập, hãy tạo một Launch Agent.

Tạo file PLIST

Lưu nội dung này vào ~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>bot.molt.ssh-tunnel</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/ssh</string>
        <string>-N</string>
        <string>remote-gateway</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Load Launch Agent

launchctl bootstrap gui/$UID ~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist

Tunnel giờ sẽ:

  • Tự động khởi động khi các bạn đăng nhập
  • Tự động khởi động lại nếu bị crash
  • Chạy ngầm ở background

Lưu ý: xóa bỏ LaunchAgent com.openclaw.ssh-tunnel cũ nếu còn tồn tại.


Troubleshooting

Kiểm tra tunnel có đang chạy không:

ps aux | grep "ssh -N remote-gateway" | grep -v grep
lsof -i :18789

Khởi động lại tunnel:

launchctl kickstart -k gui/$UID/bot.molt.ssh-tunnel

Dừng tunnel:

launchctl bootout gui/$UID/bot.molt.ssh-tunnel

Cách hoạt động

ComponentChức năng
LocalForward 18789 127.0.0.1:18789Chuyển tiếp local port 18789 sang remote port 18789
ssh -NSSH không thực thi lệnh từ xa (chỉ chuyển tiếp port)
KeepAliveTự động khởi động lại tunnel nếu bị crash
RunAtLoadKhởi động tunnel khi agent được load

OpenClaw.app kết nối tới ws://127.0.0.1:18789 trên client machine của các bạn. SSH tunnel chuyển tiếp kết nối đó tới port 18789 trên remote machine nơi Gateway đang chạy.