Uygulama

WebSSH – Linux Terminalini Web Tarayıcınızdan Bağlayın

Çoğu Linux kullanıcısı için, bir SSH istemcisi aracılığıyla uzak sunuculara bağlanmanın geleneksel yaklaşımı her zaman bir komut satırı ortamı aracılığıyla olmuştur. Ancak WebSSH, Python’da yazılmış ve xterm.js, paramiko ve tornado’ya dayalı, kullanımı kolay bir web arabirimi sağlayarak istemciden sunucuya SSH bağlantısını basitleştirir.

WebSSH Özellikleri

  • Chrome, Edge, Firefox, Opera ve Safari gibi modern tarayıcıları destekler.
  • Yeniden boyutlandırılabilir bir terminal Penceresi uygular.
  • Hedef SSH sunucusunun varsayılan kodlaması otomatik olarak algılanır.
  • Tam ekran terminali destekler.
  • İki Faktörlü Kimlik Doğrulamayı destekler.
  • Şifreli anahtarları destekler.
  • DSA RSA ECDSA Ed25519 anahtarlarının dahil edilmesiyle SSH ortak anahtar kimlik doğrulamasını destekler.
  • Boş parolaların eklenmesiyle SSH parola doğrulamasını destekler.

Adım 1 – WebSSH Bağımlılıklarının Kurulması (Python ve PIP)

Python, WebSSH’yi kurmadan ve kullanmadan önce büyük bir gereksinim olduğundan, sisteminizde kurulu olduğundan emin olmanız gerekir.

$ sudo apt install python3         [On Debian, Ubuntu and Mint]
$ sudo yum install python3         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a dev-lang/python   [On Gentoo Linux]
$ sudo apk add python3             [On Alpine Linux]
$ sudo pacman -S python3           [On Arch Linux]
$ sudo zypper install python3      [On OpenSUSE]    

Ardından, sisteme Python modüllerini ve kitaplıklarını kurmak için kullanılan Python PIP’yi kurmanız gerekiyor.

$ sudo apt install python3         [On Debian, Ubuntu and Mint]
$ sudo yum install python3         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a dev-lang/python   [On Gentoo Linux]
$ sudo apk add python3             [On Alpine Linux]
$ sudo pacman -S python3           [On Arch Linux]
$ sudo zypper install python3      [On OpenSUSE]    

Kurulduktan sonra aşağıdaki komutları kullanarak Python ve PIP sürümlerini onaylayabilirsiniz.

$ python3 -V
$ pip --version
Check Python and PIP Versions
Python ve PIP Sürümlerini Kontrol Edin

Adım 2 – Linux’ta WebSSH Kurulumu

Sisteminizde Python ve Python PIP kuruluyken, sonunda WebSSH’yi kurabiliriz:

$ pip3 install webssh 
Install WebSSH in Linux
WebSSH’yi Linux’a yükleyin

Yüklü WebSSH sürümünü aşağıdakileri çalıştırarak onaylayın:

$ wssh --version

1.6.0

Adım 3 – WebSSH Kullanarak Web Tarayıcısından Linux Terminaline Bağlanma

WebSSH’yi yerel bir sisteme yüklediyseniz, aşağıdaki komutu çalıştırarak WebSSH’yi başlatabilirsiniz.

$ wssh

WebSSH’yi uzak bir Linux sistemine kurduysanız, aşağıdaki komuta, varsayılan olarak güvenli olmayan HTTP protokolü üzerinden uzak bağlantılara izin verecek ek bir parametre eklemeniz gerekir, bu nedenle HTTPS’yi etkinleştirerek güvenli hale getirmeniz gerekir, makalede daha sonra tartışıldığı gibi.

$ wssh --fbidhttp=False
Start WebSSH in Linux
Linux’ta WebSSH’yi başlatın

Yukarıdaki ekran görüntüsünde gösterildiği gibi, güvenlik duvarınızda izin verilmesi gereken bağlantı noktası 8888’i kullanacağız.

$ sudo ufw allow 8888
veya
$ sudo firewall-cmd --zone=public --add-port=8888/tcp

Web Tarayıcınızda, gösterildiği gibi normal SSH kimlik bilgilerini sağlayarak WebSSH’ye bağlanmak için aşağıdaki adrese gidin.

http://127.0.0.1:8888
veya
http://your_domain:8888
Connect WebSSH in Linux
WebSSH’yi Linux’ta bağlayın

Anahtar tabanlı kimlik doğrulama için, genellikle ~/.ssh klasöründe bulunan SSH anahtar dosyanızı yükleyin. Dosyayı yüklemeden önce gizli dosyaları ve dizinleri göstermek için Ctrl+h klavye kısayolunu kullanın.

Uzak makinenize başarıyla bağlandıktan sonra, aşağıdaki tarayıcı arayüzü ile karşılaşacaksınız:

Connect to SSH from Web Browser Using WebSSH
WebSSH Kullanarak Web Tarayıcısından SSH’ye Bağlanma

Adım 4 – WebSSH’nin SSL Sertifikası ile Güvenliğini Sağlama

Bu adım, kayıtlı bir etki alanı adınız ve etkin bir LetsEncrypt SSL Sertifikanız olduğunu varsayar. Alan adınızla ilişkili SSL sertifikaları, dizin konumunda olmalıdır:

/etc/letsencrypt/live/your_domain_name

Bu dizindeki sertifika dosyalarınız bir .pem dosya uzantısına sahip olacaktır, örneğin fullchain.pem ve privkey.pem.

