リモートアクセス
このリポジトリは、専用ホスト(デスクトップ/サーバー)で単一のGateway(マスター)を実行し続け、クライアントをそれに接続することで、「SSH経由のリモート」をサポートします。
- オペレーター(あなた / macOSアプリ)向け: SSHトンネリングはユニバーサルなフォールバックです。
- ノード(iOS/Androidおよび将来のデバイス)向け: Gateway WebSocket に接続します(LAN/テールネットまたは必要に応じてSSHトンネル経由)。
核となる考え方
- Gateway WebSocketは、設定されたポート(デフォルトは18789)でループバックにバインドされます。
- リモート使用のためには、そのループバックポートをSSH経由で転送します(またはテールネット/VPNを使用し、トンネリングを減らします)。
一般的なVPN/テールネット設定(エージェントが存在する場所)
Gatewayホストを「エージェントが存在する場所」と考えてください。それはセッション、認証プロファイル、チャネル、状態を所有します。あなたのラップトップ/デスクトップ(およびノード)はそのホストに接続します。
1) テールネット内の常時稼働Gateway(VPSまたはホームサーバー)
永続的なホストでGatewayを実行し、TailscaleまたはSSH経由で到達します。
- 最適なUX:
gateway.bind: "loopback"を維持し、Control UIには Tailscale Serve を使用します。 - フォールバック: ループバックを維持し、アクセスが必要なマシンからSSHトンネルを使用します。
- 例: exe.dev(簡単なVM)または Hetzner(本番用VPS)。
これは、ラップトップが頻繁にスリープするが、エージェントを常時稼働させたい場合に理想的です。
2) ホームデスクトップがGatewayを実行、ラップトップはリモートコントロール
ラップトップはエージェントを実行しません。リモートで接続します:
- macOSアプリの Remote over SSH モードを使用します(設定 → 一般 → "OpenClaw runs")。
- アプリがトンネルを開き管理するため、WebChat + ヘルスチェックが「そのまま動作します」。
手順書: macOSリモートアクセス。
3) ラップトップがGatewayを実行、他のマシンからリモートアクセス
Gatewayをローカルに維持し、安全に公開します:
- 他のマシンからラップトップへのSSHトンネル、または
- Control UIをTailscale Serveし、Gatewayをループバック専用に維持します。
コマンドフロー(何がどこで実行されるか)
1つのゲートウェイサービスが状態 + チャネルを所有します。ノードは周辺機器です。フローの例(Telegram → ノード):
- Telegramメッセージが Gateway に到着します。
- Gatewayは エージェント を実行し、ノードツールを呼び出すかどうかを決定します。
- GatewayはGateway WebSocket経由で ノード を呼び出します(
node.*RPC)。 - ノードが結果を返します。GatewayはTelegramに返信します。
注意:
- ノードはゲートウェイサービスを実行しません。 ホストごとに1つのゲートウェイのみを実行するべきです(意図的に分離されたプロファイルを実行する場合を除く。 複数のゲートウェイ を参照)。
- macOSアプリの「ノードモード」は、Gateway WebSocketを介した単なるノードクライアントです。
SSHトンネル(CLI + ツール)
リモートGateway WSへのローカルトンネルを作成します:
ssh -N -L 18789:127.0.0.1:18789 user@host
トンネルが確立されると:
openclaw healthおよびopenclaw status --deepは、ws://127.0.0.1:18789を介してリモートゲートウェイに到達します。openclaw gateway {status,health,send,agent,call}も、必要に応じて--urlを介して転送されたURLをターゲットにできます。
注: 18789 を設定した gateway.port(または --port/OPENCLAW_GATEWAY_PORT)に置き換えてください。注: --url を渡す場合、CLIは設定または環境認証情報にフォールバックしません。--token または --password を明示的に含めてください。明示的な認証情報がない場合はエラーになります。
CLIリモートデフォルト
リモートターゲットを永続化して、CLIコマンドがデフォルトでそれを使用するようにできます:
{
gateway: {
mode: "remote",
remote: {
url: "ws://127.0.0.1:18789",
token: "your-token",
},
},
}
ゲートウェイがループバック専用の場合、URLを ws://127.0.0.1:18789 に維持し、最初にSSHトンネルを開きます。
認証情報の優先順位
Gateway呼び出し/プローブの認証情報解決は、現在、1つの共有契約に従います:
- 明示的な認証情報(
--token、--password、またはツールのgatewayToken)が常に優先されます。 - ローカルモードのデフォルト:
- token:
OPENCLAW_GATEWAY_TOKEN->gateway.auth.token->gateway.remote.token - password:
OPENCLAW_GATEWAY_PASSWORD->gateway.auth.password->gateway.remote.password
- token:
- リモートモードのデフォルト:
- token:
gateway.remote.token->OPENCLAW_GATEWAY_TOKEN->gateway.auth.token - password:
OPENCLAW_GATEWAY_PASSWORD->gateway.remote.password->gateway.auth.password
- token:
- リモートプローブ/ステータスのトークンチェックはデフォルトで厳密です: リモートモードをターゲットにする場合、
gateway.remote.tokenのみを使用します(ローカルトークンのフォールバックなし)。 - レガシーな
CLAWDBOT_GATEWAY_*環境変数は、互換性呼び出しパスでのみ使用されます。プローブ/ステータス/認証解決ではOPENCLAW_GATEWAY_*のみを使用します。
SSH経由のチャットUI
WebChatはもはや別のHTTPポートを使用しません。SwiftUIチャットUIはGateway WebSocketに直接接続します。
- SSH経由で
18789を転送します(上記参照)。その後、クライアントをws://127.0.0.1:18789に接続します。 - macOSでは、アプリの「Remote over SSH」モードを優先します。これはトンネルを自動的に管理します。
macOSアプリ「Remote over SSH」
macOSメニューバーアプリは、同じセットアップをエンドツーエンドで駆動できます(リモートステータスチェック、WebChat、およびVoice Wake転送)。手順書: macOSリモートアクセス。
セキュリティルール(リモート/VPN)
短いバージョン: バインドが必要だと確信していない限り、Gatewayをループバック専用に維持してください。
- ループバック + SSH/Tailscale Serve が最も安全なデフォルトです(公開されません)。
- プレーンテキスト
ws://はデフォルトでループバック専用です。信頼されたプライベートネットワークでは、ブレイクグラスとしてクライアントプロセスでOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1を設定します。 - 非ループバックバインド(
lan/tailnet/custom、またはループバックが利用できない場合のauto)は、認証トークン/パスワードを使用する必要があります。 gateway.remote.token/.passwordはクライアント認証情報ソースです。これらだけではサーバー認証を構成しません。- ローカル呼び出しパスは、
gateway.auth.*が設定されていない場合、gateway.remote.*をフォールバックとして使用できます。 gateway.remote.tlsFingerprintは、wss://を使用する場合にリモートTLS証明書をピン留めします。- Tailscale Serve は、
gateway.auth.allowTailscale: trueの場合、IDヘッダーを介してControl UI/WebSocketトラフィックを認証できます。HTTP APIエンドポイントは依然としてトークン/パスワード認証を必要とします。このトークンレスフローは、ゲートウェイホストが信頼されていることを前提としています。どこでもトークン/パスワードが必要な場合は、これをfalseに設定してください。 - ブラウザコントロールはオペレーターアクセスと同様に扱います: テールネット専用 + 意図的なノードペアリング。
詳細: セキュリティ。