اليوم سوف اتحدث عن كيفية الاتصال بخدمة ssh (الشل) للمستخدم الجذر (root) على خادم (سيرفر) اللينكس عن طريق نظام المفاتيح (keys) ودون الحاجة لادخال كلمة المستخدم root في كل مرة يتم فيها تسجيل الدخول الى السيرفر. وانصحك بقراءة كامل المقال قبل البدء.
ما هي المحصلة؟
بعد قراءة هذا الشرح وتطبيقة كما هو مطلوب سوف تستطيع الوصول الى سيرفر اللينكس (ssh السيرفر) من اي جهاز كمبيوتر متصل بالشبكة دون الحاجة لادخال كلمة مرور المستخدم الجذر root للسيرفر الذي تود الوصول اليه وذلك عن طريق استخدام ما يسمى بنظام المفاتيح.
ما هو نظام المفاتيح باختصار وبشكل ميسر؟
نظام المفاتيح او (الترميز بالمفتاح العمومي) ترجمة للانجليزية من (Public-key cryptography) هو نظام للتشفير يعتمد على توليد مفتاحين احدهما عام والاخر سري ويمكن استخدام هذين المفتاحين كاطراف اتصال وتوثيق بين طرفيتين او اكثر كما انه يمكن استخدام المفاتيح لتوثيق وتشفير الملفات والبيانات بالاضافة الى انه يمكن ايضا حماية المفتاح السري بكلمة مرور او ما يسمى (pass-phrase) . للمزيد حول التشفير بالمفتاح العمومي راجع الرابط التالي على ويكيبيديا. وحيث انني هنا سوف استخدم نظام المفاتيح للدخول الى السيرفر دون الحاجة لادخال كلمة مرور المستخدم root في كل مرة فانني لن اتحدث باطالة عن نظام المفاتيح لانه يحتاج الى مقال منفصل ولكنني سوف اكتفي بشرح كيفية توليد مفتاح (ssh key) وكيفية ضبطه وتوليفه بين السيرفر المطلوب الاتصال به وبين الاجهزة الاخرى التي سوف تقوم بالاتصال به.
لماذا احتاج لنظام المفاتيح بما انني استطيع استخدام كلمة مرور الجذر root؟
في الكثير من الاحيان وخصوصا مع مدراء الانظمة الذين يديرون منظومة معينه تحتوي على عدد ليس بقليل من السيرفرات فان السرعة في الوصول الى السيرفر تكون مهمه خصوصا لعلاج مشكلة معينه او امر طارئ وهذا الامر يتطلب ادخال كلمة مرور المستخدم الجذر root وهذا يتطلب معرفة كلمة المرور. وهذا الامر قد يكون سهلا عندما تدير سيرفر واحد ولكن عندها يكون لديك مجموعة من السيرفرات وبكل تاكيد فان كلمة مرور الجذر مختلفة لكل سيرفر وبكل تاكيد كلمة المرور ليس من السهل تذكرها فهذا يتطلب منك وقتا اضافية للحصول على كلمة المستخدم الجذر والتي بكل تاكيد ايضا يجب ان تكون محفوظة بصورة مشفرة على وسيلة تخزين امنه وبالتالي مزيد من الوقت للحصول عليها خصوصا اذا كان الامر يتعلق بمجموعة كبيرة من السيرفرات التي تتعامل معها بشكل يومي وبدخول مستمر على مدار الساعة. وهذا هو السبب الاساسي الذي يجعلني اكتب هذا المقال اليوم هو لتسهيل عملية الوصول الى السيرفر باسرع ما يمكن ودون الحاجة لمعرفة كلمة مرور الجذر ، حيث ان ما سوف ندخله هو كلمة مرور المفتاح السري والتي سوف تكون مشتركة بين جميع السيرفرات التي نديرها كونها كلمة مرور المفتاح الذي سوف نستخدمه وهي ما يجب ان نتذكره فقط للوصول الى السيرفر.
ومع ذلك فهناك ايضا اسباب اخرى لاستخدام نظام المفاتيح في الدخول الى السيرفرات بدلا من كلمة المرور الفعليه من ضمنها:
- تبادل الملفات بين السيرفرات بصورة تلقائيه دون الحاجة لتدخل البشر في ذلك وهذا يتطلب مصادقة اليه بين الخادمين.
- استخدام نظام المفاتيح قد يكون أمن اكثر من ادخال كلمة مرور الجذر كون نظام المفاتيح يتطلب وجود المفتاح السري وكذلك معرفة كلمة مرور المفتاح السري في حال تم حمايته بكلمة مرور.
ما هو المطلوب؟
- ان يكون لديك سيرفر لينكس (جهاز لينكس متصل بالشبكة) ولديك صلاحيات المستخدم الجذر root والقابلية للدخول الى ssh. وهو هنا السيرفر الذي نود ضبطه للدخول اليه دون الحاجة لادخال كلمة مرور المستخدم الجذر root في كل مرة.
- ان يكون لديك جهاز اخر يعمل بنظام التشغيل لينكس من اجل الدخول الى السيرفر ، اويعمل بنظام التشغيل ويندوز ولديك برنامج putty من اجل الدخول الى السيرفر عن طريق ssh. وهذا الجهاز هنا هو العميل الذي سوف مستخدمه للوصول الى السيرفر.
- وجود وسيلة اتصال بين الجهازين سواء عن طريق شبكة محلية او عن طريق شبكة الانترنت.
تعريفات
السيرفر الهدف: هو السيرفر الذي سوف يتم ضبطه للدخول اليه بدون كلمة مرور وذلك عن طريق نظام المفاتيح.
تنويه: وجود الاشارة # قبل اي امر شل ssh يعني انه يجب تنفيذ هذا الامر من قبل المستخدم root وبالتالي لا تدخل الامر مع اشارة # بل ادخل ما بعده. ووجود الاشارة # في كل سطر يعني ان كل امر منفصل عما سبقه. ووجود الاشارة $ تعني بداية امر ssh ولكن ليس بالضرورة ان تكون مسجلا الدخول بالمستخدم الجذر root.
الخطوة الاولى: توليد مفتاح ssh
الخطوة الاولى هي اننا سوف نحتاج انشاء مفتاح ssh جديد وسوف نستخدم هذا المفتاح للربط بين السيرفرات. في حال كنت قد قمت على توليد مفتاح مسبقا انتقل للخطوة التالية، اما اذا لم يكن لديك مفتاح مسبق فقم على توليد المفتاح بادخال الامر التالي في شل السيرفر الهدف بعد تسجيل الدخول بالمستخدم root. وبكل تاكيد اذا كنت تطبق هذا الشرح لاول مرة فانه يجب عليك انشاء مفتاح جديد.
في البداية سوف نقوم على انشاء مجلد جديد ليتم حفظ ملفات المفتاح فيه وليكن /root/newk مثلا لهذا نفذ الامر
# mkdir /root/newk # cd /root/newk
ومن ثم قم على ادخال امر توليد المفتاح بادخال الامر التالي
# ssh-keygen -t rsa -b 2048
بعد ادخال الامر السابق والظغط على مفتاح الادخال سوف يظهر ما يلي
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
ادخل مسار الملف لحفظ المفتاح وهو كالتالي:
/root/newk/id_rsa
وبعد ادخال مسار ملف المفتاح والظغط على انتر سوف يظهر كالاتي
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/newk/id_rsa Enter passphrase (empty for no passphrase):
وفي هذه المرحلة يجب علينا اختيار كلمة مرور او ما يسمى passsphrase لكي نقوم بحماية المفتاح بواسطة كلمة المرور ، لهذا ادخل كلمة مرور قوية لا تقل عن 8 خانات وتحتوي على احرف وارقام ورموز وتذكر انك سوف تحتاج لتذكر هذه الكلمة فقط للدخول الى اي سيرفر سوف يتم ربطه بهذا المفتاح.
بعد ادخال كلمة المرور قم بالظغط على انتر ومن ثم كرر كلمة المرور واظغط انتر. ولاحظ انه عند كتابة كلمة المرور فانها لن تظهر ولن يظهر بدلها اشارات * وهذا امر طبيعي في اللينكس عند ادخال كلمات مرور فكل ما عليك هو الكتابة والاستمرار في الكتابة وعند الانتهاء الظغط على مفتاح الادخال في لوحة المفاتيح (انتر Enter).
بعد ادخال كلمة المرور وتاكيدها فانه سوف يظهر لنا كالتالي
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/newk/id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/newk/id_rsa. Your public key has been saved in /root/newk/id_rsa.pub. The key fingerprint is: 89:d3:c0:d8:4f:ce:d3:aa:64:e3:3f:0e:bd:f3:09:c9 root@server The key's randomart image is: +--[ RSA 2048]----+ | | | + | | . + . | | O o | | o S . | | + + | | = E | | + +oo . | | oo++o | +-----------------+
وهذا يعني نجاح انشاء مفتاح ssh وبالتالي فان المجلد /root/newk/ الان يحتوي على جزئي المفتاح ، العام والسري للمفتاح. ولو قمنا على استعراض محتويات المجلد عن طريق الامر ls سوف يظهر لنا كالتالي
# ls -lh /root/newk/ total 8.0K -rw------- 1 root root 1.8K Jan 10 12:29 id_rsa -rw-r--r-- 1 root root 403 Jan 10 12:29 id_rsa.pub
سوف نلاحظ وجود الملف id_rsa والملف id_rsa.pub ، وللعلم id_rsa هو الجزء السري للمفتاح او ما يسمى المفتاح السري secret key والملف id_rsa.pub هو الجزء العام للمفتاح او ما يسمى المفتاح العام public key.
والتالية هي صورة ماخوذة من الطرفية تظهر لنا نتيجة تنفيذ الاوامر اعلاه:
وبعد ان قمنا على توليد المفتاح للمرة الاولى سوف نبدا الان بضبط اعدادات استخدام المفتاح للوصول الى السيرفرات وسوف نبدا في الخطوة التالية بضبط اعدادات السيرفر ليسمح بتسجيل الدخول الى ssh باستخدام المفتاح الذي قمنا على توليده.
الخطوة الثانية: ضبط السيرفر ليسمح بتسجيل الدخول اليه ssh باستخدام المفاتيح
بما اننا في الخطوة الاولى قمنا على توليد المفتاح على نفس السيرفر فننا سوف ننقل محتويتات الملف id_rsa.pub (وهو الجزء العام من المفتاح) الى الملف authorized_keys الموجود بداخل المجلد .ssh للمستخدم root على السيرفر اي اننا سوف ننقل محتويات الملف id_rsa.pub بداخل الملف /root/.ssh/authorized_keys وذلك عن طريق الامر التالي (في حال عدم وجود الملف authorized_keys في المسار المطلوب فان الامر التالي ايضا سوف يقوم على انشاء الملف وفي حال كان الملف موجود ويحتوي على بيانات فان الامر التالي سوف يقوم على اضافة محتويات الملف id_rsa.pub في اخر الملف:
# cat /root/newk/id_rsa.pub >> /root/.ssh/authorized_keys
اما في حال كنا قد قمنا على توليد المفتاح على سيرفر اخر او كان لدينا مفتاح تم توليد بوقت سابق فلاحظ انك يجب ان تنقل محتويات الملف id_rsa.pub وتقوم بوضع ما بداخله من محتويات في اخر محتويات الملف /root/.ssh/authorized_keys
الخطوة السابقة هي لنسمح للمستخدم root باستخدام المفتاح الذي قمنا بانشاءه من اجل تسجيل الدخول الى الشل بدلا من استخدام كلمة المرور للحساب.
الخطوة الثالثة: نقل المفتاح السري الى الجهاز العميل وتجربة الدخول الى الخادم بواسطة المفتاح
حتى نستطيع الدخول الى السيرفر باستخدام المفتاح بدلا من كلمة المرور يجب ان يكون لدينا الجزء السري من المفتاح وهو في مثالنا هذا الملف (id_rsa) الموجود في المسار التالي /root/newk/id_rsa.
لهذا فانه يجب علينا نقل الملف id_rsa الى الجهاز الذي نود تسجيل الدخول منه باستخدام الوسيلة المناسبة سواء عن طريق scp او عن طريق winsp او عن طريق rsync. وكذلك لاحظ انه يجب عليك ان تحتفظ بنسخة احتياطية ايضا من الجزء السري من المفتاح لغايات الاستخدام المستقبلي في حال ضياع الملف الذي بحوزتك.
مثلا لو اننا نرغب بنقل المفتاح السري الى جهاز لينكس اخر فانني سوف استخدم مثلا الامر التالي للنقل
scp -p 22 /root/newk/id_rsa root@linux.computer:~/
مع استبدال linux.computer بعنوان الجهاز او اي بي الجهاز الذي نود نقل الملف اليه
الدخول الى السيرفر من انظمة لينكس ومثيلاتها
ولنفترض اننا قمنا على نقل الجزء السري من المفتاح الى احد سيرفرات اللينكس ، ونود الان تسجيل الدخول الى السيرفر الهدف عن طريق جهاز اللينكس هذا فما هي الطريقة وكيف يم ذلك؟
في المثال السابق قمنا على نقل الجزء السري من المفتاح والموجود بالملف id_rsa الى الجهاز الذي نود ان نقوم بتسجيل الدخول منه الى السيرفر لهذا فهناك طريقتين لتسجيل الدخول الى ssh عن طريق المفتاح:
الطريقة الاولى: وهي باستخدام الامر ssh مع تزويد الامر بمسار المفتاح السري وذلك يتم كالتالي:
# ssh -p 22 -l root -i /root/id_rsa linux.server
مع استبدال linux.server بعنوان او رقم اي بي السيرفر الهدف ولاحظ انه في هذه الطريقة يجب ان تضع المسار الكامل للملف id_rsa وهو في مثالنا السابق /root/id_rsa
الطريقة الثانية: والتي تتم بوضع المفتاح السري (id_rsa) داخل المجلد /root/.ssh/
وفي هذه الطريقة نقوم بنقل المفتاح السري id_rsa بداخل المجلد /root/.ssh في الجهاز الذي نود الدخول منه الى السيرفر.
لاحظ انه عند تنفيذ امر الدخول فانه سوف تظهر لنا رسالة تفيد بمكان وجود المفتاح السري وتطلب منا ادخال كلمة مرور المفتاح السري (pass-phrase) التي قمنا على ادخالها عن انشاء المفتاج السري. كما يلي:
[root@pc ~]# ssh -p 22 -l root -i /root/id_rsa linux.server Enter passphrase for key 'id_rsa': Last login: Mon Jan 28 21:35:54 2013 from pc.localhost root@server [~]#
لاحظ في الكود اعلاه انه عند ادخال كلمة مرور المفتاح السري فانه تم الدخول الى السيرفر وتلاحظ اننا انتقلنا من جهاز الى جهاز وبالتالي فان عملية الاتصال بالشل ssh للسيرفر نجحت دون الحاجة لادخال كلمة مرور المستخدم الجذر.
الدخول الى السيرفر من انظمة ويندوز عن طريق putty
في حال كنت تستخدم نظام التشغيل ويندوز وكنت تستخدم برنامج putty الشهير لتسجيل الدخول الى السيرفر وكنت ترغب باستخدام المفتاح بدلا من كلمة المرور الطبيعية فانه يجب ان تقوم بنقل المفتاح السري ايضا الى جهاز الويندوز، يمكنك اجراء ذلك باستخدام WinSCP او باستخدام اي وسيلة اخرى تراها مناسبة وممكنه.
تحويل المفتاح السري (الخاص) الى الصيغة المدعومه من putty وهي ppk file
لاستخدام المفتاح الذي قمنا على توليده مع putty يجب ان نقوم ولاول مرة فقط باستخدام الاداة PuTTYgen والتي يمكن تحميلها من هنا وذلك لتحويل المفتاح السري الى صيغة متوافقة مع putty وهي ppk حيث ان putty لا تدعم صغية المفتاح السري المتعارف عليه ويجب تحويله الى صغيه يستطيع برنامج putty التعامل معها وهذا الامر يتم عن طريق الاداة PuTTYgen.
وعملية التحويل تتم كالتالي:
بعد تحميل puttygen.exe قم على تشغيله وسوف يظهر البرنامج كالتالي:
من خلال القائمة File سوف نقوم على تحميل المفتاح السري (الخاص) عن طريق اختيار Load private file كما هو في الصورة التالية:
ومن ثم اختيار المفتاح السري الموجود بداخل الملف id_rsa والذي قمنا على تحميله من السيرفر واختياره كما في الصورة التالية:
بعد تحميل المفتاح السري كما في الخطوه اعلاه فان puttygen سوف تطلب ادخال كلمة مرور المفتاح (في حال تم توليد المفتاح بكلمة المرور وهي الحالة التي قمت بتوليد المفتاح بها) كما في الصورة التالية: (وعندها يجب ادخال كلمة المرور للمفتاح والنقر على OK).
بعد ادخال كلمة المرور الصحيحة للمفتاح وفي حال تم استيراد المفتاح الخاص من الملف بنجاح سوف تظهر عبارة تشير بنجاح العملية كما في الصورة التالية:
الان يجب علينا ان نقوم بحفظ المفتاح الخاص مرة اخرى بالصيغة المتوافقة مع putty ويتم ذلك عن طريق النقر على المفتاح save private key الظاهر في الصورة التالية:
وعند النقر على مفتاح save private key كل ما عليك هو تحديد مكان حفظ المفتاح وادخال الاسم المناسب الذي ترغب به والنقر على مفتاح save كما في الصورة التالية:
وعندها سوف تقوم الاداة puttygen على توليد المفتاح السري بصغية ppk والمتوافقة مع اعدادات putty والان يمكننا تشغيل putty والدخول الى السيرفر باستخدام المفتاح الذي قمنا للتو بتحويله الى الصيغه ppk.
تسجيل الدخول الى السيرفر بواسطة putty باستخدام المفتاح السري (الخاص)
للقيام بذلك قم على تشغيل برنامج putty وفي شاشة الجلسة session ادخل رابط السيرفر او عنوان الاي بي في خانة Hostname كما هو ظاهر في الصورة مع تحديد رقم المنفذ الخاص ب ssh على السيرفر المطلوب الاتصال به علما بان الرقم 22 هو الافتراضي لهذا البروتوكول:
وحتى نقوم الان باختيار المفتاح الذي نود تسجيل الدخول به بدلا من كلمة المرور توجه الى شاشة SSH ومن ثم Auth كما هو ظاهر في الصورة ادناه:
وفي خانة authentication parameters قم على تحديد مكان تواجد المفتاح الذي يحمل الامتداد ppk والذي تم توليده في الخطوه السابقة عن طريق النقر على المفتاح browse ومن ثم اختيار الملف كما في الصورة التالية:
وبعد اختيار المفتاح قم على النقر على Open كما هو بالصورة وبعدها اذهب مرة اخرى الى شاشة session وانقر على مفتاح الاتصال open كما هو ظاهر في الصورة التالية:
وعندها وفي حال نجاح الامر سوف تظهر لك نافذة putty المعهوده وتطلب منك ادخال كلمة المرور الخاصة بالمفتاح (في حال تم توليد المفتاح بكلمة المرور كما هو في حالتنا) على الشكل الذي يظهر في الصورة ادناه:
قم على ادخال اسم المستخدم للخادم وهو هنا في حالتنا root ومن ثم اضغظ على مفتاح الادخال enter ومن ثم ادخل كلمة المرور الخاصة بالمفتاح واضغظ على مفتاح الادخال enter وعندها في حال كانت كلمة المرور الخاصة بالمفتاح صحيحة وكل شيء على ما يرام سوف يتم تسجيل دخول الى الخادم ويظهر مؤشر الشل # كالعادة كما هو ظاهر في الصورة اعلاه.
وبالتالي نكون قد سجلنا الدخول الى الخادم دون الحاجة لادخال كلمة مرور الجذر.
وفي حال رغبتنا تسجيل الدخول الى الخادم مرة اخرى كل ما علينا الا تشغيل putty وادخال عنوان الخادم واختيار المفتاح والاتصال بالخادم (اي تطبيق ما ورد في البند تسجيل الدخول الى السيرفر بواسطة putty باستخدام المفتاح السري (الخاص) اعلاه).
مراجع
- Secure Shell: http://en.wikipedia.org/wiki/Secure_Shell
- Public-key cryptography: http://en.wikipedia.org/wiki/Public-key_cryptography
- How to Use RSA Key for SSH Authentication: http://news.softpedia.com/news/How-to-Use-RSA-Key-for-SSH-Authentication-38599.shtml
- HOWTO: set up ssh keys: http://paulkeck.com/ssh
- Converting Your Private Key (Putty)
نشكرك على الشرح الوافى
بارك الله فيك
ممكن شرح لمعرفة مفاتيح على السيرفر ام لا
بمعنى مثلا كان يعمل دعم على سيرفرى والدعم راح
كيف اعرف انة ما عامل مفاتيح
ولو عامل كيف اقوم بحذفها
وشكرا لك
الاخ الكريم ، لمعرفة ان كان هناك مفاتيح يتقبلها السيرفر فسوف تجد في مجلد .ssh ملف ياسم authorized_keys يحتوي على المفاتيح المدعومة ولالغاء اي مفتاح كل ما عليك هو حذف السطر الخاص بالمفتاح، وهذا الملف يكون متواجد في المجلد الرئيسي للمستخدم ، فمثلا ان كنا نتحدت عن المستخدم root فالملف يكون على المسار التالي /root/.ssh/authorized_keys … وهكذا لباقي المستخدمين.