{"id":32467,"date":"2025-10-22T04:41:02","date_gmt":"2025-10-22T01:41:02","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32467"},"modified":"2025-10-22T04:41:02","modified_gmt":"2025-10-22T01:41:02","slug":"python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/","title":{"rendered":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, sistem y\u00f6neticileri, geli\u015ftiriciler ve teknik profesyoneller i\u00e7in uzak sunuculara eri\u015fim ve y\u00f6netimi hayati \u00f6nem ta\u015f\u0131maktad\u0131r. Geleneksel olarak bu i\u015flem, Secure Shell (SSH) protokol\u00fc arac\u0131l\u0131\u011f\u0131yla bir terminal em\u00fclat\u00f6r\u00fc kullan\u0131larak ger\u00e7ekle\u015ftirilir. Ancak, bazen bir masa\u00fcst\u00fc uygulamas\u0131 kurma imkan\u0131 olmayan veya sadece taray\u0131c\u0131 \u00fczerinden h\u0131zl\u0131 ve pratik bir eri\u015fim arayan kullan\u0131c\u0131lar i\u00e7in bu y\u00f6ntem yetersiz kalabilir. \u0130\u015fte tam da bu noktada, Python WebSSH gibi \u00e7\u00f6z\u00fcmler devreye girer.<\/p>\n<p>Python WebSSH, SSH ba\u011flant\u0131lar\u0131n\u0131 bir web taray\u0131c\u0131s\u0131 \u00fczerinden sa\u011flamak i\u00e7in tasarlanm\u0131\u015f a\u00e7\u0131k kaynakl\u0131 bir projedir. Bu ara\u00e7, SSH oturumlar\u0131n\u0131 WebSocket protokol\u00fc \u00fczerinden bir web aray\u00fcz\u00fcne ta\u015f\u0131r, b\u00f6ylece kullan\u0131c\u0131lar herhangi bir \u00f6zel yaz\u0131l\u0131ma ihtiya\u00e7 duymadan, yaln\u0131zca bir web taray\u0131c\u0131s\u0131 kullanarak uzak sunucular\u0131na ba\u011flanabilirler. Bu makale, Python WebSSH&#8217;nin ne oldu\u011funu, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, kurulumunu, yap\u0131land\u0131rmas\u0131n\u0131, g\u00fcvenlik konular\u0131n\u0131 ve \u00fcretim ortam\u0131nda da\u011f\u0131t\u0131m\u0131n\u0131 detayl\u0131 bir \u015fekilde ele alacakt\u0131r. Amac\u0131m\u0131z, okuyuculara WebSSH&#8217;yi kendi sistemlerinde etkin bir \u015fekilde kullanabilmeleri i\u00e7in kapsaml\u0131 bir rehber sunmakt\u0131r.<\/p>\n<h3>Temel Kavramlar<\/h3>\n<p>Python WebSSH&#8217;nin alt\u0131nda yatan teknolojileri anlamak, projenin potansiyelini ve kullan\u0131m alanlar\u0131n\u0131 daha iyi kavramam\u0131z\u0131 sa\u011flayacakt\u0131r. Bu b\u00f6l\u00fcmde, SSH, WebSockets ve Python&#8217;\u0131n bu projedeki rollerini inceleyece\u011fiz.<\/p>\n<h4>SSH Nedir?<\/h4>\n<p>Secure Shell (SSH), a\u011f hizmetlerini g\u00fcvenli olmayan bir a\u011f \u00fczerinde g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir kriptografik a\u011f protokol\u00fcd\u00fcr. En yayg\u0131n kullan\u0131m\u0131, uzak bilgisayar sistemlerine komut sat\u0131r\u0131 eri\u015fimi sa\u011flamakt\u0131r. SSH, istemci ile sunucu aras\u0131ndaki t\u00fcm ileti\u015fimi \u015fifreleyerek veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve gizlili\u011fini sa\u011flar. Kimlik do\u011frulama genellikle parola veya SSH anahtarlar\u0131 (genellikle RSA veya ED25519) kullan\u0131larak yap\u0131l\u0131r. SSH, sistem y\u00f6neticileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r ve sunucu y\u00f6netimi, dosya transferi (SFTP) ve t\u00fcnelleme gibi bir\u00e7ok g\u00f6revi yerine getirmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>WebSockets Nedir?<\/h4>\n<p>WebSockets, web taray\u0131c\u0131lar\u0131 ve sunucular aras\u0131nda tam \u00e7ift y\u00f6nl\u00fc (full-duplex) ileti\u015fim kanallar\u0131 a\u00e7an geli\u015fmi\u015f bir ileti\u015fim protokol\u00fcd\u00fcr. Geleneksel HTTP protokol\u00fcnden farkl\u0131 olarak, WebSockets kal\u0131c\u0131 bir ba\u011flant\u0131 kurar ve bu ba\u011flant\u0131 \u00fczerinden istemci ile sunucu aras\u0131nda s\u00fcrekli ve d\u00fc\u015f\u00fck gecikmeli veri al\u0131\u015fveri\u015fi sa\u011flar. Bu \u00f6zellik, ger\u00e7ek zamanl\u0131 uygulamalar (sohbet, oyunlar, canl\u0131 veri ak\u0131\u015flar\u0131) i\u00e7in idealdir. WebSSH ba\u011flam\u0131nda, WebSocket ba\u011flant\u0131s\u0131, taray\u0131c\u0131daki terminal em\u00fclat\u00f6r\u00fc ile WebSSH sunucusu aras\u0131nda SSH oturumunun giri\u015f\/\u00e7\u0131k\u0131\u015f\u0131n\u0131 aktarmak i\u00e7in kullan\u0131l\u0131r. Taray\u0131c\u0131dan g\u00f6nderilen her tu\u015f vuru\u015fu WebSocket \u00fczerinden WebSSH sunucusuna iletilir, o da bunu SSH sunucusuna aktar\u0131r ve SSH sunucusundan gelen yan\u0131tlar yine WebSocket \u00fczerinden taray\u0131c\u0131ya geri g\u00f6nderilir.<\/p>\n<h4>Neden Python?<\/h4>\n<p>Python, basit s\u00f6zdizimi, geni\u015f standart k\u00fct\u00fcphanesi ve b\u00fcy\u00fck geli\u015ftirici toplulu\u011fu sayesinde bir\u00e7ok farkl\u0131 alanda pop\u00fcler bir programlama dilidir. WebSSH projesi i\u00e7in Python&#8217;\u0131n se\u00e7ilmesinin birka\u00e7 nedeni vard\u0131r:<\/p>\n<p>*   <strong>Kolay Geli\u015ftirme:<\/strong> Python&#8217;\u0131n okunabilirli\u011fi ve geli\u015ftirme h\u0131z\u0131, WebSSH gibi bir arac\u0131 h\u0131zl\u0131ca prototiplemek ve geli\u015ftirmek i\u00e7in idealdir.<br \/>\n*   <strong>Zengin K\u00fct\u00fcphane Ekosistemi:<\/strong> Python, SSH ba\u011flant\u0131lar\u0131 (paramiko gibi), WebSocket sunucular\u0131 (websockets, tornado gibi) ve web \u00e7er\u00e7eveleri (Flask, Django gibi) i\u00e7in g\u00fc\u00e7l\u00fc k\u00fct\u00fcphanelere sahiptir. Bu k\u00fct\u00fcphaneler, WebSSH&#8217;nin temel i\u015flevselli\u011fini kolayca entegre etmesini sa\u011flar.<br \/>\n*   <strong>\u00c7apraz Platform Deste\u011fi:<\/strong> Python, Windows, Linux ve macOS dahil olmak \u00fczere bir\u00e7ok farkl\u0131 i\u015fletim sisteminde \u00e7al\u0131\u015fabilir, bu da WebSSH&#8217;nin \u00e7e\u015fitli ortamlarda da\u011f\u0131t\u0131lmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Python WebSSH Projesi<\/h4>\n<p>Python WebSSH, yukar\u0131da bahsedilen teknolojileri bir araya getirerek, SSH oturumlar\u0131n\u0131 web tabanl\u0131 bir aray\u00fcze ta\u015f\u0131yan bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Temel olarak, bir Python uygulamas\u0131 olarak \u00e7al\u0131\u015f\u0131r ve bir web sunucusu (genellikle Tornado veya benzeri bir asenkron \u00e7er\u00e7eve) \u00fczerinde bir WebSocket sunucusu bar\u0131nd\u0131r\u0131r. Taray\u0131c\u0131daki JavaScript tabanl\u0131 bir terminal em\u00fclat\u00f6r\u00fc (xterm.js gibi), bu WebSocket sunucusuna ba\u011flan\u0131r. WebSSH sunucusu, gelen WebSocket ba\u011flant\u0131s\u0131n\u0131 al\u0131r ve ard\u0131ndan arka u\u00e7ta ger\u00e7ek bir SSH ba\u011flant\u0131s\u0131 kurar. Taray\u0131c\u0131dan gelen terminal giri\u015fleri (tu\u015f vuru\u015flar\u0131), WebSocket \u00fczerinden WebSSH sunucusuna, oradan da SSH sunucusuna iletilir. SSH sunucusundan gelen terminal \u00e7\u0131k\u0131\u015flar\u0131 ise ayn\u0131 yol \u00fczerinden tersine hareket ederek taray\u0131c\u0131daki terminalde g\u00f6r\u00fcnt\u00fclenir. Bu sayede, kullan\u0131c\u0131lar tamamen web tabanl\u0131 bir ortamda uzak sunucular\u0131yla etkile\u015fim kurabilirler.<\/p>\n<h3>Gereksinimler<\/h3>\n<p>Python WebSSH&#8217;yi kullanmaya ba\u015flamadan \u00f6nce, sisteminizde belirli gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olman\u0131z gerekir.<\/p>\n<p>*   <strong>Python:<\/strong> WebSSH bir Python uygulamas\u0131 oldu\u011fu i\u00e7in, sisteminizde Python&#8217;\u0131n kurulu olmas\u0131 \u015fartt\u0131r. Genellikle Python 3.6 veya \u00fczeri bir s\u00fcr\u00fcm \u00f6nerilir. Python&#8217;\u0131n kurulu olup olmad\u0131\u011f\u0131n\u0131 <code>python3 --version<\/code> komutu ile kontrol edebilirsiniz. Kurulu de\u011filse, i\u015fletim sisteminizin paket y\u00f6neticisi (apt, yum, brew vb.) veya Python&#8217;\u0131n resmi web sitesinden indirebilirsiniz.<br \/>\n*   <strong>pip:<\/strong> Python paket y\u00fckleyicisi pip, WebSSH&#8217;yi kurmak i\u00e7in kullan\u0131lacakt\u0131r. Genellikle Python ile birlikte gelir. <code>pip3 --version<\/code> komutu ile kontrol edebilirsiniz.<br \/>\n*   <strong>Bir SSH Sunucusu:<\/strong> WebSSH&#8217;nin ba\u011flanaca\u011f\u0131 en az bir uzak SSH sunucusu (\u00f6rne\u011fin, bir Linux sunucusu) gereklidir. Bu sunucunun SSH ba\u011flant\u0131lar\u0131na izin verecek \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan ve eri\u015fim kimlik bilgilerine (kullan\u0131c\u0131 ad\u0131\/parola veya SSH anahtar\u0131) sahip oldu\u011funuzdan emin olun.<br \/>\n*   <strong>Temel Komut Sat\u0131r\u0131 Bilgisi:<\/strong> Kurulum ve yap\u0131land\u0131rma ad\u0131mlar\u0131 i\u00e7in temel komut sat\u0131r\u0131 bilgisi faydal\u0131 olacakt\u0131r.<br \/>\n*   <strong>Modern Bir Web Taray\u0131c\u0131s\u0131:<\/strong> WebSSH&#8217;nin web aray\u00fcz\u00fcn\u00fc kullanmak i\u00e7in WebSocket&#8217;leri destekleyen g\u00fcncel bir web taray\u0131c\u0131s\u0131 (Chrome, Firefox, Edge, Safari vb.) gereklidir.<\/p>\n<h3>Kurulum ve Temel Yap\u0131land\u0131rma<\/h3>\n<p>Python WebSSH&#8217;nin kurulumu olduk\u00e7a basittir. pip kullanarak birka\u00e7 ad\u0131mda kurulumu tamamlayabilir ve temel bir ba\u011flant\u0131 kurabilirsiniz.<\/p>\n<h4>Kurulum Ad\u0131mlar\u0131<\/h4>\n<p>1.  <strong>Sanal Ortam Olu\u015fturma (\u00d6nerilen):<\/strong> Python projeleri i\u00e7in sanal ortamlar olu\u015fturmak iyi bir uygulamad\u0131r. Bu, proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n sistem genelindeki Python kurulumunuzu etkilemesini \u00f6nler.<\/p>\n<pre><code class=\"language-bash\">python3 -m venv webssh_env\n    source webssh_env\/bin\/activate<\/code><\/pre>\n<p>    Bu komutlar <code>webssh_env<\/code> ad\u0131nda bir sanal ortam olu\u015fturur ve onu etkinle\u015ftirir. Art\u0131k terminalinizde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz <code>(webssh_env)<\/code> \u00f6n eki, sanal ortam\u0131n aktif oldu\u011funu g\u00f6sterir.<\/p>\n<p>2.  <strong>WebSSH Paketini Y\u00fckleme:<\/strong> Sanal ortam etkinle\u015ftirildikten sonra, WebSSH paketini pip ile y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">pip install webssh<\/code><\/pre>\n<p>    Bu komut, WebSSH&#8217;nin kendisini ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (\u00f6rne\u011fin, <code>paramiko<\/code> SSH k\u00fct\u00fcphanesi ve <code>tornado<\/code> web \u00e7er\u00e7evesi) y\u00fckleyecektir.<\/p>\n<h4>Temel Kullan\u0131m ve \u0130lk Ba\u011flant\u0131<\/h4>\n<p>WebSSH y\u00fcklendikten sonra, basit bir komutla sunucuyu ba\u015flatabilir ve taray\u0131c\u0131n\u0131zdan eri\u015febilirsiniz.<\/p>\n<p>1.  <strong>WebSSH Sunucusunu Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">webssh --port 8888 --host 0.0.0.0<\/code><\/pre>\n<p>    *   <code>--port 8888<\/code>: WebSSH sunucusunun 8888 numaral\u0131 portu dinlemesini sa\u011flar. Farkl\u0131 bir port kullanmak isterseniz bu de\u011feri de\u011fi\u015ftirebilirsiniz.<br \/>\n    *   <code>--host 0.0.0.0<\/code>: WebSSH sunucusunun t\u00fcm a\u011f aray\u00fczlerinden eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. Yaln\u0131zca yerel eri\u015fim i\u00e7in <code>127.0.0.1<\/code> kullanabilirsiniz.<\/p>\n<p>    Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, terminalde WebSSH sunucusunun ba\u015flad\u0131\u011f\u0131na dair bir mesaj g\u00f6rmelisiniz.<\/p>\n<p>2.  <strong>Taray\u0131c\u0131dan Ba\u011flanma:<\/strong><\/p>\n<p>    WebSSH sunucusu \u00e7al\u0131\u015f\u0131rken, web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki adrese gidin:<\/p>\n<pre><code class=\"language-\">http:\/\/localhost:8888<\/code><\/pre>\n<p>    E\u011fer <code>--host 0.0.0.0<\/code> ile ba\u015flatt\u0131ysan\u0131z ve ba\u015fka bir makineden eri\u015fiyorsan\u0131z, <code>localhost<\/code> yerine WebSSH sunucusunun IP adresini veya alan ad\u0131n\u0131 kullanman\u0131z gerekir (\u00f6rn. <code>http:\/\/192.168.1.100:8888<\/code>).<\/p>\n<p>    Taray\u0131c\u0131n\u0131zda, uzak SSH sunucusu i\u00e7in ba\u011flant\u0131 bilgilerini girmenizi isteyen basit bir aray\u00fcz g\u00f6rmelisiniz:<\/p>\n<p>    *   <strong>Hostname:<\/strong> Ba\u011flanmak istedi\u011finiz uzak SSH sunucusunun IP adresi veya alan ad\u0131.<br \/>\n    *   <strong>Port:<\/strong> SSH sunucusunun dinledi\u011fi port (genellikle 22).<br \/>\n    *   <strong>Username:<\/strong> SSH sunucusunda oturum a\u00e7mak i\u00e7in kullanaca\u011f\u0131n\u0131z kullan\u0131c\u0131 ad\u0131.<br \/>\n    *   <strong>Password:<\/strong> Kullan\u0131c\u0131 ad\u0131n\u0131n parolas\u0131 (e\u011fer parola tabanl\u0131 kimlik do\u011frulama kullan\u0131yorsan\u0131z).<br \/>\n    *   <strong>Private Key:<\/strong> E\u011fer SSH anahtar tabanl\u0131 kimlik do\u011frulama kullan\u0131yorsan\u0131z, \u00f6zel anahtar\u0131n\u0131z\u0131n i\u00e7eri\u011fini buraya yap\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<p>    Bilgileri girdikten sonra &#8220;Connect&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n. Ba\u015far\u0131l\u0131 bir ba\u011flant\u0131 durumunda, taray\u0131c\u0131n\u0131zda uzak sunucunun terminaline eri\u015febilece\u011finiz bir komut istemi g\u00f6r\u00fcnecektir. Art\u0131k komutlar\u0131 yazabilir, dosyalara eri\u015febilir ve uzak sunucunuzu sanki yerel bir terminalden eri\u015fiyormu\u015f gibi y\u00f6netebilirsiniz.<\/p>\n<p>3.  <strong>Sanal Ortamdan \u00c7\u0131k\u0131\u015f:<\/strong> \u0130\u015finiz bitti\u011finde, sanal ortamdan \u00e7\u0131kmak i\u00e7in <code>deactivate<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">deactivate<\/code><\/pre>\n<h3>Geli\u015fmi\u015f Yap\u0131land\u0131rma ve Kullan\u0131m<\/h3>\n<p>Python WebSSH, temel kullan\u0131m\u0131n \u00f6tesinde, daha g\u00fcvenli ve esnek ba\u011flant\u0131lar kurmak i\u00e7in \u00e7e\u015fitli geli\u015fmi\u015f yap\u0131land\u0131rma se\u00e7enekleri sunar.<\/p>\n<h4>Kimlik Do\u011frulama Y\u00f6ntemleri<\/h4>\n<p>WebSSH, SSH&#8217;nin destekledi\u011fi farkl\u0131 kimlik do\u011frulama y\u00f6ntemlerini kullanabilir.<\/p>\n<p>*   <strong>Parola Tabanl\u0131 Kimlik Do\u011frulama:<\/strong> En basit y\u00f6ntemdir ve genellikle WebSSH&#8217;nin varsay\u0131lan aray\u00fcz\u00fcnde kullan\u0131lan se\u00e7enektir. Kullan\u0131c\u0131 ad\u0131 ve parola girerek ba\u011flan\u0131rs\u0131n\u0131z.<br \/>\n*   <strong>Anahtar Tabanl\u0131 Kimlik Do\u011frulama:<\/strong> Daha g\u00fcvenli ve \u00f6nerilen bir y\u00f6ntemdir. \u00d6zel SSH anahtar dosyan\u0131z\u0131n i\u00e7eri\u011fini WebSSH aray\u00fcz\u00fcndeki &#8220;Private Key&#8221; alan\u0131na yap\u0131\u015ft\u0131rabilirsiniz.<br \/>\n    *   <strong>Anahtar Dosyas\u0131 Kullan\u0131m\u0131:<\/strong> WebSSH sunucusunu ba\u015flat\u0131rken belirli bir anahtar dosyas\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, anahtar\u0131 her seferinde kopyalay\u0131p yap\u0131\u015ft\u0131rmak yerine, WebSSH sunucusunun \u00f6nceden tan\u0131mlanm\u0131\u015f bir anahtarla ba\u011flant\u0131 kurmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">webssh --port 8888 --host 0.0.0.0 --keyfile \/path\/to\/your\/id_rsa --passphrase \"your_key_passphrase\"<\/code><\/pre>\n<p>        *   <code>--keyfile<\/code>: SSH \u00f6zel anahtar dosyan\u0131z\u0131n yolunu belirtir.<br \/>\n        *   <code>--passphrase<\/code>: E\u011fer \u00f6zel anahtar\u0131n\u0131z bir parola ile korunuyorsa, bu parolay\u0131 belirtmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>    *   <strong>Ortam De\u011fi\u015fkenleri ile Anahtar:<\/strong> G\u00fcvenlik nedeniyle anahtar i\u00e7eri\u011fini komut sat\u0131r\u0131nda veya yap\u0131land\u0131rma dosyas\u0131nda tutmak istemiyorsan\u0131z, anahtar i\u00e7eri\u011fini bir ortam de\u011fi\u015fkeni olarak ayarlayabilirsiniz. Ancak bu genellikle WebSSH&#8217;nin aray\u00fcz\u00fcne anahtar\u0131 yap\u0131\u015ft\u0131rmak kadar pratik de\u011fildir.<\/p>\n<h4>G\u00fcvenli Ba\u011flant\u0131lar (HTTPS\/WSS)<\/h4>\n<p>WebSSH sunucunuzu herkese a\u00e7\u0131k bir a\u011fda bar\u0131nd\u0131r\u0131yorsan\u0131z veya hassas verilerle \u00e7al\u0131\u015f\u0131yorsan\u0131z, ba\u011flant\u0131lar\u0131n\u0131z\u0131 \u015fifrelemek kritik \u00f6nem ta\u015f\u0131r. WebSSH, HTTPS (web aray\u00fcz\u00fc i\u00e7in) ve WSS (WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in) kullan\u0131larak g\u00fcvenli hale getirilebilir.<\/p>\n<p>1.  <strong>SSL Sertifikas\u0131 Olu\u015fturma:<\/strong><br \/>\n    \u00dcretim ortam\u0131 i\u00e7in Let&#8217;s Encrypt gibi bir sertifika yetkilisinden (CA) al\u0131nm\u0131\u015f ge\u00e7erli bir SSL sertifikas\u0131 kullanman\u0131z \u015fiddetle tavsiye edilir. Test veya dahili kullan\u0131m i\u00e7in kendi kendine imzal\u0131 (self-signed) bir sertifika olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes<\/code><\/pre>\n<p>    Bu komut, <code>key.pem<\/code> (\u00f6zel anahtar) ve <code>cert.pem<\/code> (sertifika) dosyalar\u0131n\u0131 olu\u015fturur.<\/p>\n<p>2.  <strong>WebSSH&#8217;yi SSL ile Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">webssh --port 8888 --host 0.0.0.0 --certfile \/path\/to\/cert.pem --keyfile \/path\/to\/key.pem<\/code><\/pre>\n<p>    *   <code>--certfile<\/code>: SSL sertifika dosyan\u0131z\u0131n yolunu belirtir.<br \/>\n    *   <code>--keyfile<\/code>: SSL \u00f6zel anahtar dosyan\u0131z\u0131n yolunu belirtir.<\/p>\n<p>    Bu \u015fekilde ba\u015flatt\u0131\u011f\u0131n\u0131zda, taray\u0131c\u0131n\u0131zdan <code>https:\/\/localhost:8888<\/code> (veya sunucunuzun IP\/alan ad\u0131) adresine ba\u011flanman\u0131z gerekir. Kendi kendine imzal\u0131 bir sertifika kullan\u0131yorsan\u0131z, taray\u0131c\u0131n\u0131z muhtemelen bir g\u00fcvenlik uyar\u0131s\u0131 g\u00f6sterecektir; bu uyar\u0131y\u0131 kabul etmeniz gerekebilir.<\/p>\n<h4>SSH Proxy ve Jump Host<\/h4>\n<p>Baz\u0131 a\u011f mimarilerinde, do\u011frudan eri\u015filemeyen sunuculara (\u00f6rne\u011fin, g\u00fcvenlik duvar\u0131n\u0131n arkas\u0131ndaki i\u00e7 a\u011f sunucular\u0131) eri\u015fmek i\u00e7in bir &#8220;jump host&#8221; veya SSH proxy sunucusu kullanmak gerekebilir. WebSSH, bu senaryoyu destekler.<\/p>\n<pre><code class=\"language-bash\">webssh --port 8888 --host 0.0.0.0 --proxy-host jump_host_ip --proxy-port 22 --proxy-user jump_host_user<\/code><\/pre>\n<p>*   <code>--proxy-host<\/code>: Jump host&#8217;un IP adresi veya alan ad\u0131.<br \/>\n*   <code>--proxy-port<\/code>: Jump host&#8217;un SSH portu (varsay\u0131lan 22).<br \/>\n*   <code>--proxy-user<\/code>: Jump host&#8217;ta oturum a\u00e7mak i\u00e7in kullan\u0131lacak kullan\u0131c\u0131 ad\u0131.<\/p>\n<p>Bu yap\u0131land\u0131rma ile, WebSSH \u00f6nce <code>jump_host_ip<\/code> adresine ba\u011flan\u0131r ve ard\u0131ndan bu ba\u011flant\u0131 \u00fczerinden as\u0131l hedef sunucuya t\u00fcnel a\u00e7ar. Bu, a\u011f segmentasyonu olan ortamlarda b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<h4>Web Aray\u00fcz\u00fcn\u00fc \u00d6zelle\u015ftirme<\/h4>\n<p>WebSSH&#8217;nin varsay\u0131lan web aray\u00fcz\u00fc genellikle yeterli olsa da, baz\u0131 kullan\u0131c\u0131lar kendi markalar\u0131n\u0131 veya belirli tema ayarlar\u0131n\u0131 entegre etmek isteyebilirler. WebSSH, do\u011frudan bir <code>static-path<\/code> arg\u00fcman\u0131 sunmasa da, kaynak kodunu klonlayarak ve <code>webssh\/static<\/code> dizinindeki dosyalar\u0131 de\u011fi\u015ftirerek veya kendi \u00f6zel frontend uygulaman\u0131z\u0131 yazarak WebSSH&#8217;nin WebSocket API&#8217;sine ba\u011flanarak aray\u00fcz\u00fc \u00f6zelle\u015ftirebilirsiniz. Bu, daha ileri d\u00fczey bir geli\u015ftirme becerisi gerektirir. Xterm.js k\u00fct\u00fcphanesinin bir\u00e7ok tema ve yap\u0131land\u0131rma se\u00e7ene\u011fi bulundu\u011funu unutmay\u0131n, bu da terminal g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc b\u00fcy\u00fck \u00f6l\u00e7\u00fcde etkileyebilir.<\/p>\n<h4>Loglama ve Hata Ay\u0131klama<\/h4>\n<p>WebSSH sunucusunun davran\u0131\u015f\u0131n\u0131 izlemek ve olas\u0131 sorunlar\u0131 gidermek i\u00e7in loglama olduk\u00e7a \u00f6nemlidir. WebSSH, log seviyesini ayarlaman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-bash\">webssh --port 8888 --host 0.0.0.0 --logging debug<\/code><\/pre>\n<p>*   <code>--logging<\/code>: Log seviyesini ayarlar. Olas\u0131 de\u011ferler: <code>debug<\/code>, <code>info<\/code>, <code>warning<\/code>, <code>error<\/code>, <code>critical<\/code>. <code>debug<\/code> en ayr\u0131nt\u0131l\u0131 loglar\u0131 sa\u011flar ve hata ay\u0131klama s\u0131ras\u0131nda faydal\u0131d\u0131r.<\/p>\n<p>Loglar\u0131 d\u00fczenli olarak kontrol etmek, ba\u011flant\u0131 sorunlar\u0131n\u0131, kimlik do\u011frulama hatalar\u0131n\u0131 veya di\u011fer beklenmedik davran\u0131\u015flar\u0131 tespit etmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>\u00dcretim Ortam\u0131nda Da\u011f\u0131t\u0131m<\/h3>\n<p>WebSSH&#8217;yi bir \u00fcretim ortam\u0131nda kullanmay\u0131 planl\u0131yorsan\u0131z, onu g\u00fcvenli, istikrarl\u0131 ve eri\u015filebilir bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in ek ad\u0131mlar atman\u0131z gerekir.<\/p>\n<h4>S\u00fcre\u00e7 Y\u00f6netimi (Systemd, Supervisord)<\/h4>\n<p>WebSSH&#8217;nin bir hizmet olarak arka planda s\u00fcrekli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in bir s\u00fcre\u00e7 y\u00f6neticisi kullanman\u0131z \u00f6nerilir. Linux sistemlerinde <code>systemd<\/code> en yayg\u0131n kullan\u0131lan se\u00e7enektir.<\/p>\n<p><strong>Systemd ile WebSSH&#8217;yi Hizmet Olarak \u00c7al\u0131\u015ft\u0131rma:<\/strong><\/p>\n<p>1.  <strong>Systemd Servis Dosyas\u0131 Olu\u015fturma:<\/strong> <code>\/etc\/systemd\/system\/webssh.service<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-ini\">[Unit]\n    Description=WebSSH Server\n    After=network.target\n\n    [Service]\n    User=webssh_user ; WebSSH'nin \u00e7al\u0131\u015faca\u011f\u0131 kullan\u0131c\u0131y\u0131 belirtin (g\u00fcvenlik i\u00e7in ayr\u0131 bir kullan\u0131c\u0131 olu\u015fturun)\n    Group=webssh_user ; WebSSH'nin \u00e7al\u0131\u015faca\u011f\u0131 grubu belirtin\n    WorkingDirectory=\/opt\/webssh ; WebSSH kurulum dizininiz\n    ExecStart=\/opt\/webssh_env\/bin\/webssh --port 8888 --host 127.0.0.1 --certfile \/etc\/ssl\/certs\/webssh.crt --keyfile \/etc\/ssl\/private\/webssh.key --logging info\n    Restart=always\n    RestartSec=3\n    StandardOutput=syslog\n    StandardError=syslog\n    SyslogIdentifier=webssh\n\n    [Install]\n    WantedBy=multi-user.target<\/code><\/pre>\n<p>    *   <code>webssh_user<\/code>: Bu kullan\u0131c\u0131y\u0131 sisteminizde olu\u015fturman\u0131z ve WebSSH&#8217;nin \u00e7al\u0131\u015ft\u0131\u011f\u0131 dizine (\u00f6rn. <code>\/opt\/webssh<\/code>) ve sertifika\/anahtar dosyalar\u0131na eri\u015fim izni vermeniz gerekir.<br \/>\n    *   <code>WorkingDirectory<\/code>: WebSSH sanal ortam\u0131n\u0131z\u0131n veya projenizin k\u00f6k dizini.<br \/>\n    *   <code>ExecStart<\/code>: WebSSH&#8217;yi ba\u015flatan komut. Kendi \u00f6zel portunuzu, hostunuzu, sertifika ve anahtar dosyalar\u0131n\u0131z\u0131n yollar\u0131n\u0131 burada belirtmeyi unutmay\u0131n. G\u00fcvenlik nedeniyle <code>--host 127.0.0.1<\/code> olarak ayarlayarak WebSSH&#8217;nin yaln\u0131zca yerel makineden eri\u015filebilir olmas\u0131n\u0131 sa\u011flamak ve d\u0131\u015far\u0131dan eri\u015fim i\u00e7in bir ters proxy kullanmak daha iyidir.<\/p>\n<p>2.  <strong>Kullan\u0131c\u0131 ve Dizin Olu\u015fturma (Gerekirse):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo adduser --system --no-create-home webssh_user\n    sudo mkdir -p \/opt\/webssh\n    sudo chown webssh_user:webssh_user \/opt\/webssh\n    # Sanal ortam\u0131 ve sertifikalar\u0131 bu kullan\u0131c\u0131ya eri\u015filebilir yap\u0131n<\/code><\/pre>\n<p>3.  <strong>Systemd Servisini Etkinle\u015ftirme ve Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl daemon-reload\n    sudo systemctl enable webssh.service\n    sudo systemctl start webssh.service\n    sudo systemctl status webssh.service<\/code><\/pre>\n<p>    Bu ad\u0131mlar, WebSSH&#8217;nin sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 ve arka planda bir hizmet olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h4>Ters Proxy (Nginx, Apache)<\/h4>\n<p>Do\u011frudan WebSSH sunucusuna eri\u015fim sa\u011flamak yerine, bir ters proxy (Nginx veya Apache gibi) kullanmak daha iyi bir uygulamad\u0131r. Ters proxy&#8217;ler, SSL sonland\u0131rma, y\u00fck dengeleme, g\u00fcvenlik duvar\u0131 arkas\u0131nda gizleme ve birden fazla hizmeti tek bir port \u00fczerinden sunma gibi avantajlar sa\u011flar. \u00d6zellikle WebSocket ba\u011flant\u0131lar\u0131n\u0131 do\u011fru \u015fekilde iletmek i\u00e7in ters proxy yap\u0131land\u0131rmas\u0131 \u00f6nemlidir.<\/p>\n<p><strong>Nginx ile Ters Proxy Yap\u0131land\u0131rmas\u0131 \u00d6rne\u011fi:<\/strong><\/p>\n<p>1.  <strong>Nginx Kurulumu:<\/strong> Sisteminizde Nginx&#8217;in kurulu oldu\u011fundan emin olun.<\/p>\n<p>2.  <strong>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma:<\/strong> <code>\/etc\/nginx\/sites-available\/webssh.conf<\/code> gibi bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-nginx\">server {\n        listen 80;\n        listen 443 ssl;\n        server_name your_domain.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n        ssl_certificate \/etc\/letsencrypt\/live\/your_domain.com\/fullchain.pem; # SSL sertifika yolunuz\n        ssl_certificate_key \/etc\/letsencrypt\/live\/your_domain.com\/privkey.pem; # SSL anahtar yolunuz\n\n        location \/ {\n            proxy_pass http:\/\/127.0.0.1:8888; # WebSSH'nin dinledi\u011fi i\u00e7 adres ve port\n            proxy_http_version 1.1;\n            proxy_set_header Upgrade $http_upgrade;\n            proxy_set_header Connection \"upgrade\";\n            proxy_set_header Host $host;\n            proxy_set_header X-Real-IP $remote_addr;\n            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n            proxy_set_header X-Forwarded-Proto $scheme;\n            proxy_read_timeout 86400; # Uzun s\u00fcreli ba\u011flant\u0131lar i\u00e7in timeout ayar\u0131\n        }\n    }<\/code><\/pre>\n<p>    *   <code>your_domain.com<\/code>: Kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirin.<br \/>\n    *   <code>ssl_certificate<\/code>, <code>ssl_certificate_key<\/code>: Let&#8217;s Encrypt veya ba\u015fka bir CA&#8217;dan ald\u0131\u011f\u0131n\u0131z sertifika ve anahtar dosyalar\u0131n\u0131n yollar\u0131n\u0131 belirtin.<br \/>\n    *   <code>proxy_pass http:\/\/127.0.0.1:8888<\/code>: WebSSH sunucusunun dinledi\u011fi i\u00e7 IP ve port.<\/p>\n<p>3.  <strong>Yap\u0131land\u0131rmay\u0131 Etkinle\u015ftirme ve Nginx&#8217;i Yeniden Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/webssh.conf \/etc\/nginx\/sites-enabled\/\n    sudo nginx -t # Yap\u0131land\u0131rma dosyas\u0131n\u0131 test et\n    sudo systemctl restart nginx<\/code><\/pre>\n<p>    Art\u0131k <code>https:\/\/your_domain.com<\/code> adresinden WebSSH aray\u00fcz\u00fcne g\u00fcvenli bir \u015fekilde eri\u015febilirsiniz. Nginx, gelen HTTPS\/WSS ba\u011flant\u0131lar\u0131n\u0131 WebSSH&#8217;nin i\u00e7 HTTP\/WS ba\u011flant\u0131s\u0131na y\u00f6nlendirecektir.<\/p>\n<h4>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h4>\n<p>WebSSH gibi bir ara\u00e7, uzak sunucular\u0131n\u0131za do\u011frudan taray\u0131c\u0131 \u00fczerinden eri\u015fim sa\u011flad\u0131\u011f\u0131 i\u00e7in ciddi g\u00fcvenlik riskleri ta\u015f\u0131yabilir. Bu nedenle, da\u011f\u0131t\u0131m yaparken a\u015fa\u011f\u0131daki g\u00fcvenlik ipu\u00e7lar\u0131na dikkat etmek hayati \u00f6nem ta\u015f\u0131r:<\/p>\n<p>*   <strong>Eri\u015fimi K\u0131s\u0131tlay\u0131n:<\/strong> WebSSH sunucusuna yaln\u0131zca g\u00fcvenilir IP adreslerinden veya belirli bir VPN \u00fczerinden eri\u015fime izin vermek i\u00e7in bir g\u00fcvenlik duvar\u0131 (ufw, iptables) yap\u0131land\u0131r\u0131n.<br \/>\n*   <strong>SSL\/TLS Kullan\u0131n:<\/strong> Her zaman HTTPS ve WSS kullan\u0131n. \u00dcretim ortam\u0131nda kendi kendine imzal\u0131 sertifikalar yerine bir CA taraf\u0131ndan imzalanm\u0131\u015f ge\u00e7erli sertifikalar kullan\u0131n (\u00f6rn. Let&#8217;s Encrypt).<br \/>\n*   <strong>G\u00fc\u00e7l\u00fc Kimlik Do\u011frulama:<\/strong><br \/>\n    *   M\u00fcmk\u00fcnse, parola yerine SSH anahtar tabanl\u0131 kimlik do\u011frulama kullan\u0131n.<br \/>\n    *   SSH anahtarlar\u0131n\u0131z\u0131 bir parola (passphrase) ile koruyun.<br \/>\n    *   Zay\u0131f parolalardan ka\u00e7\u0131n\u0131n ve d\u00fczenli olarak de\u011fi\u015ftirin.<br \/>\n*   <strong>Ayr\u0131cal\u0131klar\u0131n K\u0131s\u0131tlanmas\u0131:<\/strong> WebSSH sunucusunu, SSH ba\u011flant\u0131s\u0131 kurmak i\u00e7in minimum gerekli ayr\u0131cal\u0131klara sahip ayr\u0131 bir sistem kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131n (yukar\u0131daki <code>systemd<\/code> \u00f6rne\u011findeki <code>webssh_user<\/code> gibi). Asla root olarak \u00e7al\u0131\u015ft\u0131rmay\u0131n.<br \/>\n*   <strong>G\u00fcncel Tutun:<\/strong> WebSSH&#8217;yi, Python&#8217;\u0131, Nginx&#8217;i ve i\u015fletim sisteminizi d\u00fczenli olarak g\u00fcncelleyerek bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131n.<br \/>\n*   <strong>Loglar\u0131 \u0130zleyin:<\/strong> WebSSH sunucusunun ve hedef SSH sunucular\u0131n\u0131n loglar\u0131n\u0131 d\u00fczenli olarak izleyin. \u015e\u00fcpheli aktivite veya ba\u015far\u0131s\u0131z ba\u011flant\u0131 denemeleri i\u00e7in uyar\u0131lar ayarlay\u0131n.<br \/>\n*   <strong>Hedef SSH Sunucusu G\u00fcvenli\u011fi:<\/strong> WebSSH arac\u0131l\u0131\u011f\u0131yla ba\u011flanaca\u011f\u0131n\u0131z SSH sunucular\u0131n\u0131n kendilerinin de g\u00fcvenli oldu\u011fundan emin olun (g\u00fcvenli SSH yap\u0131land\u0131rmas\u0131, fail2ban, yaln\u0131zca anahtar tabanl\u0131 kimlik do\u011frulama vb.).<br \/>\n*   <strong>Ters Proxy Kullan\u0131m\u0131:<\/strong> Do\u011frudan WebSSH&#8217;yi internete a\u00e7mak yerine bir ters proxy (Nginx, Apache) kullan\u0131n. Bu, g\u00fcvenlik katmanlar\u0131 eklemenin yan\u0131 s\u0131ra SSL sonland\u0131rma ve di\u011fer trafik y\u00f6netimi \u00f6zelliklerini sa\u011flar.<br \/>\n*   <strong>\u0130\u00e7 A\u011f Eri\u015fimi:<\/strong> E\u011fer WebSSH sadece i\u00e7 a\u011fda kullan\u0131lacaksa, onu internete a\u00e7may\u0131n ve sadece i\u00e7 a\u011f IP&#8217;lerinden eri\u015filebilir hale getirin.<\/p>\n<h3>Alternatifler ve Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>Python WebSSH, web tabanl\u0131 terminal eri\u015fimi i\u00e7in harika bir \u00e7\u00f6z\u00fcm olsa da, piyasada ba\u015fka alternatifler de bulunmaktad\u0131r. Bu alternatifleri ve WebSSH&#8217;nin onlara g\u00f6re avantajlar\u0131n\u0131\/dezavantajlar\u0131n\u0131 k\u0131saca inceleyelim:<\/p>\n<p>*   <strong>Shellinabox:<\/strong> C ile yaz\u0131lm\u0131\u015f, daha eski ve k\u00f6kl\u00fc bir projedir. Basit ve hafiftir. Ancak, WebSockets yerine daha geleneksel HTTP tabanl\u0131 bir yakla\u015f\u0131ma sahiptir ve WebSSH kadar modern veya esnek olmayabilir.<br \/>\n*   <strong>GateOne:<\/strong> Python tabanl\u0131 ba\u015fka bir kapsaml\u0131 web terminalidir. \u00c7ok daha fazla \u00f6zellik sunar (dosya transferi, \u00e7oklu sekme, oturum kayd\u0131 vb.), ancak bu da daha karma\u015f\u0131k bir kurulum ve yap\u0131land\u0131rma anlam\u0131na gelir. Daha b\u00fcy\u00fck ve kurumsal ihtiya\u00e7lar i\u00e7in uygun olabilir.<br \/>\n*   <strong>Apache Guacamole:<\/strong> HTML5 tabanl\u0131 bir uzak masa\u00fcst\u00fc a\u011f ge\u00e7ididir. SSH&#8217;nin yan\u0131 s\u0131ra RDP ve VNC gibi di\u011fer protokolleri de destekler. Geni\u015f kapsaml\u0131 bir \u00e7\u00f6z\u00fcm arayanlar i\u00e7in idealdir, ancak kurulumu WebSSH&#8217;den \u00e7ok daha karma\u015f\u0131kt\u0131r.<br \/>\n*   <strong>Custom JavaScript\/WebSocket \u00c7\u00f6z\u00fcmleri:<\/strong> Baz\u0131 geli\u015ftiriciler, kendi \u00f6zel frontend&#8217;lerini (xterm.js ile) ve backend&#8217;lerini (Node.js, Go, Python ile) olu\u015fturmay\u0131 tercih ederler. Bu, maksimum \u00f6zelle\u015ftirme ve kontrol sa\u011flar ancak daha fazla geli\u015ftirme \u00e7abas\u0131 gerektirir.<\/p>\n<p><strong>Python WebSSH&#8217;nin Avantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>Basitlik ve Hafiflik:<\/strong> Kurulumu ve temel kullan\u0131m\u0131 olduk\u00e7a kolayd\u0131r. Minimalist bir aray\u00fcze sahiptir.<br \/>\n*   <strong>Python Ekosistemi:<\/strong> Python geli\u015ftiricileri i\u00e7in tan\u0131d\u0131k ve kolayca geni\u015fletilebilir bir yap\u0131 sunar.<br \/>\n*   <strong>WebSocket Odakl\u0131:<\/strong> Modern web standartlar\u0131n\u0131 (WebSockets) kullanarak d\u00fc\u015f\u00fck gecikmeli ve ger\u00e7ek zamanl\u0131 bir deneyim sa\u011flar.<br \/>\n*   <strong>Esneklik:<\/strong> Geli\u015fmi\u015f kimlik do\u011frulama, SSL ve proxy gibi \u00f6zelliklerle \u00e7e\u015fitli senaryolara uyum sa\u011flayabilir.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>\u00d6zellik Seti:<\/strong> GateOne veya Guacamole gibi daha b\u00fcy\u00fck projelere k\u0131yasla daha az yerle\u015fik \u00f6zelli\u011fe sahiptir (\u00f6rn. dosya transferi aray\u00fcz\u00fc, oturum kayd\u0131).<br \/>\n*   <strong>Frontend \u00d6zelle\u015ftirme:<\/strong> Varsay\u0131lan frontend&#8217;i \u00f6zelle\u015ftirmek, do\u011frudan bir yap\u0131land\u0131rma se\u00e7ene\u011fi yerine kod seviyesinde m\u00fcdahale gerektirebilir.<\/p>\n<p>\u00d6zetle, Python WebSSH, basit, h\u0131zl\u0131 ve g\u00fcvenli bir web tabanl\u0131 SSH terminaline ihtiya\u00e7 duyan kullan\u0131c\u0131lar i\u00e7in m\u00fckemmel bir se\u00e7imdir. \u00d6zellikle Python tabanl\u0131 bir \u00e7\u00f6z\u00fcm arayanlar ve karma\u015f\u0131k \u00f6zelliklere ihtiya\u00e7 duymayanlar i\u00e7in idealdir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Python WebSSH, uzak sunuculara taray\u0131c\u0131 \u00fczerinden eri\u015fim sa\u011flaman\u0131n pratik, esnek ve g\u00fcvenli bir yolunu sunar. Bu makale boyunca, WebSSH&#8217;nin temel \u00e7al\u0131\u015fma prensiplerinden, kurulumuna, geli\u015fmi\u015f yap\u0131land\u0131rma se\u00e7eneklerine ve \u00fcretim ortam\u0131nda da\u011f\u0131t\u0131m\u0131na kadar bir\u00e7ok konuyu detayl\u0131 bir \u015fekilde inceledik.<\/p>\n<p>SSH&#8217;nin g\u00fc\u00e7l\u00fc g\u00fcvenlik \u00f6zelliklerini WebSocket&#8217;in modern web ileti\u015fimi yetenekleriyle birle\u015ftiren WebSSH, sistem y\u00f6neticileri ve geli\u015ftiriciler i\u00e7in \u00f6nemli bir kolayl\u0131k sa\u011flamaktad\u0131r. \u00d6zellikle mobil cihazlardan veya k\u0131s\u0131tl\u0131 ortamlardan sunucu y\u00f6netimi gerekti\u011finde, WebSSH&#8217;nin taray\u0131c\u0131 tabanl\u0131 aray\u00fcz\u00fc vazge\u00e7ilmez bir ara\u00e7 haline gelebilir.<\/p>\n<p>Ancak, bu t\u00fcr bir arac\u0131 kullan\u0131rken g\u00fcvenlik \u00f6nlemlerini asla g\u00f6z ard\u0131 etmemek \u00f6nemlidir. SSL\/TLS kullan\u0131m\u0131, g\u00fc\u00e7l\u00fc kimlik do\u011frulama y\u00f6ntemleri, ayr\u0131cal\u0131klar\u0131n k\u0131s\u0131tlanmas\u0131 ve d\u00fczenli g\u00fcncellemeler, sistemlerinizin g\u00fcvende kalmas\u0131n\u0131 sa\u011flamak i\u00e7in at\u0131lmas\u0131 gereken temel ad\u0131mlard\u0131r. Bir ters proxy ile birlikte kullanmak, ek bir g\u00fcvenlik katman\u0131 ve performans avantajlar\u0131 sunar.<\/p>\n<p>Python WebSSH, basitli\u011fi ve etkinli\u011fi ile \u00f6ne \u00e7\u0131kan bir ara\u00e7t\u0131r. Bu rehberdeki bilgileri kullanarak, kendi WebSSH sunucunuzu g\u00fcvenli ve verimli bir \u015fekilde kurabilir, yap\u0131land\u0131rabilir ve y\u00f6netebilirsiniz. Uzak sunucular\u0131n\u0131za eri\u015fim \u015feklinizi d\u00f6n\u00fc\u015ft\u00fcrmeye ve i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 kolayla\u015ft\u0131rmaya haz\u0131r olun!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, siste","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-32467","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, siste\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T01:41:02+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-22T01:41:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\"},\"wordCount\":3554,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\",\"name\":\"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-22T01:41:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber","og_description":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, siste","og_url":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-22T01:41:02+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-22T01:41:02+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/"},"wordCount":3554,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/","name":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-22T01:41:02+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-webssh-ile-tarayicinizdan-terminal-baglantisi-kurma-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python WebSSH ile Taray\u0131c\u0131n\u0131zdan Terminal Ba\u011flant\u0131s\u0131 Kurma: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32467"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32467\/revisions"}],"predecessor-version":[{"id":32468,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32467\/revisions\/32468"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}