コンテンツにスキップ
17.3k

リモートリンク

マシンリンクは SSH で OpenCodex の Home コンピューターと Child コンピューターを接続します。Home は SSH トンネルを通じて Child にサービスを提供し、両方のコンピューターはローカルの OpenCodex サービスを 10100 ポートで維持します。ダッシュボードは Child 専用のリンクキーを SSH で渡すため、トークンを入力する必要はありません。

  • Home から Child に OpenSSH キーでログインできること。
  • Child から開始するリンクでは、Child から Home に OpenSSH キーでログインできる必要があります(パスワードログインには対応していません)。
  • Child に OpenCodex 2.66.0 以降がインストールされていること(Child から開始するリンクでは Home にも)。
  • 両方のコンピューターが macOS または Linux であること。
  • Home から Child を追加するダッシュボードは Home 上で開くか、ペアリング済みの Hub セッションを使用します。現在のコンピューターを Child にするには、オペレーターがペアリングしたダッシュボードセッションが必要です。認証情報なしのローカルセッションでは、このルーティング変更を確定できません。

パスワード SSH と Windows は現在のフローに含まれません。リンクはどちら側からでも開始できます。次の手順のように Home から開始するか、後述の「このコンピューターを Child として接続する」のように Child から開始します。

  1. ダッシュボードで #remote を開き、Remote Link をオンにします。
  2. Home を選び、Continue を押します。SSH ホストの一覧が開きます。
  3. SSH の候補からホストを選ぶか、SSH 設定のエイリアスを入力します。
  4. 接続テストを実行し、表示されたホストフィンガープリントを接続先コンピューターのものと比較します。比較すると、SSH がホストを信頼する前に、別のコンピューターや変更されたホストキーを検出できます。
  5. フィンガープリントを確認して Child を接続します。

ダッシュボードはトークンの入力を求めません。先にホストをプローブし、フィンガープリントを明示的に確認するまでリンクを適用しません。

Child 追加画面には、Child が SSH 経由でこの Home のプロバイダーを使用することと、上記の前提条件が表示されます。別名は OpenCodex を実行する Home の ~/.ssh/config から取得し、ブラウザーを表示するコンピューターとは限りません。検索が成功してもホストがない場合は、次のような Host エントリを追加して再検索してください。既存の別名の手入力も可能です。別名を選択または入力すると接続テストが有効になります。このガイドへのリンクもあります。

Host devbox
HostName devbox.example.com
User you
IdentityFile ~/.ssh/id_ed25519

検索に失敗した場合、空の一覧と表示せず、読み込み失敗、取得できた理由、再試行ボタンを表示します。接続テストの失敗理由とサニタイズ済み SSH ヒントは開いている画面だけに表示され、背後には重複しません。理由と下記の SSH 診断を確認して再試行してください。再検索では入力した別名を保持しますが、接続前にフィンガープリントの再確認が必要です。

このコンピューターを Child として接続する

Section titled “このコンピューターを Child として接続する”

Home のプロバイダーを使うコンピューターで次の操作を行います。

  1. ダッシュボードで #remote を開き、Remote Link をオンにします。
  2. Child を選びます。SSH ホストの一覧が開きます。
  3. Home の SSH ホストを選び、接続テストを実行してから、ホストのフィンガープリントを比較して確認します。
  4. 注意事項を読み、Connect as Child を選びます。

接続すると、このコンピューターの OpenCodex が再起動します。すでに実行中の Codex ターンは先に完了し、再起動中の最大 1 分間は新しいリクエストが失敗することがあります。その後ダッシュボードは自動的に再読み込みされ、Child のリンクを表示します。Codex はこのコンピューターの http://127.0.0.1:<port>/v1 を使い続け、トークンや環境変数の設定は不要です。ローカルの OpenCodex が各リクエストを Home に中継し、Home が自身のプロバイダーとアカウントで応答します。

