الوثائق

البدء السريع + شرح وظائف كل قسم لكل جهاز (يُحدَّث باستمرار)

التثبيت وإلغاء التثبيت

يشرح هذا المقال بالتفصيل كيفية تثبيت لوحة SSH Everywhere وترقيتها وإلغاء تثبيتها، مع التركيز على «كيف أُلغي التثبيت بعد تغيير دليل التثبيت؟» وعلى تفاصيل الصياغة داخل الأوامر (الفراغات، علامات الاقتباس).

1. التثبيت (أمر واحد)

نفّذ على خادم Linux يملك IP عام:

curl -fsSL https://ssheverywhere.com/install.sh | bash

وينجز السكربت تلقائيًا: كشف النظام → تثبيت الاعتماديات (Python3 / venv / pip / git / curl) → تنزيل الشيفرة → إنشاء البيئة الافتراضية → تثبيت اعتماديات Python → تسجيل خدمة systemd وتشغيلها.

يدعم Debian / Ubuntu / CentOS / Rocky / AlmaLinux / Fedora / WSL (وعند غياب systemd يتحوّل تلقائيًا إلى التشغيل في الخلفية).

معطيات التثبيت

المعطىالوصفمثال
--lang <الرمز>لغة الرسائل + اللغة الافتراضية للوحة (تُحدَّد افتراضيًا تلقائيًا حسب locale النظام؛ وتقبل أيضًا الرقم 1-16)--lang ja
--dir <الدليل>دليل التثبيت (افتراضيًا /opt/ssh-everywhere؛ وعند تعذّر الكتابة يُنتقل تلقائيًا إلى ~/ssh-everywhere مع توضيح ذلك في المخرجات)--dir /opt/my-panel
--port <المنفذ>منفذ اللوحة (افتراضيًا 5501)--port 8080
--asciiفرض الإخراج برموز ASCII فقط ([ok] / [..] / [!] / [x])، فلا تظهر رموز مشوّهة في أي طرفية--ascii
--unicodeفرض الإخراج برموز Unicode (✓ ⟳ ⚠️ ❌)؛ وهو الافتراضي في بيئة UTF-8--unicode
--yes / -yتأكيد تلقائي عند الترقية دون أي تفاعل--yes

رموز اللغات المدعومة (16)

الرمزاللغةالرمزاللغةالرمزاللغةالرمزاللغة
zh中文enEnglishja日本語ko한국어
esEspañolfrFrançaisdeDeutschruРусский
ptPortuguêsitItalianoarالعربيةtrTürkçe
viTiếng ViệtthไทยidBahasa Indonesiahiहिन्दी

إذا لم يُمرَّر --lang تُحدَّد اللغة تلقائيًا حسب locale النظام (مثل LANG=ja_JP.UTF-8 ← رسائل باليابانية). وعندما لا يكون locale الخادم أو الطرفية بترميز UTF-8 (الشائع في الصور السحابية المقلَّصة لكبار المزوّدين هو LANG=C)، ينتقل السكربت تلقائيًا إلى رموز ASCII الصافية [ok]، وإذا لم تُحدَّد اللغة صراحةً يُعيد نصوص الرسائل إلى الإنجليزية ويوضح السبب في البداية — وذلك لتجنّب أي تشويه في العرض. ولإجبار عرض لغتك استخدم: --lang xx --unicode.

لمرّر المعطيات عبر الأنبوب يجب إضافة bash -s --:

# رسائل باليابانية + لوحة باليابانية
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ja

# رسائل بالروسية + دليل ومنفذ مخصّصان
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ru --dir /opt/my-panel --port 8080

# طرفية قديمة / طرفية GBK تخشى التشويه: إخراج ASCII صافٍ (رسائل بالصينية + رموز [ok])
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang zh --ascii

# العربية (واجهة من اليمين إلى اليسار)
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ar

ويمكنك أيضًا التنزيل أولًا ثم التشغيل (تفاعليًا، سيسأل خطوة بخطوة عن اللغة والدليل وتأكيد الترقية):

curl -fsSL https://ssheverywhere.com/install.sh -o install.sh && bash install.sh

