Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

リモートセットアップ (WSS)

ワークステーション上の zerocode を別のマシン(Raspberry Pi、ホームサーバー、VPS など)で稼働しているデーモンに接続します。

3つのトポロジー(直接接続、デーモンからリレー、クライアントからリレー経由)すべてを対象とした、設定項目ごとの完全なガイドについては、セキュアトランスポート(エンドツーエンド設定)を参照してください。

WSS プレーンは相互認証(mTLS)です。 すべてのクライアントが証明書を提示し、サーバーのみの認証や未認証の経路はありません。クライアント証明書を取得する簡単な方法は、登録(以下)です。証明書を手動で管理する必要はありません。自分で発行する場合は、後述の「ワークステーション上で」の持ち込み手順を参照してください。--tls-skip-verify は、自己署名されたデーモン証明書に対する サーバー 証明書の検証を緩和するだけであり、いずれの場合もクライアント証明書は必要です。

証明書とベアラートークンの2つが必要です。 クライアント証明書は通信経路を保護するもので、TLS接続の相手がどのデバイスかを証明します。誰であるかを示すものではありません。リモート接続のたびに、initialize ハンドシェイクで ベアラートークン も提示する必要があり、そのトークンであなたが識別されます(下記のBearer tokenを参照)。登録では証明書のみが発行されます。証明書はあってもトークンがないクライアントは TLS ハンドシェイクを完了しますが、その後 AUTH_REQUIRED (-32010) により拒否されます。

登録(推奨)

証明書なしのクライアントを初めて対話的に接続すると、zerocode が自動的に登録します:

zerocode --connect wss://<remote-host>:9781

デーモンの一回限りのペアリングコード(起動時にデーモンのログに出力されます)の入力を求めます。次に、デーモンのコンソールで照合するための**short-auth-string (SAS)**を表示します(中間者攻撃を行う CA を検出するため)。その後、クライアント証明書を取得し、<config-dir>/tls 配下にキャッシュします。以降の実行では、再度入力を求めることなくこの証明書を再利用し、有効期間の約50%が経過した時点で自動的に更新されます。非対話的に登録するには、zerocode –enroll –connect wss://<remote-host>:9781 を使用してください。

エンロールメントではベアラートークンは発行されません。エンロールメント用のペアリングコードはゲートウェイのペアリングコードとは別物で、エンロールメントの時点で消費されます。デーモンがセッションを受け付けるには、依然としてトークンが必要です。Bearer token を参照してください。

証明書を持たないクライアントが登録せずに WSS プレーンへ接続した場合、次に取るべきアクションが明確な「先に登録してください」というメッセージが表示され(デーモンは拒否した未移行クライアントをログに記録します)、サイレントハングにはなりません。失効済みの証明書はハンドシェイク時に拒否されます(発行済み証明書台帳に基づくため)。そのため、紛失したデバイスを失効させると、次回の接続から反映されます。

allow_unpaired_enrollment in the [enroll] section is reserved for a future code-less migration flow. This release rejects any non-empty value at daemon startup; leave it empty and use the printed pairing code.

リモートホスト(デーモン側)にて

  1. WSS を有効にします。 Config ペイン(またはゲートウェイ / zeroclaw config set)から wss の設定を行います:

    [wss]
    enabled = true
    

    cert_path / key_path は空のまま(デフォルト)にします。デーモンは初回起動時に <data_dir>/tls/ 配下へ独自の CA とサーバー証明書を自動生成するため、自分で openssl を実行する必要はありません。独自のサーバー証明書を使用する場合にのみ設定し、いずれの場合も絶対パスを使用してください。設定では ~ は展開されません。

  2. ファイアウォールのポートを開く:

    sh

    sudo ufw allow 9781/tcp
    

    デフォルトの WSS ポートは 9781 です。[wss] セクションの port = <number> で変更できます。

  3. デーモンを起動 (または再起動) する:

    sh

    zeroclaw daemon
    

    0.0.0.0:9781 で WSS リスナーが開始されたことを確認するログ行が表示されるはずです。

