Python WebSSH kullanarak tarayıcınızdan terminale nasıl bağlanılır

0 Hisse senetleri
0
0
0
0

giriiş

Genellikle, bir SSH sunucusuna bağlanmak için SSH istemcisi içeren bir terminal veya terminal emülatör yazılımındaki bir komut satırı aracı kullanılır. Python'daki WebSSH gibi bazı araçlar, SSH üzerinden bağlanmanıza ve bir terminali doğrudan bir web tarayıcısında çalıştırmanıza olanak tanır.

Bu özellik çeşitli durumlarda kullanışlıdır. Özellikle canlı sunumlarda veya demolarda, normal bir terminal penceresinin kolayca anlaşılabilir bir şekilde paylaşılmasının zor olduğu durumlarda faydalıdır. Ayrıca, komut satırına aşina olmayan kişilere erişim sağlamak için eğitim ortamlarında da kullanışlıdır, çünkü makinelerine yazılım yüklemeyi gerektirmez (özellikle varsayılan seçeneklerin sorunlu olduğu Windows'ta). Son olarak, Python WebSSH oldukça taşınabilirdir ve Python dışında başka bir bağımlılık kurulumu gerektirmez. Diğer web tabanlı terminal yığınları daha karmaşık ve Linux'a özgü olabilir.

Bu eğitimde, WebSSH'yi kuracak ve tarayıcınızda SSH üzerinden bağlanacaksınız. Ardından, isteğe bağlı olarak bir SSL sertifikasıyla güvenliğini sağlayacak ve üretimde dağıtım için bir Nginx ters proxy'sinin arkasına yerleştireceksiniz.

Ön koşullar
  • SSH hizmetinin çalıştığı bir Windows, Mac veya Linux ortamı. WebSSH'yi yerel olarak çalıştırmak kullanışlıdır, ancak yerel makinenizde bir SSH hizmeti yoksa, uzak bir Linux sunucusu kullanabilirsiniz.
  • Python programlama dili, paket yöneticisi olan pip ile yüklenir. Ubuntu'ya Python ve pip yüklemek için bu eğitimin ilk bölümüne başvurabilirsiniz.
  • İsteğe bağlı olarak, tarayıcıda HTTPS'yi etkinleştirmek için SSL sertifikalarına ve alan adınıza ihtiyacınız olacak. Bunları Certbot'u bağımsız modda kullanarak edinebilirsiniz.

Adım 1 – WebSSH'yi yükleyin

Python ve pip yüklüyse, Python paketlerini PyPI'dan (Python yazılım deposu) yükleyebilmelisiniz. WebSSH, doğrudan komut satırından yüklenip çalıştırılacak şekilde tasarlanmıştır, bu nedenle aşağıdaki gibi başka bir sanal ortam kurmanıza gerek yoktur. Python 3 kurulum eğitimi Tartışıldığı gibi, hayır. Sanal ortamlar sistem araçları yüklerken değil, kendi projeleriniz üzerinde çalışırken daha faydalıdır.

WebSSH paketini yüklemek için aşağıdaki komutu kullanın:

sudo pip3 install webssh

Çıktı aşağıdaki gibi olmalıdır:

Output
…
Successfully built webssh
Installing collected packages: tornado, pycparser, cffi, pynacl, paramiko, webssh
Successfully installed cffi-1.15.1 paramiko-2.11.0 pycparser-2.21 pynacl-1.5.0 tornado-6.2 webssh-1.6.0

Sudo kullanmak wssh komutunu global olarak kuracaktır. wssh'nin nereye kurulduğunu "which" komutunu kullanarak kontrol edebilirsiniz:

which wssh

Çıktı aşağıdaki gibi olmalıdır:

/usr/local/bin/wssh

Artık WebSSH'yi kurdunuz. Ardından, çalıştırıp bağlanacaksınız. Ancak önce bir güvenlik duvarı kuralı eklemeniz gerekiyor. WebSSH varsayılan olarak 8888 numaralı bağlantı noktasında çalışır. Güvenlik duvarınız olarak UFW kullanıyorsanız, bu bağlantı noktasına UFW aracılığıyla izin verin:

sudo ufw allow 8888

Adım 2 – WebSSH'yi çalıştırın ve ona bağlanın

WebSSH'yi yerel bir bilgisayarda çalıştırıyorsanız, wssh komutunu herhangi bir ek argüman olmadan çalıştırabilirsiniz. WebSSH'yi uzak bir sunucuda çalıştırıyorsanız, -s seçeneğini kullanmalısınız. --fbidhttp=Yanlış HTTP üzerinden uzak bağlantılara izin vermek için kullanılır. Güvenli olmayan bir ağ kullanıyorsanız bu bağlantı güvenli değildir, ancak bir demo için kullanışlıdır ve sonraki adımlarda WebSSH'yi güvenli hale getireceksiniz.

wssh --fbidhttp=False

Artık WebSSH'ye bağlanıp giriş yapabilirsiniz. Adresinde etki_alanınız:8888 Web tarayıcınızda şuraya gidin (yerel olarak çalıştırıyorsanız, şuradan): yerel ana bilgisayar:8888 WebSSH giriş sayfası görüntülenmelidir.

Her zamanki SSH kimlik bilgilerinizi girin. DigitalOcean sunucu kurulum kılavuzunu takip ettiyseniz, parola değil, anahtar tabanlı kimlik doğrulaması kullanıyor olmalısınız. Yani, yalnızca sunucu ana bilgisayar adını, kullanıcı adınızı ve klasörde olması gereken SSH anahtarını belirtmeniz yeterlidir. .ssh/ ana dizininizde bulunur (genellikle şu şekilde adlandırılır) id_rsa (dir).

Not: Ana bilgisayar adını manuel olarak belirttiğinizden de tahmin edebileceğiniz gibi, WebSSH, çalıştığı sunucunun dışındaki sunuculara bağlanmak için de kullanılabilir. Bu eğitimde, bağlandığınız sunucuda çalışacaktır.

Bağlanmak için butona tıklayın. Bağlamak Tıklayın ve varsayılan terminal karşılama ekranınızı görmelisiniz.

Bu noktada, SSH üzerinden bağlanıyormuş gibi terminalinizi her zamanki gibi kullanabilirsiniz. Birden fazla kullanıcı aynı anda bir WebSSH örneği üzerinden de bağlanabilir. Yerel bir bilgisayarda yalnızca video akışı veya kaydı için WebSSH kullanıyorsanız buna ihtiyacınız olabilir. WebSSH'yi başlattığınız terminalde (WebSSH terminalinde değil) Ctrl+C tuşlarına basarak, WebSSH sunucusunun bağlantısı kesildiğinde onu durdurabilirsiniz.

Uzak bir sunucuda çalışıyorsanız, güvenli olmayan bir HTTP bağlantısının arkasında üretimde WebSSH kullanmak istemezsiniz. SSH hizmetinin kimlik doğrulama mekanizması tarafından korunuyor olsanız da, HTTP üzerinden SSH bağlantısı kullanmak önemli bir güvenlik riski taşır ve başkalarının SSH kimlik bilgilerinizi çalmasına neden olabilir. Sonraki adımlarda, WebSSH örneğinizi, normal bir SSH bağlantısından daha az güvenli olmayacak şekilde güvence altına alacaksınız.

Adım 3 – (İsteğe bağlı) SSL Sertifikasıyla WebSSH'yi Güvenli Hale Getirin

Bu adımı tamamlamak için alan adınızı ve SSL sertifikalarınızı almış olmanız gerekir. Bir yol, Certbot'u bağımsız modda kullanmaktır.

Sertifikaları aldıktan sonra aşağıdaki yolda bulunduklarını doğrulayın:

sudo ls /etc/letsencrypt/live/your_domain

WebSSH'yi HTTPS desteğiyle çalıştırmak için, ona sertifika ve anahtar yolunu sağlamanız gerekir:

sudo wssh --certfile='/etc/letsencrypt/live/alan_adınız/fullchain.pem' --keyfile='/etc/letsencrypt/live/alan_adınız/privkey.pem''

Web tarayıcınızda şuraya gidin: https://alan_adınız:4433 Devam edin ve önceki adımda gördüğünüz arayüzün aynısını, artık HTTPS desteğiyle göreceksiniz.

Adım 4 – (İsteğe bağlı) Nginx ters proxy'sinin arkasında WebSSH çalıştırın

Web uygulamalarınızın önüne Nginx gibi bir web sunucusu yerleştirerek performansı artırabilir ve site güvenliğini basitleştirebilirsiniz. Nginx'i kuracak ve WebSSH'ye proxy isteklerini geri çevirecek şekilde yapılandıracaksınız.

Öncelikle paket listenizi güncelleyin, ardından Nginx'i kurun:

sudo apt update nginx
sudo apt install nginx

Eğer ufw güvenlik duvarını kullanıyorsanız, varsayılan HTTP/HTTPS bağlantı noktalarına (80 ve 443 bağlantı noktaları) erişime izin vermek için yapılandırmasını değiştirmeniz gerekir:

sudo ufw allow “Nginx Full”

Ardından Nginx yapılandırma dosyasını yola kopyalayın /etc/nginx/siteler-kullanılabilir/webssh Yaratmak:

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

Aşağıdakine benzer bir yapılandırma girin:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name your_domain www.your_domain
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/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}

