OpenClawSkills
GitHub
Gateway / Operations • 5分で読める

リモートアクセス

SSH トンネル(Gateway WS)と tailnet を使ったリモートアクセス。

このリポジトリは、専用ホスト(デスクトップ/サーバー)で単一のゲートウェイ(プライマリサーバー)を実行し、クライアントがそれに接続することで、「SSH 経由のリモート」をサポートしています。

- オペレーター(あなた/macOS アプリ)の場合:SSH トンネリングは普遍的なフォールバックです。

- ノード(iOS/Android および将来のデバイス)の場合:ゲートウェイ WebSocket に接続します(必要に応じて LAN/tailnet または SSH トンネルを使用)。

Tutorial.step

コアアイデア

- ゲートウェイ WebSocket は、設定したポート(デフォルト 18789)の loopback にバインドされます。

- リモート使用の場合、SSH 経由でそのループバックポートを転送できます(または tailnet/VPN を使用してトンネルを減らします)。

Tutorial.step

一般的な VPN/tailnet セットアップ(エージェントが存在する場所)

ゲートウェイホストを「エージェントが存在する場所」と考えてください。セッション、認証プロファイル、チャネル、状態があります。

ラップトップ/デスクトップ(およびノード)はそのホストに接続します。

#

Tutorial.step

1) tailnet 内の常時オンラインのゲートウェイ(VPS またはホームサーバー)

永続的なホストでゲートウェイを実行し、Tailscale または SSH 経由でアクセスします。

- ''最高の UX:'' ''gateway.bind: "loopback"'' を保持し、コントロール UI に ''Tailscale Serve'' を使用します。

- フォールバック: アクセスが必要なマシンからのループバック + SSH トンネルを維持します。

- ''例:'' ''exe.dev''(シンプルな VM)または ''Hetzner''(本番 VPS)。

ラップトップが頻繁にスリープするが、エージェントを常にオンラインにしたい場合に最適です。

#

Tutorial.step

2) ホームデスクトップでゲートウェイを実行し、ラップトップからリモート制御

ラップトップはエージェントを実行しません。リモートで接続します:

- macOS アプリの SSH 経由のリモートモードを使用します(設定→一般→「OpenClaw が実行される場所」)。

- アプリはトンネルを開いて管理するため、WebChat + ヘルスチェックが「正常に動作」します。

ランブック:''macOS リモートアクセス''。

#

Tutorial.step

3) ラップトップでゲートウェイを実行し、他のマシンからリモートアクセス

ゲートウェイをローカルに保持しますが、安全に公開します:

- 他のマシンからラップトップへの SSH トンネル、または

- コントロール UI 用の Tailscale サーブとループバックのみのゲートウェイ。

ガイド:''Tailscale'' および ''ネットワーク概要''。

Tutorial.step

コマンドフロー(何がどこで実行されるか)

1 つのゲートウェイサービスが状態+チャネルを所有します。ノードは周辺機器です。

フローの例(Telegram → ノード):

- Telegram メッセージが ゲートウェイ に到着します。

- ゲートウェイは エージェント を実行し、ノードツールを呼び出すかどうかを決定します。

- ゲートウェイはゲートウェイ WebSocket (''node.*'' RPC) 経由で ''ノード'' を呼び出します。

- ノードが結果を返します。ゲートウェイが Telegram に返信します。

Note:

- ''ノードはゲートウェイサービスを実行しません。'' 意図的に分離されたプロファイルを実行しない限り、ホストごとに 1 つのゲートウェイのみです(''複数のゲートウェイ''を参照)。

- macOS アプリの「ノードモード」は、ゲートウェイ WebSocket 上のノードクライアントに過ぎません。

Tutorial.step

SSH トンネル(CLI + ツール)

リモートゲートウェイ WS へのローカルトンネルを作成します:

Bash
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'')に置き換えます。

Tutorial.step

CLI リモートデフォルト

CLI コマンドがデフォルトで使用するようにリモートターゲットを永続化できます:

Json5
{
  gateway: {
    mode: "remote",
    remote: {
      url: "ws://127.0.0.1:18789",
      token: "your-token",
    },
  },
}

ゲートウェイがループバックのみの場合、URL を ''ws://127.0.0.1:18789'' に保持し、最初に SSH トンネルを開きます。

Tutorial.step

SSH 経由のチャット UI

WebChat は別の HTTP ポートを使用しなくなりました。SwiftUI チャット UI はゲートウェイ WebSocket に直接接続します。

- SSH 経由で ''18789'' を転送します(上記参照)、次にクライアントを ''ws://127.0.0.1:18789'' に接続します。

- macOS では、トンネルを自動的に管理するアプリの「SSH 経由のリモート」モードを優先します。

Tutorial.step

macOS アプリ「SSH 経由のリモート」

macOS メニューバーアプリは、同じセットアップをエンドツーエンドで駆動できます(リモートヘルスチェック、WebChat、音声ウェイク転送)。

ランブック:''macOS リモートアクセス''。

Tutorial.step

セキュリティルール(リモート/VPN)

簡潔なバージョン:バインドが必要な場合を除き、ゲートウェイをループバックのみに保持します。

- Loopback + SSH/Tailscale Serve が最も安全なデフォルトです(公開露出なし)。

- ''非ループバックバインディング''(ループバックが利用できない場合の ''lan''/''tailnet''/''custom'' または ''auto'')は、認証トークン/パスワードを使用する必要があります。

- ''gateway.remote.token'' はリモート CLI 呼び出し''のみ''用です — ローカル認証を有効にしません。

- ''wss://'' を使用する場合、''gateway.remote.tlsFingerprint'' がリモート TLS 証明書をピンします。

- ''Tailscale Serve'' は、''gateway.auth.allowTailscale: true'' の場合、ID ヘッダー経由で認証できます。

トークン/パスワード認証が必要な場合は、''false'' に設定します。

- ブラウザ制御をオペレーターアクセスとして扱います:tailnet のみ + 意図的なノードペアリング。

詳細:''セキュリティ''。