المساعد الشخصي الرقمي

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



salima
11-02-2013, بتوقيت غرينيتش 02:23 AM
اليوم سوف اتحدث عن شرح كيفية الاتصال بخدمة ssh (الشل) للمستخدم الجذر (root) على خادم server (سيرفر SERVER) اللينكس عن طريق نظام المفاتيح (keys) ودون الحاجة لادخال كلمة المستخدم root في كل مرة يتم فيها تسجيل الدخول الى السيرفر SERVER. وانصحك بقراءة كامل المقال قبل البدء.

http://upload.dzbatna.net/upfiles/1qY12528.gif


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

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




ما هو نظام المفاتيح باختصار وبشكل ميسر؟

نظام المفاتيح او (الترميز بالمفتاح العمومي) ترجمة للانجليزية من (Public-key cryptography) هو نظام للتشفير يعتمد على توليد مفتاحين احدهما عام والاخر سري ويمكن استخدام هذين المفتاحين كاطراف اتصال وتوثيق بين طرفيتين او اكثر كما انه يمكن استخدام المفاتيح لتوثيق وتشفير الملفات والبيانات بالاضافة الى انه يمكن ايضا حماية المفتاح السري بكلمة مرور او ما يسمى (pass-phrase) . للمزيد حول التشفير بالمفتاح العمومي راجع الرابط التالي على ويكيبيديا (http://en.wikipedia.org/wiki/Public-key_cryptography). وحيث انني هنا سوف استخدم نظام المفاتيح للدخول الى السيرفر SERVER دون الحاجة لادخال كلمة مرور المستخدم root في كل مرة فانني لن اتحدث باطالة عن نظام المفاتيح لانه يحتاج الى مقال منفصل ولكنني سوف اكتفي بشرح طريقة شرح كيفية توليد مفتاح (ssh key) وشرح كيفية ضبطه وتوليفه بين السيرفر SERVER المطلوب الاتصال به وبين الاجهزة الاخرى التي سوف تقوم بالاتصال به.

لماذا احتاج لنظام المفاتيح بما انني استطيع استخدام كلمة مرور الجذر root؟

في الكثير من الاحيان وخصوصا مع مدراء الانظمة الذين يديرون منظومة معينه تحتوي على عدد ليس بقليل من السيرفر SERVERات فان السرعة في الوصول الى السيرفر SERVER تكون مهمه خصوصا لعلاج مشكلة معينه او امر طارئ وهذا الامر يتطلب ادخال كلمة مرور المستخدم الجذر root وهذا يتطلب معرفة كلمة المرور. وهذا الامر قد يكون سهلا عندما تدير سيرفر SERVER واحد ولكن عندها يكون لديك مجموعة من السيرفر SERVERات وبكل تاكيد فان كلمة مرور الجذر مختلفة لكل سيرفر SERVER وبكل تاكيد كلمة المرور ليس من السهل تذكرها فهذا يتطلب منك وقتا اضافية للحصول على كلمة المستخدم الجذر والتي بكل تاكيد ايضا يجب ان تكون محفوظة بصورة مشفرة على وسيلة تخزين امنه وبالتالي مزيد من الوقت للحصول عليها خصوصا اذا كان الامر يتعلق بمجموعة كبيرة من السيرفر SERVERات التي تتعامل معها بشكل يومي وبدخول مستمر على مدار الساعة. وهذا هو السبب الاساسي الذي يجعلني اكتب هذا المقال اليوم هو لتسهيل عملية الوصول الى السيرفر SERVER باسرع ما يمكن ودون الحاجة لمعرفة كلمة مرور الجذر ، حيث ان ما سوف ندخله هو كلمة مرور المفتاح السري والتي سوف تكون مشتركة بين جميع السيرفر SERVERات التي نديرها كونها كلمة مرور المفتاح الذي سوف نستخدمه وهي ما يجب ان نتذكره فقط للوصول الى السيرفر SERVER.

ومع ذلك فهناك ايضا اسباب اخرى لاستخدام نظام المفاتيح في الدخول الى السيرفر SERVERات بدلا من كلمة المرور الفعليه من ضمنها:

تبادل الملفات بين السيرفر SERVERات بصورة تلقائيه دون الحاجة لتدخل البشر في ذلك وهذا يتطلب مصادقة اليه بين الخادم serverين.
استخدام نظام المفاتيح قد يكون أمن اكثر من ادخال كلمة مرور الجذر كون نظام المفاتيح يتطلب وجود المفتاح السري وكذلك معرفة كلمة مرور المفتاح السري في حال تم حمايته بكلمة مرور.


ما هو المطلوب؟

ان يكون لديك سيرفر SERVER لينكس (جهاز لينكس متصل بالشبكة) ولديك صلاحيات المستخدم الجذر root والقابلية للدخول الى ssh. وهو هنا السيرفر SERVER الذي نود ضبطه للدخول اليه دون الحاجة لادخال كلمة مرور المستخدم الجذر root في كل مرة.
ان يكون لديك جهاز اخر يعمل بنظام التشغيل لينكس من اجل الدخول الى السيرفر SERVER ، اويعمل بنظام التشغيل ويندوز ولديك برنامج putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/) من اجل الدخول الى السيرفر SERVER عن طريق ssh. وهذا الجهاز هنا هو العميل الذي سوف مستخدمه للوصول الى السيرفر SERVER.
وجود وسيلة اتصال بين الجهازين سواء عن طريق شبكة محلية او عن طريق شبكة الانترنت.
تعريفات