Bu yapılandırmayı üç ana "blok" olarak okuyabilirsiniz. location/ satırından önceki ilk blok, bir web sitesine varsayılan HTTP portu olan 80 üzerinden hizmet vermek için bir Nginx yapılandırması içerir. location/ bloğu, gelen bağlantıları dahili olarak 8888 portu üzerinden çalışan ve SSL'i koruyan WebSSH'ye proxy olarak bağlamak için yapılandırmayı içerir. Dosyanın sonunda, location/ bloğundan sonraki yapılandırma, LetsEncrypt SSL anahtar çiftlerinizi yükler ve HTTP bağlantılarını HTTPS'ye yönlendirir.

Dosyayı kaydedip kapatın. Nano kullanıyorsanız, Ctrl+X tuşlarına basın, ardından Y tuşuna ve istendiğinde Enter tuşuna basın.

Ardından, bu yeni yapılandırmayı etkinleştirmeniz gerekir. Nginx'in kuralı, sites/ dizinindeki dosyalardan sites-enabled/ adlı başka bir klasöre sembolik bağlantılar (kısayollar gibi) oluşturmaktır. Netlik sağlamak için tam yolları kullanarak şu bağlantıyı oluşturun:

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

Varsayılan olarak Nginx, /etc/nginx/sites-available/default dizininde, varsayılan dizin sayfasını da sağlayan /etc/nginx/sites-enabled/default dizinine bağlı başka bir yapılandırma dosyası içerir. Yeni WebSSH yapılandırmanızla çakıştığı için bu kuralı /sites-enabled dizininden kaldırarak devre dışı bırakmak isteyebilirsiniz:

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

