SSH için yerel grafiksel kabuk
(probablymarcus.com)- Sunucular ve uç cihazlar yalnızca terminal sunmak yerine tarayıcı tabanlı grafiksel bir kabuk sağladığında, başka cihazlardan uzak uygulamaları daha doğal şekilde kullanmak mümkün olur
- Bu kabuk, bir uygulama ana ekranı ve uygulamalar arası URL sorgulama API’si sağlayarak dosyaları veya kaynakları uygun uygulamaya aktaran akışlar oluşturabilir
- Uygulamalar arayüzlerini küçük HTTP sunucuları üzerinden sunar; ancak bunlar herkese açık genel web sunucuları değil, çoğunlukla SSH veya yerel erişimi varsayan özel sunucular olarak çalışır
- Şifreleme her uygulama tarafından ayrı ayrı uygulanmak yerine SSH katmanına bırakılabilir; böylece her uygulama sunucusu az bağımlılığa sahip, basit bir yapıyı koruyabilir
- Lewis bunun için Outer Loop’u bir SSH tarayıcısı olarak geliştirdi ve açık kaynak Outer Shell’i yayımladı; hem HTML uygulamalarını hem de yerel outerframe uygulamalarını hedefliyor
SSH üzerinde çalışan grafiksel kabuk
- Web tarayıcısı, bir cihazın, yani sunucunun, başka bir cihaz olan istemciye deneyim sunduğu akışı zaten iyi yerleşmiş bir örnek olarak sunar
- Aynı yaklaşım sunuculara ve uç cihazlara uygulandığında, uzak ortamlarda terminal tabanlı uygulamalar yerine grafiksel uygulamalar kullanılabilir
- Kabuk, uygulamalar için bir ana ekran sağlar; her uygulama da küçük bir HTTP sunucusu üzerinden web kullanıcı arayüzü servis eder
- Kabuk API’si, uygulamaların birbirlerinin URL’lerini bulmasını sağlayarak uygulamalar arası bağlantılar oluşturur
- Örneğin bir uygulama kendisini metin düzenleyici olarak kaydederse, başka bir uygulamada bir metin dosyasına çift tıklanarak dosya o düzenleyici uygulamada açılabilir
- Uygulama, mevcut HTML tabanlı bir web uygulaması da olabilir, yerel bir outerframe uygulaması da olabilir
Uygulama biçimi ve yayımlanan projeler
- Uygulama HTTP sunucusu genellikle ağdaki diğer cihazlardan erişilemeyen özel bir sunucu olarak çalışır
- Kullanıcı bunu SSH üzerinden ya da yerel olarak kullanır
- Mevcut web tabanlı sunucu araçlarının çoğundan farklı olarak, localhost portlarından ziyade çoğunlukla Unix domain socket dosyaları kullanılır
- Unix domain socket dosyaları portlara benzer, ancak dosya sisteminde bulunur ve açık kullanıcı izinlerine sahiptir
- Her HTTP sunucusunun şifrelemeyi doğrudan ele alması gerekmez
- Şifreleme SSH katmanında ele alınır
- Bu sayede her uygulama sunucusu bağımlılıklar olmadan çok basit olabilir
- Outer Loop bu tür bir grafiksel kabuk için SSH tarayıcısı olarak geliştirildi
- Açık kaynak Outer Shell yayımlandı
- İlgili dokümantasyon üç koldan sunuluyor
- Outer Loop: tarayıcının çalışma biçimi
- Outer Shell: Outer Shell API’si ve uygulama ekleme yöntemi
- Outerframe: yerel uygulamaların çalışma biçimi
- Tarayıcıda Unix socket bağlantısı gibi özellikler çok niş özellikler olarak görülüyordu; ancak SSH ve sudo farkındalığı gibi özelliklerle birleştiğinde yeni teknik olanaklar doğuyor
- Jupyter ve Tensorboard gibi tekil sunucu tipi web uygulamaları ortaya çıktı; ancak her biri tek seferlik güvenlik protokolleri kullandığından, bunları “doğru” şekilde iletmek için ortak bir yöntem yerleşmedi
- Yapay zekanın kod yazımına yardımcı olabilir hale gelmesiyle, her uygulamanın hedef platforma özel bir kod tabanına sahip olması pratik hale geldi; okuma ve hafif uygulamalar için HTML, iş amaçlı uygulamalar içinse platforma uyarlanmış yerel uygulamalar kullanan yapı, doğal bir web mimarisi olarak öneriliyor
1 yorum
Hacker News yorumları
Bu fikri küçümseyen çok tepki olması epey sinir bozucu. HN okurlarının büyük kısmı hâlâ TUI üstünlüğü anlayışına saplanmış durumda ve GUI’ye pek ilgi göstermiyor gibi görünüyor
İki nokta önemli. TUI, GUI’den özünde daha üstün değil ve SSH, bir aktarım katmanı olarak pty iletiminin, yani yalnızca TUI görüntüleme katmanının değil, GUI görüntüleme katmanının da desteklenmesini sağlamalı
Aslında bu iki şey 30 yıl önce UNIX’te zaten hayata geçirilmişti; X protokolü ve
ssh -Xdiye bir çözüm de vardı. Ama X kazanamadı ve uzak makineyessh -Xile bağlanıpgnome-control-centerçalıştırınca ayar penceresinin açılıp uzak bilgisayarı yapılandırabildiğiniz bir gelecek hiç gelmedi. Çalıştığını düşünüyorsanız kendiniz deneyin; deneyim berbatYine de bu ihtiyaç hep vardı ve Jupyter Notebook gibi uygulamalar web sunucusu biçiminde geliştirilmeye başlandı. Web’in belge biçimi, stil sistemi ve istemci betik dili; sayısız kusuruna rağmen etkileşimli uygulamaların görüntüleme katmanı olarak kullanılabilir hâle geldi ve zaten uzak belgelerden doğduğu için ağ şeffaflığı da içine gömülü
Electron uygulamalarına bakınca, HTML/CSS/JS yığınının masaüstü uygulamalarda da baskın konuma geldiğini kabul edip bunu SSH üzerinden uzak uygulama görüntüleme katmanı olarak kullanmak doğal görünüyor. Bu proje de o akımın bir parçası gibi
Electron uygulamaları da X gibi bir görüntü sunucusu ve istemciye ayrılıyor; bunlara sırasıyla “renderer process” ve “main process” deniyor ve IPC ile haberleşiyorlar. Teoride uygun bir IPC taşıma mekanizması varsa main process ile renderer process’i farklı makinelerde çalıştırmak da mümkün olabilir; bu da bu fikirden çok farklı görünmüyor
ssh -X, kullanılan toolkit’e ve mesafe/gecikmeye bağlı olarak iyi çalışır. Örneğin Gtk, rendering pipeline’ı nedeniyle iyi değilMesafe ve gecikme yeterince büyüdüğünde, bunun kullanıcıya nasıl görüneceğini düşünmek gerekir. Çünkü kullanılan ortam ne olursa olsun fiziksel sınırlar aşılamaz. Uzak grafik erişimi vaat eden her araç, gecikmeyi hesaba katarak tasarlanmalı. Vim’in gecikmede de iyi çalışmasının nedeni, pratikte komutları kuyruğa alıp göndermesi
waypipedeniyor. Yani o gelecek tamamen ölmüş değilssh -Xile uzak makinedegnome-control-centeraçıp sunucu yapılandırılan bir geleceğin gelmemesine seviniyorum. Sunucuyu GUI ile yapılandırmak iğrenç bir yöntem ve umarım sadece Windows dünyasında kalırBu, geçmişte de çok gördüğümüz türden, kendine problem arayan bir çözüm gibi görünüyor. Aşağıdaki alıntı bu girişime iyi uyuyor gibi
“Unix’i anlamayan insanlar, onu kötü biçimde yeniden icat etmeye mahkûmdur.” ~Henry Spencer
Geliştiricilere yönelik makinelerin neredeyse hepsinde SSH sunucusu kurulu ve erişilebilir durumda
Neden SSH terminali 1960’lardan kalma sadece metin gösteren bir çöp gibi görünmek zorunda? Neden SSH üzerinden aktarılabilecek en iyi hedef TUI olmak zorunda? Neden terminalde 4K film izleyemiyor ya da pinch zoom ile web’de gezinemiyoruz?
Linux dizinlerini SSH üzerinden yerel UI bileşenleri olarak görme fikri mesela fena görünmüyor
Ama bazı kısımlar da
sshfsmount’u gibi zaten başka yollarla çözülmüş problemlere benziyorYıllar önce programlanabilir termostatlar hakkında bir yazı okumuştum. Çok derin yapılandırmaya izin verecek kadar güçlülerdi ama çoğu insan için kullanımları korkunçtu. Ana fikir şuna yakındı: “İnsanlar sizin anlaşılmaz sisteminizi öğrenmek istemiyor; o sistemin vaat ettiği faydayı istiyor.” İyi bir UI, bu boşluğu en aza indirmeyi bilmelidir
Grafik uygulamaların frontend ve backend’ini ayırma fikri güzel. Ama yeni saymak zor; belki benim kaçırdığım bir şey vardır
X11Forwarding yesya dahtml5 web appbilmiyor gibi görünüyorTarayıcının Unix soketine bağlanması gibi özellikler, aşırı niş sayıldıkları için reddedilegeldi
Bunun uygulanmama nedeni güvenlikti. En azından ham Unix soketleri için böyle; WebSocket ya da HTTP ile sınırlı başka portlar ise mümkün
Tarayıcının herhangi bir sokete bağlanmasına izin verilemez. Birçok soket açıkça tarayıcı bağlantısı istemez ya da tarayıcının bağlanabileceği gerçeğinin farkında bile değildir
Bu yüzden bir tür izin listesi eklemek gerekir ve o noktada da bu kadar niş bir özellik için iş fazla karmaşık hâle gelir
Yani asıl mesele niş olmasıydı diye düşünüyorum
Bu arada Outer Loop bir izin listesi ekliyor: https://outerloop.sh/unix-domain-sockets/
Burada Outer Shell’in nasıl çalıştığını anlamaya çalışıyorum. Web sitesinde motivasyonu şöyle açıklıyorlar
Jupyter veya TensorBoard gibi uygulamalar uzak bir sunucuda çalışıyorsa genelde standart web tarayıcısında görünmez. Çünkü bu uygulamaları tüm internete açık bırakmak çok risklidir. Bunun yerine sunucunun yerel portlarında çalışırlar ve benim bilgisayarım bunlara doğrudan erişemez
Geleneksel olarak bunlara erişmek için yeni bir terminal açıp
ssh -L 24601:localhost:8889 mrcslws@lambda4.mycompany.com &,ssh -L 24602:localhost:6006 mrcslws@lambda4.mycompany.com &gibi komutlar çalıştırmak gerekiyordu deniyorBu doğru mu? Genelde böyle SSH yönlendirmelerini yalnızca prototipleme sırasında kullanıp, dağıtıma geçtiğinde
myjupyternotebook.comgibi bir site kurup başkalarının erişememesi için kimlik doğrulama eklemez misiniz? HTTP temel kimlik doğrulaması da o kadar büyük bir mesele değilHTTP yerine SSH üzerinden erişime açmak istiyorsanız, bunu VPN ya da tünel arkasına koymak gibi başka seçenekler de var
Outer Loop çok havalı ama neden gerekli olduğunu pek anlamıyorum. Bir şeyi kaçırıyor olmalıyım; neden yapıldığını anlamama yardımcı olursanız sevinirim
Ben daha çok derin öğrenme deneyleri, GPU çekirdek optimizasyonu ve robot geliştirme gibi kullanım alanlarına yakınım. Robot da hareket eden bir sunucudan ibaret ve bu gibi durumlarda açıkça uzak bilgisayar kullanıyoruz
Bu kümedeki insanlara bu aracın önerilen akıştan daha sezgisel gelmesi muhtemel. Ama belki de kendi düşüncelerimi yansıtıyorumdur
Bana bunun var olabilecek temel şeylerden biri gibi geldiğini söyleyebilirim. Bir tür uzak öncelikli grafik işletim sistemi hissi veriyor
ssh -D 4711 -q -C -N user@hostBu durumda
localhost:4711, tarayıcınızda belirtebileceğiniz bir SOCKS5 proxy olurElbette WireGuard VPN daha iyidir. Her şeyden önce SSH, tek bir TCP bağlantısı üzerinde çoklama yaptığı için, bir paket kaybolursa yeniden iletilene kadar tüm yönlendirilmiş trafik head-of-line blocking yaşar
Yazarın Cockpit’i hiç duymamış gibi göründüğünü düşünüyorum
“Yok” ya da “yeni” denilen şeylerin hepsi 10 yılı aşkın süredir Cockpit’te vardı. Soket tabanlı web sunucusu bağlantıları, sunucu uygulamalarında arka uç-ön uç ayrımı, hatta kabuk erişimi içeren bir sunucu konsolu fikri bile buna dahil
“Bunun hâlâ olmaması garip değil mi?” sorusuna hayır derim. Çünkü bu zaten uzun zamandır var
İçtenlikle,
HN yönerge polisi :-)
https://news.ycombinator.com/newsguidelines.html
Güzel yazı. Kendi araştırmam için bunu yer imlerine ekleyeceğim
Terminalimdeki “clickity clackity” işlevi [0] yerel makineye bağlı, bu yüzden uzaktaki bir sisteme geçtiğim anda grafik tarafı kayboluyor
Bu durum çevrimdışı tekrar oynatma [1] sayesinde yavaş yavaş değişiyor. Yerel GUI ile TUI’nin birlikte çalışıp geri sarma gibi özelliklerin önünü açması şeklinde. Ama hâlâ gidilecek çok yol var ve başkalarının bunu düzgün biçimde denediğini görmek güzel. Terminal ciddi biçimde ihmal edilmiş bir alan
[0] https://terminal.click
[1] https://terminal.click/posts/2026/06/tui-stability/#:~:text=...
Terminale alışkın insanlar, üniversitede bunu öğrenmemiş biri için SSH’nin ne kadar düşmanca olduğunu unutuyor
Bu, VPS yöneten küçük bir ekibin platform mühendisi işe almadan giriş engelini düşürmesine yardımcı olursa başarılı sayılır. Yalnız anahtarları ve jump host’ları nasıl ele aldıklarını merak ediyorum
Harika. Kesinlikle doğru yöne gidiyor
Ön uç ile arka uç arasındaki ayrım katmanı, mümkün olan en küçük “parça”dan kesilmelidir
Burada laf sokan pek çok kişi, gecikmeyi ve ek yükü bizzat “hissederse” bunu anlayacaktır. Veriyi tek tek kullanım durumlarına uygun şekilde dikkatle bölmek konusunda yeterince düşünülmemiş
Dahası, demoda “ayarları sık sık değiştirerek yük oluşturduğu” söylenen
topuygulamasında, istemci tarafında daha fazla render işleminin JIT yapılması gerektiğini düşünüyorum. Böylece Pi ile istemci arasında gidip gelen bilgipsçıktısının sıkıştırılmış delta’sı kadar azaltılabilirdiBu yapılmamalı. Tarayıcıya genel soket izinleri verilmemesinin arkasında hem eski ve çok sağlam güvenlik gerekçeleri hem de web kontrol düzlemi izolasyonu ile ilgili çok sayıda neden var
Mekanik olarak en yakın benzetme, 3 tekerlekli ATV’lerin neden kötü bir fikir olduğudur
Soketler varsayılan olarak engellenmeli ve yalnızca sunucu tarafında açıkça izin listesine eklendikten sonra açılabilmeli
Gerçek bir sudo farkındalığı olmalı; böylece sudo parolası olmadan root soketlerine erişilememeli. Bunun önemli olmasının nedeni, aksi halde insanları kullanıcı erişimine açık soketler üzerinde root arka uçları çalıştırmaya teşvik etmesidir
Ayrıntılar burada: https://outerloop.sh/security/