ماذا تفعل هذه الوحدة #
SSH هو المدخل إلى خادمك: القناة المشفَّرة التي تتصل عبرها لإدارته. والتأكّد من أن ذلك الباب مُركَّب كما ينبغي —بالمفاتيح الصحيحة ودون أقفال زائدة— هو ما يفرّق بين خادم آمن وآخر مكشوف.
تجمع وحدة ssh مهام ذلك الوصول البعيد في أمر واحد: تدير المفاتيح المصرَّح بها للمستخدم (إضافة، سرد، إزالة)، وتتحكّم في مفاتيح المضيف التي يُعرِّف بها الخادم نفسه للعملاء، وتعرض الجلسات النشطة، وتفحص أو تعيد تطبيق تصليب sshd المُعرَّف في إعدادك. كل عملية تمسّ sshd تتحقق من الإعداد أولًا (sshd -t) كي لا يحبسك تغيير خاطئ في الخارج.
أبقِ جلسة مفتوحة أثناء تغيير المفاتيح أو إعادة تشغيل sshd: هكذا، إن حدث خطأ، تبقى متصلًا لتصلحه. تعمل الوحدة افتراضيًّا على المستخدم المُدار ubuntu؛ استخدم --user للعمل على غيره.
المهام الشائعة #
اختر ما تريد فعله. تأتي كل وصفة بالأمر مكتوبًا بالفعل — ما عليك إلا استبدال المستخدم أو المفتاح بخاصّتك والضغط على نسخ.
1
اعرض حالة وصول SSH
تحقّق بنظرة واحدة من أن sshd مُفعَّل ومهيّأ كما ينبغي.
اتصل عبر SSH بخادمك بالمستخدم ubuntu ونفّذ:
$ sudo imaxe ssh statusتحتاجه لسكربت؟ أضِف --json وستحصل على المعلومات نفسها، مقروءةً آليًّا:
$ sudo imaxe ssh status --jsonsshd مُفعَّلًا، وأيّ منفذ يستمع عليه، وملخّصًا للتصليب المُطبَّق.2
أضِف مفتاحًا مصرَّحًا به أو أزِله
امنح الوصول لجهاز جديد أو اسحبه من جهاز لم تعد تستخدمه.
انظر أولًا إلى المفاتيح المصرَّح بها حاليًّا للمستخدم المُدار:
$ sudo imaxe ssh keys listأضِف مفتاحًا عامًّا بتمريره وسيطةً (أو استخدم - لقراءته من الدخل القياسي):
$ sudo imaxe ssh keys add "ssh-ed25519 AAAAC3Nz... ana@portatil" --comment "ana@portatil"لم تعد بحاجته؟ أزِله ببصمته (fingerprint) أو بتعليقه:
$ sudo imaxe ssh keys remove "ana@portatil"authorized_keys للمستخدم. تحقّق من النتيجة بـ keys list.3
أعِد توليد مفاتيح المضيف بعد الاستنساخ
ضروري بعد إنشاء جهاز من صورة AMI.
حين تستنسخ صورة، ترث كل نسخة هوية الخادم نفسها. ولِّد مفاتيح مضيف جديدة وفريدة لهذا الجهاز:
$ sudo imaxe ssh hostkeys regenerate --yes4
راجِع التصليب وأعِد تطبيقه
تأكّد من أن sshd لا يزال مهيّأً كما ينبغي، وأصلِحه إن لم يكن كذلك.
قارِن التصليب الحالي بالمرغوب (الذي يُعرِّفه إعدادك):
$ sudo imaxe ssh harden showهل من فروق؟ أعِد تطبيق التصليب من ملف الـ YAML وأعِد تحميل sshd بأمان:
$ sudo imaxe ssh harden reapplysshd دون إسقاط جلستك.5
اعرض الجلسات وأعِد تشغيل sshd
اطّلِع على المتصلين وطبّق التغييرات دون خوف من حبس نفسك خارجًا.
اسرُد جلسات SSH النشطة الآن:
$ sudo imaxe ssh sessionsلتطبيق تغييرات الإعداد، فضّل reload (لا يُسقِط الاتصالات)؛ ولا تستخدم restart إلا إن لزمت إعادة تشغيل كاملة. كلاهما يتحقّق من الإعداد أولًا:
$ sudo imaxe ssh reload
$ sudo imaxe ssh restartقبل إعادة تشغيل sshd أو تغيير المنفذ، أبقِ جلسة طوارئ ثانية مفتوحة. وإن ظهر لك، عند إعادة الاتصال، تحذير host key مختلف بعد hostkeys regenerate، فهذا متوقّع: اقبل الهوية الجديدة.
صيغة الاستخدام #
imaxe ssh <subcomando> [<subcomando-anidado>] [argumentos] [flags]العمليات التي تقرأ أو تعدّل sshd، أو المفاتيح المصرَّح بها، أو مفاتيح المضيف تتطلّب صلاحيات root (استخدم sudo). تجمع مجموعات keys وhostkeys وharden أوامرها الفرعية المتداخلة الخاصّة. أضِف --json إلى status أو sessions أو keys list أو harden show للحصول على مخرجات صالحة لكتابة السكربتات.
الأوامر الفرعية #
| الأمر الفرعي | ماذا يفعل | الرايات المعنية |
|---|---|---|
| status | حالة sshd: مُفعَّل، المنفذ وملخّص التصليب. | --json |
| keys list | يسرُد المفاتيح المصرَّح بها للمستخدم المُدار. | --user, --json |
| keys add | يضيف مفتاحًا عامًّا (من وسيطة أو stdin). | --user, --comment |
| keys remove | يزيل مفتاحًا ببصمته أو بتعليقه. | --user |
| hostkeys regenerate | يعيد توليد مفاتيح المضيف (حَرِج بعد استنساخ AMI؛ يغيّر البصمة). | --yes |
| sessions | يسرُد جلسات SSH النشطة. | --json |
| harden show | يعرض التصليب الحالي مقابل المرغوب. | --json |
| harden reapply | يعيد تطبيق التصليب من الـ YAML ويعيد تحميل sshd. | — |
| restart | يعيد تشغيل sshd، متحقّقًا من الإعداد أولًا (sshd -t). | — |
| reload | يعيد تحميل sshd، متحقّقًا من الإعداد أولًا (sshd -t). | — |
الوسائط والرايات #
| الوسيطة / الراية | النوع | الافتراضي | الوصف |
|---|---|---|---|
| <clave> مطلوب | string | — | في keys add: المفتاح العام، أو - لقراءته من stdin. |
| <selector> مطلوب | string | — | في keys remove: البصمة (SHA256:...) أو تعليق المفتاح المراد إزالته. |
| --user | string | ubuntu | المستخدم الذي يُستعلَم أو يُعدَّل authorized_keys الخاصّ به (في keys list/add/remove). |
| --comment | string | — | في keys add: تعليق مرتبط بالمفتاح للتعرّف عليه لاحقًا. |
| --yes | bool | false | في hostkeys regenerate: يؤكّد دون سؤال (يغيّر البصمة التي يراها العملاء). |
| --json | bool | false | في status وsessions وkeys list وharden show: يُصدر النتيجة بصيغة JSON في stdout. |
الملفات والمسارات #
| المسار | المحتوى |
|---|---|
| /etc/imaxe/ssh.yml | إعداد الوحدة: المنفذ، وسياسات الدخول (root، كلمة المرور، المفتاح العام)، المستخدمون المسموح بهم، المستخدم المُدار وإعادة توليد مفاتيح المضيف. |
| /home/<usuario>/.ssh/authorized_keys | المفاتيح العامة المصرَّح بها للمستخدم المُدار والتي يعدّلها keys add/remove. |
| /etc/ssh/sshd_config.d/ | أجزاء من إعداد sshd حيث يُطبَّق التصليب. |
| /etc/ssh/ssh_host_*_key | مفاتيح المضيف التي تُعرِّف الخادم والتي يجدّدها hostkeys regenerate. |
مثال على ssh.yml:
port: 22
permit_root_login: "no"
password_authentication: "no"
pubkey_authentication: "yes"
allow_users: []
managed_user: ubuntu
hostkeys:
regenerate_on_first_boot: trueرموز الخروج والسجلّات #
يعيد كل تنفيذ رمزًا يمكنك فحصه بـ echo $? — مفيد للتسلسل في السكربتات:
sshd -t؛ لم يُطبَّق شيء.تابِع سجلّ الخدمة مباشرةً أثناء تصحيح الأخطاء:
$ sudo journalctl -u ssh -f
$ sudo imaxe ssh harden show --jsonحل المشكلات #
| العَرَض | السبب المحتمل | الحل |
|---|---|---|
| يعيد CONFIG (الرمز 3) | ترك التصليب أو تغيير يدوي sshd بإعداد غير صالح. | راجِع الفرق بـ imaxe ssh harden show وأصلِحه؛ يمنع التحقق تطبيق إعداد معطوب. |
| عند إعادة الاتصال، تحذير host key مختلف | أُعيد توليد مفاتيح المضيف (متوقّع بعد استنساخ AMI). | هذا طبيعي: اقبل الهوية الجديدة على العميل وحدِّث known_hosts لديك. |
keys add يعيد NOTFOUND (الرمز 4) | المستخدم المُعطى في --user غير موجود في النظام. | تحقّق من اسم المستخدم أو استخدم المُدار الافتراضي (ubuntu). |
| لم أعد أستطيع الدخول بكلمة مرور | ضُبِط password_authentication على "no" بواسطة التصليب. | هذا مقصود: ادخُل بمفتاح عام وأدِرها بـ imaxe ssh keys. |
هل واجهتك مشكلة مع وحدة SSH؟
راسلنا مرفقًا مخرجات «imaxe <module> status --json» وسنرد عليك بسرعة.