WebSSH’nin HTTPS desteği ile çalışması için sertifika dosyasına (fullchain.pem) ve anahtar dosyasına (privkey.pem) giden yol sağlanmalıdır.

İlk olarak, güvenlik duvarınızın WebSSH tarafından HTTPS erişimi için kullanılan 4433 numaralı bağlantı noktasına izin verdiğinden emin olun:

$ sudo ufw allow 4433
veya
$ sudo firewall-cmd --zone=public --add-port=4433/tcp

Buradan, WebSSH sunucusunu etki alanı adı sertifikasına ve anahtar dosyalarına yönlendirerek başlatın:

$ sudo wssh --certfile='/etc/letsencrypt/live/your_domain_name/fullchain.pem' --keyfile='/etc/letsencrypt/live/your_domain_name/privkey.pem'

WebSSH web tarayıcı arayüzüne HTTPS aracılığıyla erişmek için şunları uygulayın:

https://127.0.0.1:4433
veya
https://your_domain:4433

Adım 5 – WebSSH’yi Nginx Ters Proxy Arkasında Çalıştırma

Bu adımda, WebSSH’ye yapılan kullanıcı istekleri Nginx (Ters Proxy) tarafından işlenecektir, bunun çalışması için Nginx’i bir ters proxy olarak yüklemeniz ve yapılandırmanız gerekir.

$ sudo apt install nginx             [On Debian, Ubuntu and Mint]
$ sudo yum install nginx             [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a www-servers/nginx   [On Gentoo Linux]
$ sudo apk add nginx                 [On Alpine Linux]
$ sudo pacman -S nginx               [On Arch Linux]
$ sudo zypper install nginx          [On OpenSUSE]    

Ardından, Nginx’in güvenlik duvarınızdaki 80 ve 443 numaralı bağlantı noktalarına erişmesine izin verin.

$ sudo ufw allow “Nginx Full”
veya
$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

WebSSH için Nginx yapılandırması oluşturun:

$ sudo nano /etc/nginx/sites-available/webssh

Aşağıdaki bilgileri yapıştırın ve alan_adınız_adı, gerçek alan adınızla değiştirin:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name your_domain_name www.your_domain_name
    root /var/www/html;

    access_log /var/log/nginx/webssh.access.log;
    error_log /var/log/nginx/webssh.error.log;

    location / {
        proxy_pass http://127.0.0.1:8888;
        proxy_http_version 1.1;
        proxy_read_timeout 300;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
    }

    listen 443 ssl;
    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/your_domain_name/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain_name/privkey.pem;

    # For Redirecting non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

webssh yapılandırma dosyasını etkinleştirin:

$ sudo ln -s /etc/nginx/sites-available/webssh /etc/nginx/sites-enabled/webssh

Yeni oluşturulan Nginx WebSSH yapılandırma dosyasıyla çakışmaları önlemek için Nginx varsayılan yapılandırma dosyasını kaldırın:

$ sudo rm /etc/nginx/sites-enabled/default

Nginx yapılandırmasını doğrulayın:

$ sudo nginx -t 

Nginx tüm trafiği yöneteceğinden, güvenlik duvarı kurallarınızdan 8888 ve 4433 bağlantı noktalarını da kaldırabilirsiniz.

Sertifika ve anahtar dosyalarının yollarını belirtmeden WebSSH’yi yeniden başlatın.

$ wssh 

Buradan, artık bir bağlantı noktası belirtmeden web tarayıcınızdan alan adınıza doğrudan erişebilirsiniz.

https://your_domain_name 

Adım 6 – WebSSH Systemd Dosyası Oluşturma

Şu ana kadar wssh sunucusunu bir komut satırı ortamı kullanarak sistemden başlatmak dışında tüm adımları otomatikleştirdik. Bu adımı otomatikleştirmek için bir arka plan hizmeti kurmamız gerekiyor.

Bir birim dosyası oluşturup wssh sunucusunu Ctrl+C klavye tuşları ile hala çalışıyorsa kapatmamız gerekiyor.

Create a WebSSH service file:

$ sudo nano /etc/systemd/system/webssh.service

Dosyaya şunları ekleyin:

[Unit]
Description=WebSSH terminal interface
After=network.target

[Service]
User=www-data
Group=www-data
ExecStart=wssh

[Install]
WantedBy=multi-user.target

[Service] altındaki ExecStart değeri aşağıdakiler çalıştırılarak bulunabilir:

$ whereis wssh

wssh: /home/linuxbrew/.linuxbrew/bin/wssh

Yukarıdaki durumda, değer girişi şöyle olacaktır:

[Service]
User=www-data
Group=www-data
ExecStart=/home/linuxbrew/.linuxbrew/bin/wssh

Artık aşağıdaki komutlarla WebSSH’yi başlatabilir ve etkinleştirebiliriz:

$ sudo systemctl start webssh
$ sudo systemctl enable webssh
$ sudo systemctl status webssh
Check WebSSH in Linux
Linux’ta WebSSH’yi kontrol edin

Alan adı URL’nizi (http://alan_adiniz_adınız) her yeniden yüklediğinizde, arka planda WebSSH ve Nginx’in çalıştığı yeni bir WebSSH oturumu kullanabileceksiniz.

WebSSH, uzak makinelerinize modern ve güvenli bir Web Tarayıcısının rahatlığından erişmenizi ve yönetmenizi esnek bir şekilde kolaylaştırır.

Yazının orijinalini buradan okuyabilirsiniz.