Skip to content

Webターミナル

Vaporは、セキュアなWebターミナルインターフェースを内蔵しており、管理者がSSHクライアントを使用することなく、ホストオペレーティングシステム上で直接シェルコマンドを実行できます。


ターミナルへのアクセス

  1. Webコンソール内の Host Management > Terminal に移動します。
  2. ホストのシェルエンドポイントへのWebSocket接続が自動的に確立されます。
  3. デフォルトでは、シェルセッションは root ユーザー、または実行中のVaporデーモンのシステムユーザーコンテキストとして実行されます。

WebSocketプロトコルとセッションライフサイクル

カスタムAPIクライアント、ターミナルエミュレータとの統合、または自動化ツールのために、VaporはWebSocketsを介してターミナルバックエンドを公開しています:

  • WebSocket URL: ws://<host>:8080/ws/terminal (ネットワーク構成によってはポート 8081)。
  • 通信プロトコル: WebSocket接続を介して交換されるすべてのメッセージは、構造化されたJSONフレームです。

ステップ 1: 認証

接続が確立されると、クライアントは有効なJWTまたはAPIトークンを含む認証フレームを送信する必要があります:

json
{
  "type": "auth",
  "payload": {
    "token": "<auth_token>"
  }
}

ステップ 2: チャンネルの購読 (Subscription)

認証に成功した後、クライアントは初期グリッドサイズとシェルパスを指定して、ターミナルチャンネルを購読(サブスクライブ)する必要があります:

json
{
  "type": "subscribe",
  "payload": {
    "channel": "terminal",
    "cols": 80,
    "rows": 24,
    "shell": "/bin/bash"
  }
}

ステップ 3: インタラクティブな入出力

  • クライアントからの入力: 入力タイプのフレームを使用して、入力(キー入力、制御文字、改行コードなど)を送信します:
    json
    {
      "type": "input",
      "data": "ls -la\n"
    }
  • サーバーからの出力: サーバーは、stdout/stderrストリームを含む生のターミナル出力フレームをクライアントに送り返します。

ステップ 4: ウィンドウのリサイズ

Vaporは、クライアントウィンドウのリサイズを検知すると、ホスト上の擬似端末(PTY)のジオメトリを動的に更新します。クライアントは、変更後の行数と列数を含むリサイズフレームを送信します:

json
{
  "type": "resize",
  "payload": {
    "rows": 40,
    "cols": 120
  }
}

ステップ 5: セッションの終了

セッションを正常に終了するために、クライアントは入力フレーム内に終了コマンドを送信できます:

json
{
  "type": "input",
  "data": "exit\n"
}

また、WebSocket接続を切断すると、関連付けられたホストのPTYプロセスは自動的に終了します。


CAUTION

Webターミナルは、ホストのファイルシステムおよびオペレーティングシステムへの無制限の管理管理者ルート(root)アクセスを許可します。Vaporの標準APIセーフティラッパーおよびリソースポリシーは、このターミナル内で実行されるシェルコマンドには適用されません。十分に注意して使用してください。