الاتصال بـ ssh (الشل) لسيرفر اللينكس عن طريق نظام المفاتيح وبدون كلمة مرور


الكاتب: 2013-01-10 13:53:38+0300

اليوم سوف اتحدث عن كيفية الاتصال بخدمة ssh (الشل) للمستخدم الجذر (root) على خادم (سيرفر) اللينكس عن طريق نظام المفاتيح (keys) ودون الحاجة لادخال كلمة المستخدم root في كل مرة يتم فيها تسجيل الدخول الى السيرفر. وانصحك بقراءة كامل المقال قبل البدء.

ssh protocol with keys

ما هي المحصلة؟

بعد قراءة هذا الشرح وتطبيقة كما هو مطلوب سوف تستطيع الوصول الى سيرفر اللينكس (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 قم على تشغيله وسوف يظهر البرنامج كالتالي:

puttygen

من خلال القائمة File سوف نقوم على تحميل المفتاح السري (الخاص) عن طريق اختيار Load private file كما هو في الصورة التالية:

puttygen load private file

ومن ثم اختيار المفتاح السري الموجود بداخل الملف id_rsa والذي قمنا على تحميله من السيرفر واختياره كما في الصورة التالية:

puttygen choose private file

بعد تحميل المفتاح السري كما في الخطوه اعلاه فان puttygen سوف تطلب ادخال كلمة مرور المفتاح (في حال تم توليد المفتاح بكلمة المرور وهي الحالة التي قمت بتوليد المفتاح بها) كما في الصورة التالية: (وعندها يجب ادخال كلمة المرور للمفتاح والنقر على OK).

puttygen enter passphrase

بعد ادخال كلمة المرور الصحيحة للمفتاح وفي حال تم استيراد المفتاح الخاص من الملف بنجاح سوف تظهر عبارة تشير بنجاح العملية كما في الصورة التالية:

puttygen success import private key

الان يجب علينا ان نقوم بحفظ المفتاح الخاص مرة اخرى بالصيغة المتوافقة مع putty ويتم ذلك عن طريق النقر على المفتاح save private key الظاهر في الصورة التالية:

puttygen export private key

وعند النقر على مفتاح save private key كل ما عليك هو تحديد مكان حفظ المفتاح وادخال الاسم المناسب الذي ترغب به والنقر على مفتاح save كما في الصورة التالية:

puttygen choose ppk name

وعندها سوف تقوم الاداة puttygen على توليد المفتاح السري بصغية ppk والمتوافقة مع اعدادات putty والان يمكننا تشغيل putty والدخول الى السيرفر باستخدام المفتاح الذي قمنا للتو بتحويله الى الصيغه ppk.

تسجيل الدخول الى السيرفر بواسطة putty باستخدام المفتاح السري (الخاص)

للقيام بذلك قم على تشغيل برنامج putty وفي شاشة الجلسة session ادخل رابط السيرفر او عنوان الاي بي في خانة Hostname كما هو ظاهر في الصورة مع تحديد رقم المنفذ الخاص ب ssh على السيرفر المطلوب الاتصال به علما بان الرقم 22 هو الافتراضي لهذا البروتوكول:

putty main screen

وحتى نقوم الان باختيار المفتاح الذي نود تسجيل الدخول به بدلا من كلمة المرور توجه الى شاشة SSH ومن ثم Auth كما هو ظاهر في الصورة ادناه:

putty ssh auth screen

وفي خانة authentication parameters  قم على تحديد مكان تواجد المفتاح الذي يحمل الامتداد ppk والذي تم توليده في الخطوه السابقة  عن طريق النقر على المفتاح browse ومن ثم اختيار الملف كما في الصورة التالية:

putty ssh auth choose key

وبعد اختيار المفتاح قم على النقر على Open كما هو بالصورة وبعدها اذهب مرة اخرى الى شاشة session وانقر على مفتاح الاتصال open كما هو ظاهر في الصورة التالية:

putty main screen

وعندها وفي حال نجاح الامر سوف تظهر لك نافذة putty المعهوده وتطلب منك ادخال كلمة المرور الخاصة بالمفتاح (في حال تم توليد المفتاح بكلمة المرور كما هو في حالتنا) على الشكل الذي يظهر في الصورة ادناه:

putty logged ssh using key

قم على ادخال اسم المستخدم للخادم وهو هنا في حالتنا root ومن ثم اضغظ على مفتاح الادخال enter ومن ثم ادخل كلمة المرور الخاصة بالمفتاح واضغظ على مفتاح الادخال enter وعندها في حال كانت كلمة المرور الخاصة بالمفتاح صحيحة وكل شيء على ما يرام سوف يتم تسجيل دخول الى الخادم ويظهر مؤشر الشل # كالعادة كما هو ظاهر في الصورة اعلاه.

وبالتالي نكون قد سجلنا الدخول الى الخادم دون الحاجة لادخال كلمة مرور الجذر.

وفي حال رغبتنا تسجيل الدخول الى الخادم مرة اخرى كل ما علينا الا تشغيل putty وادخال عنوان الخادم واختيار المفتاح والاتصال بالخادم (اي تطبيق ما ورد في البند تسجيل الدخول الى السيرفر بواسطة putty باستخدام المفتاح السري (الخاص) اعلاه).

مراجع