Webターミナル
Vaporは、セキュアなWebターミナルインターフェースを内蔵しており、管理者がSSHクライアントを使用することなく、ホストオペレーティングシステム上で直接シェルコマンドを実行できます。
ターミナルへのアクセス
- Webコンソール内の Host Management > Terminal に移動します。
- ホストのシェルエンドポイントへのWebSocket接続が自動的に確立されます。
- デフォルトでは、シェルセッションは
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セーフティラッパーおよびリソースポリシーは、このターミナル内で実行されるシェルコマンドには適用されません。十分に注意して使用してください。