مقدمة
عادةً، تُستخدم أداة سطر أوامر في محطة طرفية أو برنامج محاكاة محطة طرفية يتضمن عميل SSH للاتصال بخادم SSH. بعض الأدوات، مثل WebSSH في بايثون، تتيح لك الاتصال عبر SSH وتشغيل محطة طرفية مباشرةً في متصفح الويب.
هذه الميزة مفيدة في مواقف متنوعة. وهي مفيدة بشكل خاص في العروض التقديمية المباشرة أو العروض التوضيحية حيث يصعب مشاركة نافذة طرفية عادية بطريقة سهلة الفهم. كما أنها مفيدة في البيئات التعليمية عند توفير إمكانية الوصول للأشخاص غير الملمين بسطر الأوامر، حيث لا تتطلب تثبيت أي برامج على أجهزتهم (خاصةً على نظام ويندوز، حيث تُعدّ الخيارات الافتراضية صعبة الاستخدام). وأخيرًا، يتميز Python WebSSH بسهولة الحمل، ولا يتطلب أي تبعيات أخرى لإعداده، باستثناء Python. قد تكون مجموعات الطرفية الأخرى القائمة على الويب أكثر تعقيدًا ومخصصة لنظام Linux.
في هذا البرنامج التعليمي، ستقوم بإعداد WebSSH والاتصال به عبر SSH في متصفحك. بعد ذلك، يمكنك تأمينه بشهادة SSL، ووضعه خلف وكيل Nginx العكسي للنشر في بيئة الإنتاج.
المتطلبات الأساسية
- بيئة ويندوز، ماك، أو لينكس مع خدمة SSH قيد التشغيل. من المفيد تشغيل WebSSH محليًا، ولكن إذا لم تكن لديك خدمة SSH على جهازك المحلي، يمكنك استخدام خادم لينكس بعيد.
- يتم تثبيت لغة برمجة بايثون مع مدير الحزم pip. لتثبيت بايثون و pip على أوبونتو، يُرجى مراجعة الجزء الأول من هذا الدليل.
- اختياريًا، لتفعيل HTTPS في المتصفح، ستحتاج إلى شهادات SSL واسم نطاقك. يمكنك الحصول عليها باستخدام Certbot في الوضع المستقل.
الخطوة 1 – تثبيت WebSSH
إذا كان لديك بايثون و pip مثبتين، فيمكنك تثبيت حزم بايثون من PyPI (مستودع برامج بايثون). صُمم WebSSH ليتم تثبيته وتشغيله مباشرةً من سطر الأوامر، لذا لا حاجة لإعداد بيئة افتراضية أخرى مثل تلك الموجودة في دليل تثبيت Python 3 كما ذكرنا سابقًا، لا. البيئات الافتراضية أكثر فائدة عند العمل على مشاريعك الخاصة، وليس عند تثبيت أدوات النظام.
لتثبيت حزمة WebSSH، استخدم الأمر التالي:
sudo pip3 install websshيجب أن يكون الناتج على النحو التالي:
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، سيتم تثبيت أمر wssh عالميًا. يمكنك التحقق من مكان تثبيت wssh باستخدام أمر which:
which wsshيجب أن يبدو الإخراج كالتالي:
/usr/local/bin/wsshتم تثبيت WebSSH الآن. بعد ذلك، قم بتشغيله والاتصال به. مع ذلك، يجب عليك إضافة قاعدة جدار حماية أولًا. يعمل WebSSH على المنفذ 8888 افتراضيًا. إذا كنت تستخدم ufw كجدار حماية، فاسمح لهذا المنفذ بالمرور عبر ufw:
sudo ufw allow 8888
الخطوة 2 - تشغيل WebSSH والاتصال به
إذا كنت تشغّل WebSSH على جهاز محلي، يمكنك تشغيل الأمر wssh دون أي وسيطات إضافية. أما إذا كنت تشغّل WebSSH على خادم بعيد، فيجب عليك استخدام الخيار -s. --fbidhttp=خطأ استخدمه للسماح بالاتصالات عن بُعد عبر HTTP. هذا الاتصال غير آمن إذا كنت تستخدم شبكة غير آمنة، ولكنه مفيد للعرض التوضيحي، وستتمكن من تأمين WebSSH في الخطوات التالية.
wssh --fbidhttp=Falseالآن يمكنك الاتصال بـ WebSSH وتسجيل الدخول. على العنوان نطاقك: 8888 في متصفح الويب الخاص بك، انتقل إلى (إذا كنت تقوم بالتشغيل محليًا، من) المضيف المحلي: 8888 يجب أن تظهر صفحة تسجيل الدخول WebSSH.
أدخل بيانات اعتماد SSH المعتادة. إذا اتبعت دليل إعداد خادم DigitalOcean، فيجب عليك استخدام مصادقة تعتمد على المفتاح، وليس كلمات المرور. لذا، ما عليك سوى تحديد اسم مضيف الخادم، واسم المستخدم، ومفتاح SSH، والذي يجب أن يكون موجودًا في المجلد. .ssh/ يقع في دليل منزلك (عادةً ما يُسمى معرف rsa يكون).
ملاحظة: كما قد تتخيل من تحديد اسم المضيف يدويًا، يمكن استخدام WebSSH أيضًا للاتصال بخوادم أخرى غير الخادم الذي يعمل عليه. في هذا البرنامج التعليمي، سيتم تشغيله على نفس الخادم الذي تتصل به.
للاتصال، انقر على الزر. يتصل انقر فوق ذلك وستظهر لك شاشة الترحيب الافتراضية الخاصة بجهازك.
في هذه المرحلة، يمكنك استخدام جهازك الطرفي كالمعتاد، كما لو كنت متصلاً عبر SSH. يمكن أيضًا لعدة مستخدمين الاتصال عبر مثيل WebSSH في آنٍ واحد. قد تحتاج إلى هذا إذا كان لديك WebSSH على جهاز محلي فقط لبث الفيديو أو تسجيله. يمكنك الضغط على Ctrl+C في الجهاز الطرفي الذي شغّلت فيه WebSSH (وليس جهاز WebSSH الطرفي) لإيقاف خادم WebSSH عند انتهاء عمله.
إذا كنت تعمل على خادم بعيد، فلا يُنصح باستخدام WebSSH في بيئة الإنتاج عبر اتصال HTTP غير آمن. مع أنك لا تزال محميًا بآلية مصادقة خدمة SSH، إلا أن استخدام اتصال SSH عبر HTTP ينطوي على مخاطر أمنية كبيرة، وقد يسمح للآخرين بسرقة بيانات اعتماد SSH الخاصة بك. في الخطوات التالية، ستؤمّن نسخة WebSSH الخاصة بك بحيث لا تقل أمانًا عن اتصال SSH العادي.
الخطوة 3 - (اختياري) تأمين WebSSH باستخدام شهادة SSL
لإكمال هذه الخطوة، يجب أن تكون قد حصلتَ على نطاقك وشهادات SSL. إحدى الطرق هي استخدام Certbot في الوضع المستقل.
بعد استلام الشهادات، تأكد من أنها موجودة في المسار التالي:
sudo ls /etc/letsencrypt/live/your_domainلتشغيل WebSSH مع دعم HTTPS، تحتاج إلى توفير المسار إلى الشهادة والمفتاح:
sudo wssh --certfile='/etc/letsencrypt/live/your_domain/fullchain.pem' --keyfile='/etc/letsencrypt/live/your_domain/privkey.pem''في متصفح الويب الخاص بك، انتقل إلى https://نطاقك:4433 استمر ويجب أن ترى نفس الواجهة التي رأيتها في الخطوة السابقة، الآن مع دعم HTTPS.
الخطوة 4 - (اختياري) تشغيل WebSSH خلف وكيل Nginx العكسي
بوضع خادم ويب مثل Nginx أمام تطبيقات الويب الخاصة بك، يمكنك تحسين الأداء وتبسيط أمان موقعك. ستقوم بتثبيت Nginx وتهيئته لعكس طلبات الوكيل إلى WebSSH.
أولاً، قم بتحديث قائمة الحزم الخاصة بك، ثم قم بتثبيت Nginx:
sudo apt update nginx
sudo apt install nginxإذا كنت تستخدم جدار الحماية ufw، فأنت بحاجة إلى تغيير تكوينه للسماح بالوصول إلى منافذ HTTP/HTTPS الافتراضية (المنافذ 80 و443):
sudo ufw allow “Nginx Full”ثم قم بنسخ ملف تكوين Nginx إلى المسار /etc/nginx/sites-available/webssh يخلق:
sudo nano /etc/nginx/sites-available/websshأدخل التكوين المشابه لما يلي:
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;
}
}يمكنك فهم هذا التكوين على أنه يتكون من ثلاث كتل رئيسية. تحتوي الكتلة الأولى، قبل سطر location/، على تكوين Nginx لخدمة موقع ويب على منفذ HTTP الافتراضي، 80. تحتوي كتلة location/ على تكوين وكيل للاتصالات الواردة إلى WebSSH، والذي يعمل داخليًا على المنفذ 8888، مع الحفاظ على SSL. يقوم التكوين الموجود في نهاية الملف، بعد كتلة location/، بتحميل أزواج مفاتيح LetsEncrypt SSL وإعادة توجيه اتصالات HTTP إلى HTTPS.
احفظ الملف وأغلقه. إذا كنت تستخدم nano، فاضغط على Ctrl+X، ثم Y، ثم Enter عند المطالبة.
بعد ذلك، عليك تفعيل هذا التكوين الجديد. تنصّ قواعد Nginx على إنشاء روابط رمزية (مثل الاختصارات) من الملفات في sites/ إلى مجلد آخر يُسمى sites-enabled/ عند تفعيلها أو تعطيلها. أنشئ هذا الرابط، مع استخدام المسارات الكاملة للتوضيح:
sudo ln -s /etc/nginx/sites-available/webssh /etc/nginx/sites-enabled/websshافتراضيًا، يتضمن Nginx ملف تكوين آخر في /etc/nginx/sites-available/default مرتبطًا بـ /etc/nginx/sites-enabled/default، والذي يوفر أيضًا صفحة الفهرس الافتراضية. يمكنك تعطيل هذه القاعدة بإزالتها من /sites-enabled، نظرًا لتعارضها مع تكوين WebSSH الجديد:
sudo rm /etc/nginx/sites-enabled/default
ملاحظة: صُمم إعداد Nginx في هذا البرنامج التعليمي لخدمة تطبيق واحد، وهو WebSSH. يمكنك توسيع هذا الإعداد لخدمة تطبيقات متعددة على خادم واحد باتباع وثائق Nginx.
ثم اختبر تكوين Nginx:
sudo nginx -tOutput
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulوأعد تشغيل خدمة Nginx:
sudo systemctl restart nginxأخيرًا، يمكنك إزالة قواعد جدار الحماية التي قمت بإنشائها مسبقًا للوصول المباشر إلى WebSSH، حيث سيتم الآن التعامل مع كافة حركة المرور بواسطة Nginx عبر منافذ HTTP/HTTPS القياسية:
sudo ufw delete allow 8888
sudo ufw delete allow 4433هذه المرة، لستَ بحاجة إلى توفير مسارات الشهادات والمفتاح، لأن Nginx سيتولى ذلك. بعد ذلك، انتقل إلى your_domain في متصفح الويب.
لاحظ أن WebSSH يُقدّم الآن عبر HTTPS عبر Nginx دون الحاجة إلى تحديد منفذ. عند هذه النقطة، تكون قد أتمتت كل شيء باستثناء إعداد WSSH نفسه. ستفعل ذلك في الخطوة الأخيرة.
الخطوة 5 - (اختياري) إنشاء خدمة Systemd لـ WebSSH
قد يكون نشر تطبيقات الخادم التي لا تعمل تلقائيًا في الخلفية غير عملي في البداية، إذ يتعين عليك تشغيلها مباشرةً من سطر الأوامر في كل مرة. الحل هو تشغيل خدمة خلفية خاصة بك.
للقيام بذلك، أنشئ ملفًا واحدًا يمكن لنظام التهيئة (init) الخاص بخادمك استخدامه. في معظم توزيعات لينكس الحديثة، يُسمى نظام التهيئة Systemd، ويمكنك التفاعل معه باستخدام الأمر systemctl.
إذا كان WebSSH لا يزال يعمل في جهازك الطرفي، فاضغط على Ctrl+C لإيقافه. ثم، باستخدام nano أو محرر النصوص المفضل لديك، افتح ملفًا جديدًا باسم /etc/systemd/system/webssh.service:
sudo nano /etc/systemd/system/webssh.service
يحتاج ملف الوحدة الخاص بك إلى قسم [الوحدة] واحد على الأقل، وقسم [الخدمة] واحد، وقسم [التثبيت] واحد:
[Unit]
Description=WebSSH terminal interface
After=network.target
[Service]
User=www-data
Group=www-data
ExecStart=wssh
[Install]
WantedBy=multi-user.targetيمكن تقسيم هذا الملف على النحو التالي:
- يحتوي قسم [الوحدة] على وصف نصي عادي لخدمتك الجديدة بالإضافة إلى خطاف After الذي يحدد متى يجب تشغيلها عند بدء تشغيل النظام، في هذه الحالة بعد ظهور واجهات شبكة الخادم لديك.
- يُحدد قسم [الخدمة] الأمر المطلوب تنفيذه والمستخدم المطلوب تنفيذه. في هذه الحالة، يكون www-data هو مستخدم Nginx الافتراضي على خادم أوبونتو، وwssh هو الأمر نفسه.
- يحتوي قسم [install] فقط على السطر WantedBy=multi-user.target، والذي يعمل بالتزامن مع السطر After في قسم [unit] لضمان بدء الخدمة عندما يكون الخادم جاهزًا لقبول عمليات تسجيل دخول المستخدم.
بعد حفظ الملف، قم بتشغيل الخدمة وتمكينها للتشغيل عند بدء تشغيل النظام:
sudo systemctl start webssh
sudo systemctl enable websshاستخدم systemctl status webssh للتحقق من نجاح بدء التشغيل. من المفترض أن تحصل على نفس النتيجة التي حصلت عليها عند تشغيل الأمر لأول مرة في الطرفية.
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)يمكنك الآن إعادة تحميل https://your_domain في متصفحك، وستظهر لك واجهة WebSSH مرة أخرى. من الآن فصاعدًا، سيُعاد تشغيل WebSSH وNginx تلقائيًا مع خادمك وسيعملان في الخلفية.
نتيجة
في هذا البرنامج التعليمي، ثبّتتَ WebSSH وقدّمتَ حلاًّ محمولاً لتوفير واجهة سطر أوامر في متصفح الويب. ثم عزّزتَ نشره بإضافة SSL، ووكيل عكسي لـ Nginx، وإنشاء خدمة systemd. يُعدّ هذا النموذج مفيدًا جدًا لنشر تطبيقات الخادم الصغيرة، خاصةً في سياق أمان SSH الذي يستخدم أزواج المفاتيح للمصادقة.











