Shell grafis native untuk SSH
(probablymarcus.com)- Jika server dan perangkat edge menyediakan shell grafis berbasis browser alih-alih hanya mengekspos terminal, aplikasi jarak jauh dapat digunakan dengan lebih alami dari perangkat lain
- Shell ini menyediakan layar beranda aplikasi dan API pencarian URL antar-aplikasi, sehingga memungkinkan alur untuk meneruskan file atau resource ke aplikasi yang sesuai
- Aplikasi menyediakan UI melalui server HTTP kecil, tetapi bukan sebagai server web publik biasa; melainkan berjalan sebagai server privat yang terutama mengasumsikan akses melalui SSH atau akses lokal
- Enkripsi tidak perlu diimplementasikan langsung oleh setiap aplikasi, melainkan dapat diserahkan ke lapisan SSH, sehingga setiap server aplikasi dapat mempertahankan struktur yang sederhana dengan sedikit dependensi
- Untuk ini, Lewis membuat Outer Loop sebagai browser SSH dan merilis Outer Shell sebagai open source, dengan mempertimbangkan baik aplikasi HTML maupun aplikasi outerframe native
Shell grafis yang berjalan di atas SSH
- Web browser sudah menjadi contoh yang memantapkan alur di mana satu perangkat, yaitu server, menyediakan pengalaman ke perangkat lain, yaitu client
- Jika pendekatan yang sama diterapkan pada server dan perangkat edge, aplikasi grafis dapat digunakan di lingkungan jarak jauh alih-alih aplikasi berbasis terminal
- Shell menyediakan layar beranda untuk aplikasi, dan setiap aplikasi menyajikan antarmuka pengguna web melalui server HTTP kecil
- Shell API memungkinkan aplikasi menemukan URL satu sama lain, sehingga menciptakan koneksi antar-aplikasi
- Misalnya, jika sebuah aplikasi mendaftarkan dirinya sebagai editor teks, aplikasi lain dapat membuka file teks di aplikasi editor tersebut dengan double-click
- Aplikasi bisa berupa aplikasi web berbasis HTML yang sudah ada, atau aplikasi outerframe native
Cara implementasi dan proyek yang dirilis
- Server HTTP aplikasi umumnya berjalan sebagai server privat yang tidak dapat diakses dari perangkat lain di jaringan
- Pengguna memakainya melalui SSH atau secara lokal
- Berbeda dari sebagian besar tool server berbasis web yang sudah ada, ini terutama menggunakan file Unix domain socket alih-alih port localhost
- File Unix domain socket mirip dengan port, tetapi berada di filesystem dan memiliki izin pengguna yang eksplisit
- Setiap server HTTP tidak perlu menangani enkripsi secara langsung
- Enkripsi ditangani di lapisan SSH
- Berkat ini, setiap server aplikasi dapat sangat sederhana tanpa dependensi
- Outer Loop dibuat sebagai browser SSH untuk shell grafis seperti ini
- Outer Shell open source telah dirilis
- Dokumentasi terkait disediakan dalam tiga bagian
- Outer Loop: cara kerja browser
- Outer Shell: Outer Shell API dan cara menambahkan aplikasi
- Outerframe: cara kerja aplikasi native
- Fitur seperti koneksi Unix socket di browser selama ini diperlakukan sebagai fitur yang sangat niche, tetapi jika digabungkan dengan fitur seperti kesadaran terhadap SSH dan sudo, kemungkinan teknis baru dapat muncul
- Aplikasi web berbentuk server mandiri seperti Jupyter dan Tensorboard memang telah muncul, tetapi masing-masing menggunakan protokol keamanan sekali pakai, sehingga belum terbentuk cara umum untuk menyampaikannya dengan “benar”
- Seiring AI mulai dapat membantu penulisan kode, memiliki codebase per platform target untuk setiap aplikasi menjadi praktis; dan arsitektur web yang diusulkan terasa alami: gunakan HTML untuk aplikasi baca dan aplikasi ringan, serta aplikasi native yang disesuaikan dengan platform untuk aplikasi kerja
1 komentar
Pendapat Hacker News
Cukup menjengkelkan melihat banyak reaksi yang meremehkan ide ini. Banyak pembaca HN tampaknya masih terjebak dalam supremasi TUI dan tidak terlalu tertarik pada GUI
Ada dua hal utama. TUI tidak secara inheren lebih unggul daripada GUI, dan SSH sebagai lapisan transport seharusnya mendukung penerusan pty, yaitu bukan hanya lapisan tampilan TUI, tetapi juga lapisan tampilan GUI
Sebenarnya dua hal ini sudah terwujud di UNIX 30 tahun lalu, dan sudah ada solusi berupa protokol X serta
ssh -X. Namun X tidak menang, dan masa depan ketika kita bisa masuk ke mesin jarak jauh denganssh -X, menjalankangnome-control-center, lalu jendela pengaturan muncul untuk mengonfigurasi komputer jarak jauh tidak pernah datang. Kalau merasa itu bisa dilakukan, coba saja sendiri; pengalamannya menyedihkanMeski begitu, kebutuhan seperti ini terus ada, dan aplikasi seperti Jupyter Notebook mulai dikembangkan dalam bentuk server web. Format dokumen, styling, dan bahasa skrip klien milik web, terlepas dari segala kekurangannya, menjadi cukup layak dipakai sebagai lapisan tampilan untuk aplikasi interaktif, dan karena sejak awal berangkat dari dokumen jarak jauh, transparansi jaringan juga sudah tertanam di dalamnya
Melihat aplikasi Electron, wajar untuk mengakui bahwa stack HTML/CSS/JS sudah menempati posisi dominan bahkan di aplikasi desktop, lalu memanfaatkannya sebagai lapisan tampilan aplikasi jarak jauh melalui SSH. Proyek ini juga tampak mengikuti arus itu
Aplikasi Electron, seperti X, juga memisahkan server tampilan dan klien, masing-masing disebut “renderer process” dan “main process”, serta berkomunikasi lewat IPC. Secara teori, selama ada sarana transport IPC yang tepat, main process dan renderer process juga bisa dijalankan di mesin yang berbeda, dan itu tampaknya tidak jauh berbeda dari ide ini
ssh -Xbisa bekerja dengan baik tergantung toolkit yang dipakai serta jarak/latensi. Misalnya Gtk kurang bagus karena pipeline rendering-nyaKetika jarak dan latensi sudah cukup besar, kita perlu memikirkan bagaimana ini akan terlihat bagi pengguna. Batas fisik tidak bisa dihindari, apa pun medianya. Alat apa pun yang menjanjikan akses grafis jarak jauh harus dirancang dengan mempertimbangkan latensi. vim bisa bekerja baik di tengah latensi pada dasarnya karena ia mengantrekan perintah untuk dikirim
waypipe. Jadi masa depan itu belum matignome-control-centerdi mesin jarak jauh lewatssh -Xdemi mengatur server tidak pernah datang. Mengonfigurasi server lewat GUI adalah cara yang menjijikkan, dan semoga tetap tinggal di dunia Windows sajaIni terlihat seperti solusi yang sedang mencari masalah, sesuatu yang sudah banyak ada di masa lalu. Kutipan di bawah tampaknya cocok dengan upaya ini
“Orang yang tidak memahami Unix ditakdirkan untuk menciptakannya kembali dengan buruk.” ~Henry Spencer
Hampir semua mesin untuk developer memiliki server SSH terpasang dan dapat diakses
Mengapa terminal SSH harus terlihat seperti sampah teks-saja ala 1960-an? Mengapa TUI harus menjadi target terbaik yang dialirkan melalui SSH? Mengapa kita tidak bisa menonton film 4K di terminal atau menjelajah web dengan pinch zoom?
Ide seperti melihat direktori Linux lewat SSH sebagai komponen UI native tampak cukup bagus
Namun sebagian tampaknya memang sudah diselesaikan dengan cara lain, seperti mount
sshfsSaya teringat tulisan lama tentang termostat yang dapat diprogram. Isinya kira-kira: sangat kuat karena bisa dikonfigurasi sangat dalam, tetapi mengerikan dipakai bagi kebanyakan orang. Intinya dekat dengan “orang tidak ingin mempelajari sistem rumitmu; mereka menginginkan manfaat yang dijanjikan sistem itu.” UI yang baik harus mampu meminimalkan celah itu
Ide memisahkan frontend dan backend aplikasi grafis itu bagus. Namun sulit menyebutnya baru; mungkin saja ada sesuatu yang saya lewatkan
Sepertinya mereka tidak tahu
X11Forwarding yesatauhtml5 web appFitur seperti browser yang bisa terhubung ke Unix socket selama ini ditolak karena dianggap sangat niche
Itu tidak diimplementasikan karena masalah keamanan. Setidaknya untuk Unix socket mentah; port lain yang dibatasi ke WebSocket atau HTTP masih memungkinkan
Browser tidak bisa diizinkan terhubung ke sembarang socket. Banyak socket secara eksplisit tidak menginginkan koneksi browser, atau bahkan tidak menyadari bahwa browser bisa terhubung ke sana
Jadi harus ditambahkan semacam allowlist, dan itu membuat fitur niche seperti ini menjadi terlalu kompleks
Jadi menurut saya inti masalahnya memang keniche-an
Sebagai catatan, Outer Loop menambahkan allowlist: https://outerloop.sh/unix-domain-sockets/
Di sini saya sedang mencoba memahami bagaimana Outer Shell bekerja. Di situs webnya, motivasinya dijelaskan seperti ini
Aplikasi seperti Jupyter atau TensorBoard, jika berjalan di server jarak jauh, biasanya tidak terlihat di browser web standar. Sebab membiarkan seluruh internet mengakses aplikasi ini sangat berbahaya. Sebagai gantinya, aplikasi berjalan di port lokal server, dan komputer saya tidak bisa mengaksesnya secara langsung
Secara tradisional, untuk mengaksesnya kita harus membuka terminal baru dan menjalankan perintah seperti
ssh -L 24601:localhost:8889 mrcslws@lambda4.mycompany.com &,ssh -L 24602:localhost:6006 mrcslws@lambda4.mycompany.com &Apakah ini benar? Biasanya SSH forwarding seperti ini hanya dipakai saat prototyping, dan saat deployment kita membuat situs web seperti
myjupyternotebook.comlalu menambahkan autentikasi agar orang lain tidak bisa mengaksesnya, bukan? HTTP basic auth juga bukan sesuatu yang terlalu sulitJika ingin menjadikan SSH, bukan HTTP, sebagai target yang diekspos publik, ada opsi lain seperti menaruhnya di balik VPN atau tunnel
Outer Loop sangat keren, tetapi saya tidak begitu paham mengapa ini diperlukan. Sepertinya ada yang saya lewatkan, jadi saya ingin dibantu memahami mengapa ini dibuat
Saya lebih dekat dengan penggunaan seperti eksperimen deep learning, optimisasi kernel GPU, dan pengembangan robot. Robot hanyalah server yang bergerak, dan dalam kasus seperti ini kita memang secara eksplisit memakai komputer jarak jauh
Bagi orang-orang di kelompok ini, alat ini rasanya akan lebih intuitif daripada alur yang Anda usulkan. Meski begitu, mungkin saja saya sedang memproyeksikan pikiran saya sendiri
Bagi saya, ini terasa seperti salah satu hal fundamental yang memang bisa ada. Rasanya seperti sistem operasi grafis yang mengutamakan remote
ssh -D 4711 -q -C -N user@hostDengan begitu,
localhost:4711menjadi proxy SOCKS5 yang bisa dikonfigurasi di browserTentu saja WireGuard VPN lebih baik. Terutama karena SSH melakukan multiplexing di atas satu koneksi TCP, sehingga jika satu paket hilang, semua trafik forwarding akan mengalami head-of-line blocking sampai paket itu ditransmisikan ulang
Sepertinya penulis belum pernah mendengar Cockpit
Hal-hal yang disebut “tidak ada” atau “baru” itu sudah ada di Cockpit selama lebih dari 10 tahun. Mulai dari koneksi web server berbasis socket, pemisahan backend-frontend untuk aplikasi server, sampai gagasan konsol server yang mencakup akses shell
Untuk pertanyaan “Aneh bukan kalau ini belum ada?”, jawaban saya: tidak. Karena ini sudah ada sejak lama
Dengan tulus,
Polisi pedoman HN :-)
https://news.ycombinator.com/newsguidelines.html
Tulisan yang bagus. Akan saya bookmark untuk riset saya
Fitur “clickity clackity” di terminal saya [0] melekat pada mesin lokal, jadi begitu masuk ke mesin remote, unsur grafisnya hilang
Ini perlahan berubah berkat offline replay [1]. Caranya adalah GUI native dan TUI bekerja bersama untuk membuka kemampuan seperti rewind. Namun jalannya masih cukup panjang, dan bagus melihat orang lain bereksperimen dengan serius. Terminal adalah area yang sangat terbengkalai
[0] https://terminal.click
[1] https://terminal.click/posts/2026/06/tui-stability/#:~:text=...
Orang-orang yang sudah terbiasa dengan terminal lupa betapa tidak ramahnya SSH bagi orang yang tidak mempelajarinya di kampus
Jika ini bisa menurunkan hambatan masuk bagi tim kecil yang mengelola VPS tanpa perlu merekrut orang khusus platform, maka ini sukses. Namun saya penasaran bagaimana mereka menangani key dan jump host
Hebat. Ini jelas bergerak ke arah yang benar
Lapisan pemisah antara frontend dan backend harus dipotong pada “potongan” sekecil mungkin
Banyak orang yang menyindir di sini juga akan mengerti kalau mereka langsung “merasakan” latensi dan overhead tambahannya. Belum ada cukup pemikiran untuk memotong data secara hati-hati sesuai tiap use case
Lebih jauh lagi, menurut saya aplikasi
topdalam demo, yang disebut “menggerakkan pengaturan berkali-kali untuk menciptakan beban”, seharusnya melakukan lebih banyak rendering secara JIT di sisi klien. Dengan begitu, informasi yang bolak-balik antara Pi dan klien akan berkurang menjadi kira-kira delta terkompresi dari outputpsJangan lakukan ini. Ada banyak sekali alasan keamanan lama yang kuat serta alasan isolasi control plane web mengapa browser tidak diberi izin socket umum
Analogi mekanis terdekat adalah mengapa ATV roda tiga adalah ide buruk
Socket harus diblokir secara default, dan hanya boleh dibuka setelah secara eksplisit dimasukkan ke allowlist di sisi server
Harus ada kesadaran sudo yang nyata, sehingga socket root tidak bisa disentuh tanpa kata sandi sudo. Alasan fitur ini penting adalah, jika tidak, orang akan terdorong menjalankan backend root melalui socket yang dapat diakses pengguna
Detailnya ada di sini: https://outerloop.sh/security/