Child にこのコンピューターを先にペアリングするよう表示された場合は、このコンピューターに設定された HTTP ループバック IP アドレスのダッシュボード(例: http://127.0.0.1:<configured-port>)を開いてください。ローカルのペアリングフォームは、ペアリングが必要で、ダッシュボードと API が同じループバックオリジンを使う場合にのみ表示されます。フォームの ocx gui pair --origin "http://127.0.0.1:<configured-port>" コマンドをコピーしてこのコンピューターのターミナルで実行し、使い捨てコードをフォームに貼り付けてください。フォームに表示された正確なオリジンを使ってください。プロバイダーの API キーや管理者トークンはペアリングコードではありません。ペアリングの不足と設定されたポートの不一致は別の原因です。

Child の役割には、OpenCodex がスタンドアロンモードで設定されたポートで動作していることも必要です。Child はまさにそのポートで再起動するためです。設定されたポートで動作していないとダッシュボードに表示された場合は、先にそのポートで OpenCodex を再起動してください。

  • Connected は SSH トンネルが準備でき、Child が Home のリンクを使える状態です。
  • Reconnecting はトンネルを再試行している状態です。再試行中はリクエストが Retry-After 付きの 503 を一時的に返すことがあります。自分のダッシュボードから接続した Child では、リクエストはまずトンネルの復帰を最大 15 秒待ちます。
  • Failed は対応が必要な状態です。SSH 認証、確認済みのホストキー、転送、タイムアウトの理由を確認してください。SSH トンネルを張る側が、スリープ、障害、再起動の後も自動で再試行します。Home が追加した Child では Home が、自分のダッシュボードから接続した Child では Child が再試行します。タイムアウトや転送エラーの後は約 1 分ごと、認証エラーの後は 5 分ごとです。ホストキーが変わった場合は再試行しません。すぐに再接続するには、Home のダッシュボードで Retry を選ぶか、Home で ocx link reconnect --link-id <id> を実行します。OpenCodex を再起動せずに、そのリンクのトンネルだけを張り直します。

リンクが失敗しても、ローカルプロバイダーへ自動的に切り替わることはありません。

Child の Disconnect を選び、エイリアスを確認します。Home はトンネルを停止し、その Child のリンクキーを失効させ、保存されたリンク記録を削除します。

Home から Child に接続解除コマンドを実行できない場合は Remove here only を選びます。これでこのコンピューターのトンネル、キー、記録だけを削除します。その後 Child にログインして実行します。

Terminal window
ocx disconnect

Child から開始したリンクを切断するには、Child で ocx disconnect を実行します。このコマンドはクライアントトンネルを切断し、SSH 経由で Home のリンクを失効させます。Home での失効に失敗すると、次のメッセージが表示されます: Home revoke failed; run ocx link revoke --link-id <linkId> on the home.

Child はリンクを通じて Home コンピューターのプロバイダーとプロバイダー認証情報を使います。Home は Child ごとに別のリンクキーを作り、リンクを削除するとそのキーを失効させます。確認前にホストフィンガープリントを比較し、別のコンピューターや変更されたホストキーを誤って受け入れないようにしてください。Tailscale の ID から発行されたダッシュボードセッションはマシンリンクを管理できません。 Child ではキーは OpenCodex の中にとどまります。Codex や Claude Code が Child で送る認証情報は Home に転送されず、Child で 127.0.0.1:<port> に到達できるプログラムはキーなしで Home を使えます。これはスタンドアロン環境がローカルのプログラムに与えるのと同じ信頼です。他のサイトの Web ページは拒否されます。

ocx link probe <alias> [--json]
ocx link add <alias> [--expect-fingerprint SHA256:…] [--json]
ocx link port [--json]
ocx link issue --alias <alias> --tunnel-port <port> [--json]
ocx link status [--json]
ocx link revoke --link-id <id> [--json]
ocx link reconnect --link-id <id> [--json]

対話型端末(TTY)でない場合、--expect-fingerprint は必須です。対話型端末では省略できますが、提示されたフィンガープリントを明示的に承認する必要があります。

端末では ocx link probe <alias> --json で指紋とバージョンを確認し、ocx link add <alias> --expect-fingerprint SHA256:… --json で接続できます。指紋を省略すると対話端末で明示的な確認が必要です。Home は Child の再起動サポートと curl を事前確認し、接続後に再起動と実際のリレーを検証します。Child 設定が残った場合は Child で ocx disconnect と ocx restart を実行してください。詳細(英語)。