السيرفر SERVER الهدف: هو السيرفر SERVER الذي سوف يتم ضبطه للدخول اليه بدون كلمة مرور وذلك عن طريق نظام المفاتيح.

تنويه: وجود الاشارة # قبل اي امر شل ssh يعني انه يجب تنفيذ هذا الامر من قبل المستخدم root وبالتالي لا تدخل الامر مع اشارة # بل ادخل ما بعده. ووجود الاشارة # في كل سطر يعني ان كل امر منفصل عما سبقه. ووجود الاشارة $ تعني بداية امر ssh ولكن ليس بالضرورة ان تكون مسجلا الدخول بالمستخدم الجذر root.

الخطوة الاولى: توليد مفتاح ssh

الخطوة الاولى هي اننا سوف نحتاج انشاء مفتاح ssh جديد وسوف نستخدم هذا المفتاح للربط بين السيرفر SERVERات. في حال كنت قد قمت على توليد مفتاح مسبقا انتقل للخطوة التالية، اما اذا لم يكن لديك مفتاح مسبق فقم على توليد المفتاح بادخال الامر التالي في شل السيرفر SERVER الهدف بعد تسجيل الدخول بالمستخدم root. وبكل تاكيد اذا كنت تطبق هذا الشرح طريقة لاول مرة فانه يجب عليك انشاء مفتاح جديد.

في البداية سوف نقوم على انشاء مجلد جديد ليتم حفظ ملفات المفتاح فيه وليكن /root/newk مثلا لهذا نفذ الامر

رمز PHP:

<code style="white-space:nowrap"> <code> # mkdir /root/newk
# cd /root/newk
</code> </code>


ومن ثم قم على ادخال امر توليد المفتاح بادخال الامر التالي

رمز PHP:

<code style="white-space:nowrap"> <code> # ssh-keygen -t rsa -b 2048
</code> </code>

بعد ادخال الامر السابق والظغط على مفتاح الادخال سوف يظهر ما يلي

رمز PHP:

<code style="white-space:nowrap"> <code> Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
</code> </code>

ادخل مسار الملف لحفظ المفتاح وهو كالتالي:

رمز PHP:

<code style="white-space:nowrap"> <code> /root/newk/id_rsa
</code> </code>

وبعد ادخال مسار ملف المفتاح والظغط على انتر سوف يظهر كالاتي

رمز PHP:

<code style="white-space:nowrap"> <code> 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):
</code> </code>

وفي هذه المرحلة يجب علينا اختيار كلمة مرور او ما يسمى passsphrase لكي نقوم بحماية المفتاح بواسطة كلمة المرور ، لهذا ادخل كلمة مرور قوية لا تقل عن 8 خانات وتحتوي على احرف وارقام ورموز وتذكر انك سوف تحتاج لتذكر هذه الكلمة فقط للدخول الى اي سيرفر SERVER سوف يتم ربطه بهذا المفتاح.
بعد ادخال كلمة المرور قم بالظغط على انتر ومن ثم كرر كلمة المرور واظغط انتر. ولاحظ انه عند كتابة كلمة المرور فانها لن تظهر ولن يظهر بدلها اشارات * وهذا امر طبيعي في اللينكس عند ادخال كلمات مرور فكل ما عليك هو الكتابة والاستمرار في الكتابة وعند الانتهاء الظغط على مفتاح الادخال في لوحة المفاتيح (انتر Enter).

بعد ادخال كلمة المرور وتاكيدها فانه سوف يظهر لنا كالتالي


رمز PHP:

<code style="white-space:nowrap"> <code> 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:
+--&#91; RSA 2048&#93;----+
| |
| + |
| . + . |
| O o |
| o S . |
| + + |
| = E |
| + +oo . |
| oo++o |
+-----------------+
</code> </code>

