Skip to main content
OpenClaw は、専用のホスト(デスクトップやサーバー)で動作する単一の「マスター」ゲートウェイに対し、外部からクライアントを接続する「SSH 経由のリモート」構成をサポートしています。
  • オペレーター (あなた自身 / macOS アプリ): SSH トンネルが万能なフォールバック手段となります。
  • ノード (iOS/Android および将来のデバイス): ゲートウェイの WebSocket に接続します(ネットワーク環境に応じて LAN、Tailnet、または SSH トンネルを使用)。

基本的な考え方

  • ゲートウェイの WebSocket は、構成されたポート(デフォルト 18789)の ループバック (127.0.0.1) インターフェースで待機します。
  • リモートで使用する場合は、そのループバックポートを SSH で転送するか、あるいは Tailnet/VPN を使用してトンネルを介さずに接続します。

一般的な VPN / Tailnet 構成(エージェントの所在)

ゲートウェイホスト を「エージェントが住んでいる場所」と考えてください。そこがセッション、認証プロファイル、チャネル、および状態データを所有します。手元のノート PC やモバイルノードは、そのホストへ接続しに行きます。

1) Tailnet 内の常時稼働ゲートウェイ (VPS または自宅サーバー)

永続的に稼働するホストでゲートウェイを実行し、Tailscale または SSH 経由でアクセスします。
  • 最高の操作感 (UX): gateway.bind: "loopback" を維持しつつ、コントロール UI には Tailscale Serve を使用します。
  • フォールバック: アクセスが必要なマシンからループバックへの SSH トンネルを併用します。
  • 構築例: exe.dev (手軽な VM) や Hetzner (本格的な VPS)。
これは、ノート PC を頻繁にスリープさせるが、エージェントは常に稼働させておきたい場合に最適です。

2) 自宅のデスクトップで実行し、外出先のノート PC から操作する

ノート PC 側ではエージェントを実行せず、リモートで接続します:
  • macOS アプリの Remote over SSH モードを使用します(Settings → General → “OpenClaw runs”)。
  • アプリがトンネルの開設と管理を自動で行うため、WebChat やヘルスチェックがそのまま機能します。
詳細手順: macOS リモートアクセス

3) ノート PC で実行し、他のマシンからリモートアクセスする

ゲートウェイはローカルで動かしつつ、安全に外部へ公開します:
  • 他のマシンからノート PC への SSH トンネルを張る。
  • あるいは Tailscale Serve でコントロール UI を公開し、ゲートウェイ本体はループバックのみに留める。
ガイド: Tailscale および Web の概要

コマンドのフロー (どこで何が動くか)

単一のゲートウェイサービスが状態とチャネルを所有し、各ノードは周辺機器(ペリフェラル)として動作します。 フローの例 (Telegram → ノード):
  • Telegram のメッセージが ゲートウェイ に到着。
  • ゲートウェイが エージェント を実行し、ノードツールの呼び出しが必要か判断。
  • ゲートウェイが WebSocket を介して ノード を呼び出し(node.* RPC)。
  • ノードが結果を返し、ゲートウェイが Telegram へ返信。
補足事項:
  • ノードはゲートウェイサービスを実行しません。 意図的に分離されたプロファイルを使用する場合を除き、1つのホストで実行するゲートウェイは1つだけにする必要があります(詳細は マルチゲートウェイ を参照)。
  • macOS アプリの「ノードモード」は、ゲートウェイ WebSocket を利用する単なるノードクライアントとして動作します。

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

リモートのゲートウェイ WebSocket へのローカルトンネルを作成します:
ssh -N -L 18789:127.0.0.1:18789 user@host
トンネルが開通した状態であれば:
  • openclaw healthopenclaw status --deep は、ws://127.0.0.1:18789 を通じてリモートゲートウェイへ到達できるようになります。
  • openclaw gateway {status,health,send,agent,call} 等のコマンドで --url フラグを使用して、転送された URL を明示的に指定することも可能です。
