DocsInfrastruktur
Web terminal
Shell ke host aoox (atau server remote) langsung dari browser, untuk owner dan admin.
- Siapa
- Owner & admin saja
- Ke mana
- Host aoox (SSH) atau server remote
- Klien
- xterm.js di browser → Socket.IO → SSH
Cara kerja
Container tidak bisa membuka shell di host-nya sendiri, jadi API terhubung ke host lewat SSH. Browser tidak pernah memegang kredensial SSH:
- 01tiketbrowser minta tiket JWT 60 detik, sekali pakai, scope terminal
- 02socketSocket.IO /terminal dengan tiket + ukuran kolom/baris
- 03sshAPI membuka sesi SSH ke target memakai key platform
- 04shellinput/output diteruskan; resize mengikuti jendela
| Mode | Kapan | Shell yang didapat |
|---|---|---|
| SSH ke host | TERMINAL_SSH_HOST terisi (default host.docker.internal) | Shell user SSH di host — yang biasanya kamu mau. |
| Lokal | TERMINAL_SSH_HOST kosong | Shell di dalam container API (bash sebagai user node) — hanya untuk debug API. |
Menyiapkan SSH ke host
Aktifkan SSH server di host
Linuxsudo apt install openssh-server && sudo systemctl enable --now sshWindows (dev): fitur opsional OpenSSH Server. Compose distribusi sudah memetakan
host.docker.internalke gateway host di Linux.Isi env terminal di .env.dist
.env.distTERMINAL_SSH_HOST=host.docker.internal TERMINAL_SSH_PORT=22 TERMINAL_SSH_USER=deploy # user host yang dipakai terminalJalankan
up -dlagi setelah mengubah env. BilaTERMINAL_SSH_USERkosong, terminal masuk sebagairoot(default instalasi lama) — kartu Terminal menandainya sebagai user default. Instalasi baru lewatsudo aoox installatau skrip satu-perintah (curl … | sudo sh) mengisinya otomatis dengan nama user yang menjalankansudo(bila berupa nama login polos dan bukanroot; selain ituroot; flag--terminal-ssh-useratau envTERMINAL_SSH_USERyang eksplisit selalu menang); instalasi lama tidak berubah (ubah lewat Environment, lihat User SSH di VPS cloud). Kalau koneksi gagal, terminal menampilkan tautan ke Infrastruktur → Environment untuk memperbaiki pengaturannya.Otorisasi key platform
Instalasi baru melakukannya sendiri:
sudo aoox installdan skrip satu-perintah membuat key disecrets/lalu menambahkannya ke~/.ssh/authorized_keysuser terminal. Untuk instalasi yang sudah ada, owner cukup klik Otorisasi otomatis di Infrastruktur → Terminal (atau di notifikasi galat halaman Terminal); aoox menambahkan public key keauthorized_keysuser itu, menguji login, dan menyambung ulang. Tidak ada password atau private key yang ditulis. Perintah manual di bawah tetap tampil sebagai cadangan.API membuat keypair ed25519 di
./secretssaat pertama dibutuhkan. Settings → Terminal menampilkan public key dan perintah untuk dijalankan sekali di host sebagaiTERMINAL_SSH_USER:mkdir -p ~/.ssh && chmod 700 ~/.ssh touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys echo 'ssh-ed25519 AAAA… aoox' >> ~/.ssh/authorized_keysKey yang sama dipakai untuk server remote — otorisasi sekali per host.
Buka menu Terminal
Pilih target (Host aoox / server remote) dan mulai mengetik. Ukuran terminal mengikuti jendela browser; sesi ditutup saat tab ditutup atau koneksi putus.
User SSH di VPS cloud
Terminal masuk ke host sebagai user di kolom User (TERMINAL_SSH_USER), dan perintah otorisasi key harus dijalankan di host sebagai user yang sama. Di VPS cloud (Ubuntu, Tencent, dan sejenisnya) login root biasanya dimatikan di sshd (PermitRootLogin no atau hanya lewat key provider), jadi default root sering ditolak.
Isi User dengan user login VPS
Buka Infrastruktur → Environment (owner), isi User dengan user yang kamu pakai untuk SSH ke VPS — di Ubuntu biasanya
ubuntu— lalu simpan. Panel memulai ulang kontainer API beberapa detik.Otorisasi key sebagai user itu
Di VPS, login sebagai user yang sama dan jalankan perintah otorisasi dari Infrastruktur → Akses terminal (tiga baris di atas). Perintah itu menulis ke
~/.ssh/authorized_keysmilik user yang sedang menjalankannya, jadi jangan dijalankan dengansudo.Sambung ulang
Klik Sambung ulang di menu Terminal.
Batas otorisasi otomatis
- Hanya untuk host aoox dengan key platform. Server remote tetap manual (perintah otorisasi di halaman Server remote), begitu juga bila memakai key atau password sendiri.
- Hanya owner yang melihat tombolnya (admin tetap bisa memakai perintah manual).
- Key ditulis ke
~/.ssh/authorized_keysuser terminal. Kalau sshd memakaiAuthorizedKeysFiledi lokasi lain, key tidak akan dibaca: aoox melaporkan bahwa uji koneksi gagal, dan kamu perlu memasang key di lokasi itu. - SELinux (mis. RHEL/Rocky) bisa menolak sshd membaca berkas yang baru ditulis; perbaiki konteksnya dengan
restorecon -R ~/.sshdi host. - Bila
~/.sshatauauthorized_keysberupa symlink, aoox menolak mengikutinya dan meminta otorisasi manual. - Bila Docker memakai bridge/gateway kustom (bukan alamat default seperti
host.docker.internalatau172.17.0.1), tombol tidak muncul; gunakan perintah manual. - Instalasi baru bisa melewatkan langkah otomatis dengan
--no-terminal-authorize(CLI) atauAOOX_NO_TERMINAL_AUTHORIZE=1(skrip satu-perintah).
Kredensial alternatif
| Env | Kapan dipakai | Catatan |
|---|---|---|
TERMINAL_SSH_PRIVATE_KEY_FILE | Bawa key sendiri | Path di container API (mount ke /run/secrets/…); TERMINAL_SSH_PASSPHRASE bila terenkripsi. |
TERMINAL_SSH_PRIVATE_KEY | Key inline di env | Kurang praktis; hindari di file yang di-commit. |
TERMINAL_SSH_PASSWORD | Password SSH | Kurang aman — hanya untuk uji cepat. |
Prioritas: key eksplisit → password → key platform (default).
Tips pemakaian
- Semua container aoox terlihat dari host:
docker ps --filter label=com.docker.compose.project=aoox. - Masuk ke container aplikasi:
docker exec -it aoox-app-<slug> sh. Untuk perintah rutin, lebih rapi pakai job. - Log proxy saat sertifikat bermasalah:
docker logs -f aoox-proxy. - Tempel dengan
Ctrl+Shift+V(Linux/Windows) atauCmd+V(macOS);Ctrl+Cditeruskan ke shell, bukan menyalin.
Bila gagal
| Pesan | Penyebab & solusi |
|---|---|
| auth failed + perintah otorisasi | Key belum ada di authorized_keys user itu. Jalankan perintah yang ditampilkan di terminal/Settings. |
| SSH authentication failed for root@host.docker.internal | Terminal mencoba masuk sebagai root, padahal login VPS-mu user lain dan sshd biasanya menolak root. Owner bisa mencoba tombol Otorisasi otomatis setelah User di Environment benar. Periksa: (1) kolom User di Infrastruktur → Environment sama dengan user login VPS (mis. ubuntu); (2) key platform ada di ~/.ssh/authorized_keys user itu (bukan root); (3) kalau tetap ingin root, PermitRootLogin di /etc/ssh/sshd_config mengizinkan login key (prohibit-password atau yes), lalu sudo systemctl reload ssh. |
| Otorisasi otomatis: "…but the connection test failed" | Key sudah ditulis, tetapi login uji masih ditolak: sshd memakai AuthorizedKeysFile di tempat lain, SELinux memblokir, atau login key dimatikan (PubkeyAuthentication no). Periksa /etc/ssh/sshd_config, lalu restorecon -R ~/.ssh bila SELinux aktif; perintah manual tetap tersedia. |
| origin not allowed | WEB_ORIGIN tidak sama persis dengan URL di browser (skema/host/port). Samakan, up -d ulang. |
| connect ECONNREFUSED / timeout | sshd tidak jalan, port salah, atau host.docker.internal tidak resolve (Linux tanpa extra_hosts — pakai IP gateway docker0, mis. 172.17.0.1). |
| Direktori key tidak writable (uid 1000) | Perbaiki kepemilikan folder ./secrets: sudo chown -R 1000:1000 ./secrets. |
| 403 saat membuka terminal | Peran member. Hanya owner/admin. |
Origin selain WEB_ORIGIN. Fitur ini dimaksudkan untuk lingkungan dev/self-hosted yang dipercaya — host key SSH belum diverifikasi. Pembukaan sesi (pembuatan tiket) tercatat di audit log; perintah yang diketik tidak.Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitHub ↗