وهذا يعني نجاح انشاء مفتاح ssh وبالتالي فان المجلد /root/newk/ الان يحتوي على جزئي المفتاح ، العام والسري للمفتاح. ولو قمنا على استعراض محتويات المجلد عن طريق الامر ls سوف يظهر لنا كالتالي

رمز PHP:

<code style="white-space:nowrap"> <code> # 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
</code> </code>

سوف نلاحظ وجود الملف id_rsa والملف id_rsa.pub ، وللعلم id_rsa هو الجزء السري للمفتاح او ما يسمى المفتاح السري secret key والملف id_rsa.pub هو الجزء العام للمفتاح او ما يسمى المفتاح العام public key.

والتالية هي صورة ماخوذة من الطرفية تظهر لنا نتيجة تنفيذ الاوامر اعلاه:

http://upload.dzbatna.net/upfiles/OaG03907.jpg

وبعد ان قمنا على توليد المفتاح للمرة الاولى سوف نبدا الان بضبط اعدادات استخدام المفتاح للوصول الى السيرفر SERVERات وسوف نبدا في الخطوة التالية بضبط اعدادات السيرفر SERVER ليسمح بتسجيل الدخول الى ssh باستخدام المفتاح الذي قمنا على توليده.

الخطوة الثانية: ضبط السيرفر SERVER ليسمح بتسجيل الدخول اليه ssh باستخدام المفاتيح