> في السحابات الكبرى (Tencent Cloud / Alibaba Cloud) تسجيل الدخول بـ root معطّل افتراضيًا. ويُحترم --dir المُمرَّر صراحةً أولًا؛ فلا ينتقل السكربت تلقائيًا إلى دليل HOME لديك (~/ssh-everywhere) إلا إذا لم يملك المستخدم الحالي صلاحية الكتابة في ذلك الدليل، ويُخبر بوضوح في المخرجات «أي دليل مرّرت، ولماذا استُبدل، وأن التثبيت فيه يتطلب التشغيل بـ root».

2. الترقية

يكفي تشغيل أمر التثبيت مرة أخرى، فالسكربت يتضمّن كشفًا للإصدارات، وينبّهك عند وجود إصدار جديد ليُرقّي (مع الاحتفاظ بالبيانات، وتلقائيًا بالكامل):

curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --yes

و--yes تعني تأكيد الترقية تلقائيًا دون تفاعل.

3. إلغاء التثبيت

إلغاء التثبيت بالدليل الافتراضي (تفاعلي، مُوصى به)

curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh

يسرد السكربت أولًا ما سيُلغى تثبيته ويسأل عن التأكيد، ولا يُنفَّذ إلا بعد إدخال yes.

إلغاء التثبيت غير التفاعلي / الآلي

أضف --yes لتخطي التأكيد (مع الإبقاء على التحقق الأمني):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --yes

معطيات إلغاء التثبيت

المعطيةالشرح
--dir <dir>دليل التثبيت (الافتراضي /opt/ssh-everywhere، ويجب تحديده إن كنت قد غيّرت الدليل)
--keep-dataخذ نسخة احتياطية من data (إعدادات الخوادم / قاعدة البيانات) في ملف tar قبل إلغاء التثبيت
--yesتأكيد إلغاء التثبيت في الوضع غير التفاعلي

4. كيف أُلغي التثبيت بعد تغيير دليل التثبيت؟ (مهم)

إذا استخدمت --dir لتغيير الدليل عند التثبيت، فيجب عند إلغاء التثبيت تحديد الدليل نفسه بـ --dir، وإلا لم يجد السكربت دليل التثبيت وتوقّف تلقائيًا (وهذه حماية أمنية تمنع الحذف الخاطئ).

مسار الدليل بلا فراغات

curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh --dir /opt/my-panel

وبطريقة الأنبوب (توضع --dir بعد bash -s --):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir /opt/my-panel --yes

مسار الدليل يحتوي على فراغات

إذا كان اسم الدليل يحوي فراغًا، فيجب إحاطة المسار كله بعلامتَي اقتباس مزدوجتين، وإلا جزّأه shell إلى جزأين ولم يجد السكربت الدليل:

bash uninstall.sh --dir "/opt/my panel"

ويُطبَّق الأمر نفسه في طريقة الأنبوب (الاقتباس يحيط بالمسار كله، لا بنصفه):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir "/opt/my panel" --yes

إلغاء التثبيت مع الاحتفاظ بالبيانات

bash uninstall.sh --dir /opt/my-panel --keep-data

سيُنسخ data (إعدادات الخوادم / قاعدة البيانات) احتياطيًا إلى <install-dir>-data-backup-<timestamp>.tar.gz، ويمكنك استعادته بعد إلغاء التثبيت.

> 💡 توصية: تجنّب استخدام الفراغات في اسم الدليل عند التثبيت، واستخدم الشرطة أو الشرطة السفلية بدلًا منها (مثل my-panel أو my_panel)، فتوفّر على نفسك متاعب علامات الاقتباس.

5. ملاحظات أمنية

يتضمّن سكربت إلغاء التثبيت ثلاث طبقات حماية، لمنع الحذف الخاطئ:

1. التحقق من المسار المطلق —— يرفض المسارات النسبية.

2. قائمة سوداء بأدلة النظام الحرجة —— يرفض / و/root و/etc و/usr و/var وغيرها.

3. التحقق من بصمة دليل التثبيت —— لا يُحذف إلا إذا وُجد VERSION وapp.py معًا، وإلا توقّف.

> إلغاء التثبيت يحذف اللوحة نفسها فقط، ولا يتأثر الـ Agent على الخوادم/الأجهزة الهدف (بل يظهر غير متصل بعد حذف اللوحة).