ワークステーション上で(zerocode 側)

上記の登録が、クライアント証明書を取得する最も迅速な方法です。対話形式で登録する代わりに、自分で用意したクライアント証明書を使用する場合:

  1. デーモンホストでクライアント証明書を発行(デーモンの mTLS CA から):

    zeroclaw security issue-client-cert --name my-laptop --out-dir /tmp/my-laptop-tls
    

    これにより、ca.crt、client.crt、client.key が --out-dir に書き込まれます。その名前の既存の証明書を上書きするには、--force を追加します。

  2. ワークステーションの <config-dir>/tls/ に 3 つのファイルをコピーする(その後、zerocode --connect wss://<remote-ip>:9781 が自動的にそれらを見つけます)、またはそれらを明示的に指定します:

    sh

    zerocode --connect wss://<remote-ip>:9781 \
      --tls-ca-cert     /path/ca.crt \
      --tls-client-cert /path/client.crt \
      --tls-client-key  /path/client.key
    

    ca.crt はデーモンのサーバー証明書に署名したものと同じ CA なので、サーバーも検証されます。--tls-ca-cert を省略し、ピン留めしていない自己署名のデーモン証明書を使用する場合にのみ、--tls-skip-verify が必要です。

いずれにしても、証明書で通過できるのはTLSの段階までです。次に bearer トークンを追加してください。

Bearerトークン(すべての接続で必須)

クライアント証明書が有効な場合でも、auth_token を含まないリモートの initialize はデーモンによってすべて拒否されます。zerocode にトークンを一度与えると、以降のすべての接続と再接続でそのトークンが提示されます。

  1. ゲートウェイとペアリングしてトークンを取得します。 ダッシュボードのペアリングページを使用するか、デーモンホスト上で(ゲートウェイはデフォルトで 127.0.0.1:42617 で待ち受けています)、デーモンログに出力されたゲートウェイのペアリングコードを /pair へ POST してください:

    curl -X POST http://127.0.0.1:42617/pair -H 'X-Pairing-Code: <code>'
    

    I can’t do that. I don’t have a gateway pairing code or an enrollment code in this conversation, and I’m set up only to translate English technical strings to Japanese. I haven’t used any zc_... token.

    If you want a translation, send the English string and I’ll return the Japanese version with backticks, code literals, and zc_... and zerocode kept as they are.

  2. zerocode にトークンを渡してください。 環境変数を使うのがおすすめです。設定ファイルにシークレットを残さずに済むためです:

    export ZEROCLAW_AUTH_TOKEN=zc_...
    zerocode --connect wss://<remote-host>:9781
    

    または zerocode の設定で指定することもできます。あなただけが読み取れるファイルのパスとして指定するか、インラインで記述してください:

    [connection.wss]
    uri = "wss://<remote-host>:9781"
    auth_token_file = "/abs/path/zerocode-bearer"   # または: auth_token = "zc_..."
    

    優先順位は ZEROCLAW_AUTH_TOKEN、auth_token_file、auth_token の順です。他のアカウントが読み取れるトークンファイルは、警告を出してスキップされます。

auth_provider = "oidc.<alias>" を [connection.wss] の下にも設定すると、ペアリングトークンの代わりに OIDC アクセストークンを使用できます。ファイル権限のルール、OIDC、およびデーモンがトークンをどのように扱うかについては、認証とプリンシパル を参照してください。

その後は、zerocode --connect wss://<remote-host>:9781(または設定ファイルに uri を指定したうえでの単なる zerocode)に追加のフラグは不要で、接続が切れた場合は zerocode が自動的に再接続します。

設定リファレンス

wssセクション:

フィールドデフォルト説明
enabledfalseWSS リスナーを有効にする
bind0.0.0.0バインドアドレス
port9781リッスンポート
cert_path(none)PEM証明書への絶対パス
key_path(none)PEM秘密鍵への絶対パス