بما اننا في الخطوة الاولى قمنا على توليد المفتاح على نفس السيرفر SERVER فننا سوف ننقل محتويتات الملف id_rsa.pub (وهو الجزء العام من المفتاح) الى الملف authorized_keys الموجود بداخل المجلد .ssh للمستخدم root على السيرفر SERVER اي اننا سوف ننقل محتويات الملف id_rsa.pub بداخل الملف /root/.ssh/authorized_keys وذلك عن طريق الامر التالي (في حال عدم وجود الملف authorized_keys في المسار المطلوب فان الامر التالي ايضا سوف يقوم على انشاء الملف وفي حال كان الملف موجود ويحتوي على بيانات فان الامر التالي سوف يقوم على اضافة محتويات الملف id_rsa.pub في اخر الملف:

رمز PHP:

<code style="white-space:nowrap"> <code> # cat /root/newk/id_rsa.pub >> /root/.ssh/authorized_keys
</code> </code>

اما في حال كنا قد قمنا على توليد المفتاح على سيرفر SERVER اخر او كان لدينا مفتاح تم توليد بوقت سابق فلاحظ انك يجب ان تنقل محتويات الملف id_rsa.pub وتقوم بوضع ما بداخله من محتويات في اخر محتويات الملف /root/.ssh/authorized_keys

الخطوة السابقة هي لنسمح للمستخدم root باستخدام المفتاح الذي قمنا بانشاءه من اجل تسجيل الدخول الى الشل بدلا من استخدام كلمة المرور للحساب.

الخطوة الثالثة: نقل المفتاح السري الى الجهاز العميل وتجربة الدخول الى الخادم server بواسطة المفتاح

حتى نستطيع الدخول الى السيرفر SERVER باستخدام المفتاح بدلا من كلمة المرور يجب ان يكون لدينا الجزء السري من المفتاح وهو في مثالنا هذا الملف (id_rsa) الموجود في المسار التالي /root/newk/id_rsa.

لهذا فانه يجب علينا نقل الملف id_rsa الى الجهاز الذي نود تسجيل الدخول منه باستخدام الوسيلة المناسبة سواء عن طريق scp او عن طريق winsp او عن طريق rsync. وكذلك لاحظ انه يجب عليك ان تحتفظ بنسخة احتياطية ايضا من الجزء السري من المفتاح لغايات الاستخدام المستقبلي في حال ضياع الملف الذي بحوزتك.

مثلا لو اننا نرغب بنقل المفتاح السري الى جهاز لينكس اخر فانني سوف استخدم مثلا الامر التالي للنقل

رمز PHP:

<code style="white-space:nowrap"> <code> scp -p 22 /root/newk/id_rsa root@linux.computer:~/
</code> </code>

مع استبدال linux.computer بعنوان الجهاز او اي بي الجهاز الذي نود نقل الملف اليه

الدخول الى السيرفر SERVER من انظمة لينكس ومثيلاتها

ولنفترض اننا قمنا على نقل الجزء السري من المفتاح الى احد سيرفر SERVERات اللينكس ، ونود الان تسجيل الدخول الى السيرفر SERVER الهدف عن طريق جهاز اللينكس هذا فما هي الطريقة وكيف يم ذلك؟

في المثال السابق قمنا على نقل الجزء السري من المفتاح والموجود بالملف id_rsa الى الجهاز الذي نود ان نقوم بتسجيل الدخول منه الى السيرفر SERVER لهذا فهناك طريقتين لتسجيل الدخول الى ssh عن طريق المفتاح:

الطريقة الاولى: وهي باستخدام الامر ssh مع تزويد الامر بمسار المفتاح السري وذلك يتم كالتالي:

رمز PHP:

<code style="white-space:nowrap"> <code> # ssh -p 22 -l root -i /root/id_rsa linux.server
</code> </code>

مع استبدال linux.server بعنوان او رقم اي بي السيرفر SERVER الهدف ولاحظ انه في هذه الطريقة يجب ان تضع المسار الكامل للملف id_rsa وهو في مثالنا السابق /root/id_rsa

الطريقة الثانية: والتي تتم بوضع المفتاح السري (id_rsa) داخل المجلد /root/.ssh/

وفي هذه الطريقة نقوم بنقل المفتاح السري id_rsa بداخل المجلد /root/.ssh في الجهاز الذي نود الدخول منه الى السيرفر SERVER.

لاحظ انه عند تنفيذ امر الدخول فانه سوف تظهر لنا رسالة تفيد بمكان وجود المفتاح السري وتطلب منا ادخال كلمة مرور المفتاح السري (pass-phrase) التي قمنا على ادخالها عن انشاء المفتاج السري. كما يلي: رمز PHP:

<code style="white-space:nowrap"> <code> &#91;root@pc ~&#93;# 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 2014 from pc.localhost
root@server &#91;~&#93;#
</code> </code>

لاحظ في الكود code اعلاه انه عند ادخال كلمة مرور المفتاح السري فانه تم الدخول الى السيرفر SERVER وتلاحظ اننا انتقلنا من جهاز الى جهاز وبالتالي فان عملية الاتصال بالشل ssh للسيرفر SERVER نجحت دون الحاجة لادخال كلمة مرور المستخدم الجذر.

الدخول الى السيرفر SERVER من انظمة ويندوز عن طريق putty

في حال كنت تستخدم نظام التشغيل ويندوز وكنت تستخدم برنامج putty الشهير لتسجيل الدخول الى السيرفر SERVER وكنت ترغب باستخدام المفتاح بدلا من كلمة المرور الطبيعية فانه يجب ان تقوم بنقل المفتاح السري ايضا الى جهاز الويندوز، يمكنك اجراء ذلك باستخدام WinSCP (http://winscp.net/eng/index.php)او باستخدام اي وسيلة اخرى تراها مناسبة وممكنه.

تحويل المفتاح السري (الخاص) الى الصيغة المدعومه من putty وهي ppk file

لاستخدام المفتاح الذي قمنا على توليده مع putty يجب ان نقوم ولاول مرة فقط باستخدام الاداة PuTTYgen والتي يمكن تحميلها من هنا وذلك لتحويل المفتاح السري الى صيغة متوافقة مع putty وهي ppk حيث ان putty لا تدعم صغية المفتاح السري المتعارف عليه ويجب تحويله الى صغيه يستطيع برنامج putty التعامل معها وهذا الامر يتم عن طريق الاداة PuTTYgen (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html).

تحويل المفتاح السري (الخاص) الى الصيغة المدعومه من putty وهي ppk file

وعملية التحويل تتم كالتالي:

بعد تحميل puttygen.exe قم على تشغيله وسوف يظهر البرنامج كالتالي:

http://upload.dzbatna.net/upfiles/Q9004870.jpg

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

http://upload.dzbatna.net/upfiles/nmi05064.jpg

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

http://upload.dzbatna.net/upfiles/0GL05885.jpg

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

http://upload.dzbatna.net/upfiles/vKJ06055.jpg

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

http://upload.dzbatna.net/upfiles/c4t06252.jpg

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

http://upload.dzbatna.net/upfiles/iyj06430.jpg

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

http://upload.dzbatna.net/upfiles/3VL06906.jpg

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

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

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

http://upload.dzbatna.net/upfiles/7Tw07669.jpg

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

http://upload.dzbatna.net/upfiles/Mfh07786.jpg

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

http://upload.dzbatna.net/upfiles/gyU08031.jpg

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

http://upload.dzbatna.net/upfiles/q4H08264.jpg

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

http://upload.dzbatna.net/upfiles/2Js08365.jpg

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

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

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





https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى