Skip to content

Web Terminal

Vapor menyediakan antarmuka web terminal bawaan yang aman, memungkinkan administrator untuk mengeksekusi perintah shell secara langsung pada sistem operasi host tanpa memerlukan akses klien SSH eksternal.


Mengakses Terminal

  1. Navigasikan ke Host Management > Terminal di konsol web.
  2. Koneksi WebSocket akan otomatis dibuat ke endpoint shell host.
  3. Secara default, sesi shell berjalan sebagai pengguna root atau di bawah konteks pengguna sistem dari daemon Vapor yang sedang berjalan.

Protokol WebSocket & Siklus Hidup Sesi

Untuk klien API kustom, integrasi emulator terminal, atau alat otomatisasi, Vapor mengekspos backend terminalnya melalui WebSocket:

  • WebSocket URL: ws://<host>:8080/ws/terminal (atau port 8081 tergantung pada konfigurasi jaringan).
  • Protokol Komunikasi: Semua pesan yang dipertukarkan melalui koneksi WebSocket berbentuk bingkai (frame) JSON terstruktur.

Langkah 1: Autentikasi

Setelah koneksi terjalin, klien harus mengirimkan frame autentikasi yang berisi JWT atau token API yang valid:

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

Langkah 2: Berlangganan Saluran (Subscription)

Setelah autentikasi berhasil, klien harus berlangganan ke saluran terminal, dengan menentukan dimensi awal layar dan path shell:

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

Langkah 3: Input dan Output Interaktif

  • Input Klien: Kirim input (termasuk tombol keyboard, karakter kontrol, dan baris baru) menggunakan frame tipe input:
    json
    {
      "type": "input",
      "data": "ls -la\n"
    }
  • Output Server: Server mengirimkan kembali frame output terminal mentah yang berisi aliran data stdout/stderr.

Langkah 4: Mengubah Ukuran Jendela (Resize)

Vapor secara dinamis memperbarui geometri pseudo-terminal (PTY) pada host saat ukuran jendela klien berubah. Klien mengirimkan frame resize yang berisi jumlah baris dan kolom yang baru:

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

Langkah 5: Mengakhiri Sesi

Untuk menutup sesi secara bersih, klien dapat mengirimkan perintah keluar di dalam frame input:

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

Selain itu, memutuskan koneksi WebSocket secara otomatis akan menghentikan proses PTY host yang terkait.


CAUTION

Web terminal memberikan akses root administratif tanpa batas ke sistem file dan sistem operasi host. Kebijakan keamanan API dan batas sumber daya standar Vapor tidak berlaku untuk perintah shell yang dieksekusi di dalam terminal ini. Gunakan dengan sangat hati-hati.