リモートセットアップ (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.
リモートホスト(デーモン側)にて
-
WSS を有効にします。 Config ペイン(またはゲートウェイ /
zeroclaw config set)からwssの設定を行います:[wss] enabled = truecert_path/key_pathは空のまま(デフォルト)にします。デーモンは初回起動時に<data_dir>/tls/配下へ独自の CA とサーバー証明書を自動生成するため、自分で openssl を実行する必要はありません。独自のサーバー証明書を使用する場合にのみ設定し、いずれの場合も絶対パスを使用してください。設定では~は展開されません。 -
ファイアウォールのポートを開く:
sh
sudo ufw allow 9781/tcpデフォルトの WSS ポートは 9781 です。
[wss]セクションのport = <number>で変更できます。 -
デーモンを起動 (または再起動) する:
sh
zeroclaw daemon0.0.0.0:9781で WSS リスナーが開始されたことを確認するログ行が表示されるはずです。
ワークステーション上で(zerocode 側)
上記の登録が、クライアント証明書を取得する最も迅速な方法です。対話形式で登録する代わりに、自分で用意したクライアント証明書を使用する場合:
-
デーモンホストでクライアント証明書を発行(デーモンの 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を追加します。 -
ワークステーションの
<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.keyca.crtはデーモンのサーバー証明書に署名したものと同じ CA なので、サーバーも検証されます。--tls-ca-certを省略し、ピン留めしていない自己署名のデーモン証明書を使用する場合にのみ、--tls-skip-verifyが必要です。
いずれにしても、証明書で通過できるのはTLSの段階までです。次に bearer トークンを追加してください。
Bearerトークン(すべての接続で必須)
クライアント証明書が有効な場合でも、auth_token を含まないリモートの initialize はデーモンによってすべて拒否されます。zerocode にトークンを一度与えると、以降のすべての接続と再接続でそのトークンが提示されます。
-
ゲートウェイとペアリングしてトークンを取得します。 ダッシュボードのペアリングページを使用するか、デーモンホスト上で(ゲートウェイはデフォルトで
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_...andzerocodekept as they are. -
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セクション:
| フィールド | デフォルト | 説明 |
|---|---|---|
enabled | false | WSS リスナーを有効にする |
bind | 0.0.0.0 | バインドアドレス |
port | 9781 | リッスンポート |
cert_path | (none) | PEM証明書への絶対パス |
key_path | (none) | PEM秘密鍵への絶対パス |