Not: Bu eğitimdeki Nginx yapılandırması, tek bir uygulamaya (WebSSH) hizmet verecek şekilde tasarlanmıştır. Nginx belgelerini takip ederek bu Nginx yapılandırmasını tek bir sunucuda birden fazla uygulamaya hizmet verecek şekilde genişletebilirsiniz.

Daha sonra Nginx yapılandırmasını test edin:

sudo nginx -t
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ve Nginx servisini yeniden başlatın:

sudo systemctl restart nginx

Son olarak, daha önce doğrudan WebSSH erişimi için oluşturduğunuz güvenlik duvarı kurallarını kaldırabilirsiniz; çünkü tüm trafik artık standart HTTP/HTTPS portları üzerinden Nginx tarafından işlenecektir:

sudo ufw delete allow 8888
sudo ufw delete allow 4433

Bu sefer sertifika ve anahtar yollarını girmenize gerek yok, çünkü Nginx bunu halledecektir. Ardından, bir web tarayıcısında your_domain adresine gidin.

WebSSH'nin artık bir port belirtmeye gerek kalmadan Nginx üzerinden HTTPS üzerinden sunulduğunu unutmayın. Bu noktada, wssh kurulumu hariç her şeyi otomatikleştirmiş oldunuz. Bunu son adımda yapacaksınız.