注意: ポート番号 18789 は、自身で構成した gateway.port(または --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 トンネルを開いておいてください。

認証情報の優先順位 (Contract)

ゲートウェイの認証情報(トークン/パスワード)の解決ルールは、API 呼び出し、Discord の実行承認監視、およびノード接続のすべてで共通です:
  • 明示的な指定: --token, --password フラグや、ツール設定の gatewayToken が常に最優先されます。
  • URL 上書き時の安全性:
    • CLI で --url を指定した場合、暗黙的な(構成ファイルや環境変数の)認証情報は再利用されません。
    • 環境変数 OPENCLAW_GATEWAY_URL による上書き時は、環境変数経由の認証情報 (OPENCLAW_GATEWAY_TOKEN / PASSWORD) のみが使用される可能性があります。
  • ローカルモード (Local mode) 時の優先順位:
    • トークン: OPENCLAW_GATEWAY_TOKENgateway.auth.tokengateway.remote.token
    • パスワード: OPENCLAW_GATEWAY_PASSWORDgateway.auth.passwordgateway.remote.password
  • リモートモード (Remote mode) 時の優先順位:
    • トークン: gateway.remote.tokenOPENCLAW_GATEWAY_TOKENgateway.auth.token
    • パスワード: gateway.remote.passwordOPENCLAW_GATEWAY_PASSWORDgateway.auth.password
  • リモート環境への probe/status 実行時のトークンチェックはデフォルトで厳格です。リモートモード指定時は gateway.remote.token のみが使用され、ローカルトークンへのフォールバックは行われません。
  • レガシーな CLAWDBOT_GATEWAY_* 環境変数は、互換性維持のためのパスでのみ使用されます。新しい認証解決ロジックでは OPENCLAW_GATEWAY_* のみが参照されます。

SSH 経由でのチャット UI 利用

WebChat は独立した HTTP ポートを使用しなくなりました。SwiftUI 製のチャット UI は直接ゲートウェイの WebSocket に接続します。
  • 18789 ポートを SSH で転送し、クライアントから ws://127.0.0.1:18789 に接続してください。
  • macOS では、トンネル管理を自動で行うアプリの “Remote over SSH” モードの利用を推奨します。

macOS アプリの “Remote over SSH”

macOS のメニューバーアプリは、このリモート構成(ステータス確認、WebChat、音声ウェイク転送)をエンドツーエンドで制御できます。 手順: macOS リモートアクセス

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

簡潔に言えば、必要性が確実でない限り、ゲートウェイはループバック(127.0.0.1)のみで待機させるのが最も安全です。
  • ループバック + SSH / Tailscale Serve が最も推奨される構成です(外部に直接ポートを晒さないため)。
  • 平文の ws:// 接続は、デフォルトでループバックに限定されています。信頼できるプライベートネットワーク内で平文接続を許可したい場合は、クライアントプロセスの環境変数に OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 を設定してください。
  • ループバック以外へのバインド (lan, tailnet, custom, またはループバック不可時の auto) を行う場合は、必ずトークンまたはパスワード認証を有効にする必要があります。
  • gateway.remote.token / password はクライアント側の認証情報ソースです。これらを設定するだけでは、サーバー側の認証は有効になりません。
  • gateway.auth.* が未設定の場合、ローカルからの呼び出し時に gateway.remote.* がフォールバックとして使用されることがあります。
  • wss:// を使用する際、gateway.remote.tlsFingerprint でリモートの TLS 証明書のフィンガープリントを固定(ピン留め)できます。
  • Tailscale Serve を使用する場合、gateway.auth.allowTailscale: true を設定することで、認証ヘッダーによる Tailscale の身元確認を有効にできます(コントロール UI および WebSocket トラフィックが対象。HTTP API エンドポイントは引き続きトークン/パスワードが必要です)。このトークンレスフローは、ゲートウェイホストが信頼されていることを前提としています。
  • ブラウザ制御機能はオペレーター権限と同等に扱ってください。Tailnet 限定の運用と、明示的なノードペアリングを推奨します。
詳細な解説: セキュリティ