الوثائق
البدء السريع + شرح وظائف كل قسم لكل جهاز (يُحدَّث باستمرار)
بنية SSH Everywhere ومجموعة التقنيات
> يشرح هذا المقال، بأسلوب مبسّط، البنية العامة لـ SSH Everywhere والبروتوكولات ومجموعة التقنيات المستخدمة فيه. وهو موجّه للقرّاء الذين يريدون فهم «كيف يعمل هذا فعلًا»، ويُفهَم دون أي خلفية تقنية.
---
فهم المشروع كله في جملة واحدة
SSH Everywhere هو لوحة شاملة لإدارة الخوادم والأجهزة عن بُعد، بمنافسة 1Panel / Baota. وقدرته الجوهرية هي: أينما وقع جهازك في الشبكة — بوجود IP عام، أو بغياب IP عام (خلف NAT)، أو حتى هاتف أندرويد — يمكنك إدارته من هذه اللوحة الواحدة تمامًا كما تستخدم SSH.
اللوحة نفسها تُنشَر على خادم يملك IP عام (تستمع على 0.0.0.0:5501). تدخل إلى اللوحة من المتصفح، ثم تصل اللوحة إلى كل جهاز هدف عبر «طرق اتصال» مختلفة.
---
البنية الكاملة (رسم واحد يفهمك كل شيء)
┌─────────────────────────────────────────────────────────────┐
│ واجهة المتصفح (تطبيق صفحة واحدة، يحاكي نظام تشغيل بسطح مكتب) │
│ نوافذ سطح المكتب · شريط المهام · قائمة البدء · لوحة بطاقات │
│ · طرفية حقيقية · مكتبة أيقونات · JS خالص (بلا أطر) │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP REST + SocketIO
┌──────────────────────────┴──────────────────────────────────┐
│ خلفية اللوحة (Flask + Flask-SocketIO، Python) │
│ البرنامج الرئيسي · خادم النفق العكسي · خادم SocketIO · نقل الملفات │
│ الحماية من الانهيار · إدارة المواقع · النسخ الاحتياطي · قاعدة SQLite │
└───┬───────────────┬──────────────────┬──────────────────────┘
│ SSH │ نفق عكسي │ SocketIO
│ مباشر/عبر النفق │ (0.0.0.0:4433) │ (عبر HTTP)
▼ ▼ ▼
┌────────┐ ┌──────────────┐ ┌─────────────────┐
│ خادم بـ │ │ Linux بلا IP │ │ هاتف أندرويد │
│ IP عام │ │ عام/NAS/راسبيري│ │ (Termux) │
└────────┘ └──────────────┘ └─────────────────┘
---
أربع طرق اتصال (بروتوكولات)
يستخدم SSH Everywhere داخليًا 4 بروتوكولات، لكل منها دور، وتستهدف أنواعًا مختلفة من الأجهزة:
1. SSH —— القناة الرئيسية
الاستخدام: الوظائف الجوهرية لإدارة كل «خوادم Linux العادية».
- إدارة النظام (نظرة عامة، العمليات، المهام المجدولة، الجدار الناري، Docker، المواقع، مصادر المرايا، الحماية من الانهيار)
- الطرفية (shell تفاعلي)
- إدارة الملفات (رفع/تنزيل/تحرير/ضغط)
- فحص السلامة (CPU/الذاكرة/القرص/الحرارة)
- تنفيذ الأوامر
طريقة الاتصال:
- مع IP عام: تتصل اللوحة مباشرة بـ
host:port - بلا IP عام: تُنشئ اللوحة أولًا منفذ وكيل محلي عبر النفق العكسي، ثم تتصل عبره بـ SSH
> بعبارة أخرى، جوهر النفق العكسي هو «إيصال SSH إلى الأجهزة التي لا تملك IP عام»، لذا فإن SSH هو البروتوكول الذي ينتهي إليه كل شيء في النهاية.
2. بروتوكول النفق العكسي —— قناة النفاذ
الاستخدام: تمكين اللوحة من الوصول إلى «الأجهزة التي لا تملك IP عام». يبدأ الجهاز نفسه اتصالًا «خارجيًا» نحو اللوحة، فينشأ اتصال TCP عكسي طويل الأمد، ومن خلاله ترسل اللوحة الأوامر وتعيد توجيه المنافذ.
الخصائص: اتصال TCP طويل الأمد + تشفير (AES-256-GCM)، والخادم يستمع على 0.0.0.0:4433.
حالات نموذجية:
- الإدارة عبر الأنفاق لخوادم Linux بلا IP عام (يعمل SSH داخل النفق نفسه)
- نفق المنافذ: ربط منفذ خدمة على الجهاز (مثل
8090) بمنفذ عام على اللوحة
> مفهومان قد يختلطان: إعادة توجيه المنافذ مقابل نفق المنافذ
>
> | | إعادة توجيه المنافذ | نفق المنافذ |
> |---|---|---|
> | الأجهزة المناسبة | خوادم تملك IP عام | أجهزة النفق بلا IP عام |
> | طريقة التنفيذ | DNAT في جدار النظام، على الخادم الهدف نفسه | عبر النفق العكسي |
> | مسار البيانات | الزائر → IP العام للهدف → منفذ الهدف | الزائر → منفذ اللوحة العام → النفق العكسي → منفذ الجهاز |
> | تعتمد على اتصال الجهاز | لا | نعم (يجب أن يبقى الـ Agent متصلًا) |
>
> بجملة واحدة: «إعادة التوجيه» للخوادم التي تملك IP عام؛ و«النفق» للأجهزة التي لا تملك IP عام.
3. SocketIO —— القناة المخصصة لهواتف أندرويد
الاستخدام: إدارة Termux على هواتف أندرويد. فشبكة الهاتف المحمول تتبدّل عناوين NAT فيها بوتيرة عالية وSSH غير مستقر، لذلك اعتُمدت قناة SocketIO بالاستقصاء الطويل المستقر (حل ناضج مُجرَّب على أجهزة حقيقية).
الـ Agent الذي يعمل على الهاتف يوفّر عبر SocketIO:
- إدارة النظام (نظرة عامة/العمليات/المهام المجدولة)
- الطرفية (جسر PTY)
- إدارة الملفات
- المراقبة الصحية (تقرير كل 30 ثانية: الحمل/الذاكرة/القرص/البطارية/الحرارة)
> هذه هي القناة الوحيدة في المشروع التي «لا تمر عبر SSH» — لأن هواتف أندرويد لا تستخدم sshd، بل تعتمد اتصال SocketIO طويل الأمد.
4. HTTP REST —— بين الواجهة الأمامية والخلفية
تستدعي واجهة المتصفح خلفية اللوحة عبر REST API، وتستخدم في الوقت نفسه SocketIO للتواصل الثنائي اللحظي مثل الطرفية.
---
نظرة على مسارات الوصول إلى الأجهزة الثلاثة
| نوع الجهاز | طريقة الاتصال | بروتوكول الوصول النهائي | ملاحظة |
|---|---|---|---|
| خادم Linux بـ IP عام | اتصال مباشر من اللوحة | SSH | أبسط الحالات |
| خادم Linux بلا IP عام (NAS/راسبيري باي وغيرها) | نفق عكسي ينشئ وكيلًا → SSH | SSH (منقول عبر النفق) | النفق هو «ناقل» SSH |
| هاتف أندرويد (Termux) | استقصاء SocketIO طويل | SocketIO (الوحيد بلا SSH) | قناة مستقرة مخصّصة للهاتف |
---
تخزين البيانات
- قاعدة بيانات SQLite (
data/ssheverywhere.db): بطاقات الخوادم، إعادة توجيه المنافذ، سجلات النفق، المستخدمون، المهام وغيرها. - نظام الملفات: ملفات النسخ الاحتياطي، مفاتيح النفق، الموارد الثابتة.
---
شكل النشر
- اللوحة: خدمة systemd باسم
ssh-everywhere.service، تستمع على0.0.0.0:5501. - النفق العكسي: يستمع على
0.0.0.0:4433. - الـ Agent على الجهاز الهدف يقيم دائمًا كخدمة (على Linux بـ systemd / وعلى Termux بـ termux-services).
---
حول اسم المشروع «SSH Everywhere»
اسم المشروع SSH Everywhere يعني «إدارة في كل مكان، كما لو كنت تستخدم SSH». وSSH هو طريقة الاتصال الرئيسية بلا منافس في المشروع كله: فباستثناء الحالة الفرعية الوحيدة الخاصة بهواتف أندرويد، تنتهي كل الوظائف الأخرى (إدارة خوادم Linux، الإدارة عبر الأنفاق، نقل الملفات، فحص السلامة) إلى SSH. وجوهر النفق العكسي هو أيضًا «إيصال SSH إلى أي مكان». لذلك يعبّر اسم «SSH Everywhere» بدقة عن قدرة المشروع الجوهرية.