Adım 5 – (İsteğe bağlı) WebSSH için bir Systemd Hizmeti Oluşturun

Arka planda otomatik olarak çalışmayan sunucu taraflı uygulamaları dağıtmak, her seferinde doğrudan komut satırından başlatmanız gerektiğinden, başlangıçta pratik olmayabilir. Çözüm, kendi arka plan servisinizi başlatmaktır.

Bunu yapmak için, sunucunuzun başlatma sistemi tarafından kullanılabilecek tek bir dosya oluşturmanız gerekir. Hemen hemen tüm modern Linux dağıtımlarında başlatma sistemine Systemd adı verilir ve systemctl komutunu kullanarak bu sistemle etkileşim kurabilirsiniz.

WebSSH terminalinizde hala çalışıyorsa, durdurmak için Ctrl+C tuşlarına basın. Ardından nano veya favori metin düzenleyicinizi kullanarak /etc/systemd/system/webssh.service adlı yeni bir dosya açın:

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

Birim dosyanızda en az bir [Birim] bölümü, bir [Hizmet] bölümü ve bir [Kurulum] bölümü bulunmalıdır:

[Unit]
Description=WebSSH terminal interface
After=network.target
[Service]
User=www-data
Group=www-data
ExecStart=wssh
[Install]
WantedBy=multi-user.target

Bu dosya aşağıdaki şekilde bölünebilir:

  • [Birim] bölümü, yeni servisinizin düz metin açıklamasını ve sistem başlangıcında, bu durumda sunucunuzun ağ arayüzleri açıldıktan sonra, ne zaman çalışması gerektiğini belirten bir Sonra kancasını içerir.
  • [Service] bölümü, hangi komutun ve hangi kullanıcının çalıştırılacağını belirtir. Bu durumda, www-data Ubuntu sunucusundaki varsayılan Nginx kullanıcısıdır ve wssh komutun kendisidir.
  • [install] bölümü yalnızca WantedBy=multi-user.target satırını içerir; bu, sunucunun kullanıcı oturum açmalarını kabul etmeye hazır olduğunda hizmetin başlamasını sağlamak için [unit] bölümündeki After satırıyla birlikte çalışır.

Dosyayı kaydettikten sonra servisi başlatın ve sistem başlangıcında çalışmasını sağlayın:

sudo systemctl start webssh
sudo systemctl enable webssh

Başarılı bir şekilde başlatıldığını doğrulamak için systemctl status webssh komutunu kullanın. Komutu terminalde ilk çalıştırdığınızda aldığınız çıktıyla aynı çıktıyı almalısınız.

sudo systemctl status webssh
Output
● webssh.service - WebSSH terminal interface
Loaded: loaded (/etc/systemd/system/webssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-08-11 22:08:25 UTC; 2s ago
Main PID: 15678 (wssh)
Tasks: 1 (limit: 1119)
Memory: 20.2M
CPU: 300ms
CGroup: /system.slice/webssh.service
└─15678 /usr/bin/python3 /usr/local/bin/wssh
Aug 11 22:08:25 webssh22 systemd[1]: Started WebSSH terminal interface.
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 settings:125] WarningPolicy
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 main:38] Listening on :8888 (http)

Artık tarayıcınızda https://your_domain adresini yeniden yükleyebilir ve WebSSH arayüzüne tekrar erişebilirsiniz. Bundan sonra WebSSH ve Nginx sunucunuzla birlikte otomatik olarak yeniden başlatılacak ve arka planda çalışacaktır.

Sonuç

Bu eğitimde, WebSSH'yi kurdunuz ve bir web tarayıcısında komut satırı arayüzü sağlamak için taşınabilir bir çözüm sundunuz. Ardından, SSL, bir Nginx ters proxy'si ekleyerek ve bir systemd hizmeti oluşturarak dağıtımını geliştirdiniz. Bu model, özellikle kimlik doğrulama için anahtar çiftleri kullanan SSH güvenliği bağlamında, küçük sunucu tarafı uygulamalarının dağıtımı için oldukça kullanışlıdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz