مدخل إلى ssh العمل مع خواديم SSH: العملاء والمفاتيح


عبدالهادي الديوري

SSH عبارة عن بروتوكول آمن يُستخدم كوسيلة أساسيّة للاتصال بخوادم لينكس عن بُعد. SSH تُقدّمُ واجهة نصّية بحيثُ تعطيك الصّلاحيّة لكتابة أي أوامر وتنفيذها مباشرة على الخادوم. بعد الاتصال، جميع الأوامر التي تكتبها على الطرفيّة محليّاً تُرسل إلى الخادوم عن بعد وتُنفّذ هناك. 
في هذا الدّليل السّريع، سنُغطّي بعضاً من أكثر وسائل الاتّصال بSSH شيوعاً لتحقيق أهدافك. هذا المقال يُمكن أن يُستعمل كمرجع سريعٍ كلّما احتجت إلى معرفة كيفية الاتصال بخادومك أوضبطه بطرق مختلفة.

نظرة عامة على SSH

أشهر وسيلة للاتّصال بخادوم لينكس عن بعد هي استعمال SSH .SSH اختصار ل Secure Shell أو شل آمن، حيث تُوفّر وسيلة آمنة لتنفيذ الأوامر، إضافة تعديلات وضبط الخدمات عن بُعد. عندما تتّصل عبر SSH، تقوم بتسجيل الدّخول باستخدام حساب موجود على الخادوم.

كيف يعمل SSH

عندما تتّصل عبر SSH، ستدخلُ إلى جلسة شل (shell session)، وهي واجهة نصّيّة تُمكّنك من التّفاعل مع خادومك. أثناء الجلسة جميع الأوامر التي تُنفّذها في الطرفيّة محليّاً تُرسل عبر نفق SSH أو SSH tunnel مُشفّر وتُنفّذ على الخادوم. 

اتصال SSH يُنفّذ باستخدام نموذج خادوم خاص بالعميل. هذا يعني أن إنشاء اتصال SSH يتطلّب تشغيل برمجيّة تسمى عفريت SSH على الخادوم. تستمع هذه البرمجيّة للاتصالات على منفذ شبكة معيّن، طلبات تسجيل الدّخول والاستيثاق authentication من هوية صاحب الاتصال وتقوم بتقديم البيئة المناسبة إذا قام المستخدم بتوفير المعلومات الصّحيحة. 

يجب على المُستخدم أن يمتلك على جهازه برمجية تسمى عميل  SSH أو SSH client، البرمجية تعرف كيف تتواصل باستخدام بروتوكول SSH ويُمكن أن تُمنَح معلومات عن المُضيف البعيد (الخادوم) للاتّصال به،عن طريق اسم المستخدم ومعلومات يجب تمريرها للاتّصال بنجاح. يمكن للعميل أيضاً أن يحدّد تفاصيل معيّنة عن نوع الاتّصال المرغوب فيه.

كيف يقوم SSH بتسجيل دخول المستخدمين

العميل يصادق إمّا باستخدام كلمات المُرور ( أقلّ أماناً وغير منصوح بها) أو عن طريق مفاتيح SSH، التي تعتبر آمنة جدّاً. 

كلمات المرور تُشفَّرُ وتعتبر سهلة الفهم بالنّسبة للمُستخدمين الجُدد. لكنّ المُخترقين يستعملون برمجيّات خبيثة يُمكن لها أن تُكرّر محاولات الدّخول إلى حواسيب من يستخدمون كلمات المرور، ما قد يُؤدي إلى اختلال أمني. لهذا السّبب ننصح دائما بالاعتماد على استيثاق SSH المبدئي لمُعظم الإجراءات. 

مفاتيح SSH هي مجموعة من المفاتيح المُشفّرة يُمكن استعمالها للاستيثاق. كلّ مجموعة تحتوي على مفتاح عام وخاص. يُمكن نشر المفتاح العام بشكل حرّ، أما المفتاح الخاص فيجب الاحتفاظ به ولا يجب أن يُكشف لأحد.

للاستيثاق باستخدام مفاتيح SSH، يجب على المستخدم أن يمتلك زوج مفتاح SSH على جهازه المحلي. وعلى الخادم البعيد المفتاح العام يجب أن ينسخ إلى ملفّ بداخل مجلّد منزل المُستخدم على ssh/authorized_keys./~ . هذا الملفّ يحتوي على قائمة من المفاتيح العامّة - واحد في كلّ سطر- مُخوّلٌ لها بالدّخول إلى الحساب.

عندما يتّصل عميل بالمُضيف Host راغباً باستخدام استيثاق مفتاح SSH، سيُعلم الخادومَ عن أي مفتاح عام يستخدم. يتحقّق الخادوم بعد ذلك من ملفّ المفاتيح المُخوّل لها authorized_keys باحثاً عن المفتاح العام المُستخدم. ثم يولّد سلسلة نصّية عشوائيا ويُشفّر باستخدام المفتاح العام، هذا النّص المُشفّر يُمكن فك تشفيره فقط باستعمال المفتاح الخاصّ المُقترن. سيُرسل الخادوم هذه الرّسالة المُشفرة إلى العميل لاختبار إذا ما كان فعلا يمتلك المفتاح الخاصّ المُرتبط.

عند استلام الرّسالة، سيقوم العميل بفك التّشفير باستخدام المفتاح الخاص ويجمع السّلسلة نصّية العشوائية مع هوية جلسة سابقة (session ID) . ويولّد بعد ذلك مزيج MD5 الخاص بالقيمة وينقلها مجدّدا إلى الخادوم. الخادوم يمتلك سابقا الرّسالة الأصليّة وهوية الجلسة، لذلك يُمكنه أن يُقارن مزيج MD5 المولّد من القيّم ويُحدّد بأن العميل يجب أن يمتلك المفتاح الخاص.

الآن بما أنّك تعلم كيف يعمل SSH، يُمكننا البدء في الحديث عن بعض الأمثلة للتعرّف على الطّرق المُختلفة للعمل مع SSH.

توليد مفاتيح SSH والعمل معها

هذا القسم سيغطي كيف تولّد مفاتيح SSH على جهاز عميل ونشر المفتاح العام إلى الخوادم حيث يجب أن تُستخدم. هذا قسم جيّد للبدء به إذا لم يسبق لك أن ولّدت مفاتيح، ويجب عليك البدء به إذا أردت تأمين خادومك نظراً لزيادة الأمان التي تتيحه لنا في الاتصّالات المُستقبليّة.

توليد زوج مفاتيح SSH

توليد زوج مفاتيح SSH عام وخاص على جهازك المحلي هو أول خطوة نحو استيثاق مع خادوم عن بعد بدون كلمة مرور. إلا إذا كنت تملك سببا جيدا لعدم فعل ذلك، يجب عليك دائما الاتصال باستخدام مفاتيح SSH

يمكن استخدام مجموعة من خوارزميّات التشفير لتوليد مفاتيح SSH، مثل RSA، DSA، ECDSA. مفاتيح RSA مُفضلة بشكل عام وهي نوعية المفاتيح الافتراضية.

لتوليد زوج مفاتيح RSA على جهازك المحلي، أكتب: 

$ ssh-keygen

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/demo/.ssh/id_rsa): 

هذا المحث (prompt) يتيح لك اختيار مكان لتخزين مفتاح RSA الخاص. اضغط Enter للخيار الافتراضي، الذي سيُخزنها في مجلّد .ssh المخفي قي مجلد المنزل. ترك المسار الافتراضي سيتيح لعميل SSH إيجاد المفاتيح آلياً. 

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

المحث التالي يتيح لك إدخال جملة مرور بطول اعتباطي لتأمين مفتاحك الخاص. افتراضياً يجب عليك إدخال جملة المرور هذه في كل مرّة تستعمل المفتاح الخاص، كإجراء أمني إضافي. يُمكنك أن تضغط Enter لترك الحقل فارغا إذا لم ترغب في إنشاء كلمة مرور. تذكّر فقط أن هذا سيخوّل أي شخص يملك قابلية التحكم بمفتاح SSH الخاص للدخول إلى الخادوم الخاص بك. 

إذا اخترت وضع كلمة مرور لن يظهر شيء على الشاشة أثناء الكتابة، وهذا من أجل الاحتياط الأمني. 

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

هذه العملية ولّدت زوج مفاتيح SSH من نوع RSA، وملفّات تحت المجلد المخفي .ssh في مجلد المنزل وهذه الملفّات هي: 

  • ssh/id_rsa./~: المفتاح الخاص. لا تنشر هذا الملفّ! 
  • ssh/id_rsa.pub./~: المفتاح العام المُرتبط. هذا الملفّ يمكن مشاركته بحرية.

توليد زوج مفاتيح مع رقم أكبر من البتات Bits

مفاتيح SSH تكون افتراضياً 2048 بت. هذا يعتبر جيّداً بشكل عام أمنياً، لكنّك تستطيع تحديد عدد أكبر لمزيد من الأمان. 
لفعل ذلك ضَمِّن معامل -b مع عدد البتات الذي تريد. معظم الخوادم تدعم 4096 بت على الأقل. المفاتيح الأطول يُمكن ألّا تُقبل لأغراض الحماية من DDOS: 

ssh-keygen -b 4096 

إذا سبق لك أن أنشئت مفتاحاً، سيُطلب منك إذا ما كنت ترغب في الكتابة فوق المفتاح السّابق: 

Overwrite (y/n)? 

إذا اخترت نعم (y)، فإن المفتاح الجديد سيكتب فوق المفتاح السّابق ولن تستطيع استعمال المفتاح القديم بعدها للدّخول إلى الخادوم، لذلك كن حذرا أثناء تغيير المفتاح.

حذف وتغيير جملة المرور على المفتاح الخاص

إذا سبق لك وأن عيّنت جملة مرور للمفتاح الخاص ورغبت في تغييرها فالأمر بسيط، ويمكنك أن تقوم به بسهولة. 

ملاحظة: لتغيير أو حذف جملة المُرور، يجب عليك معرفة جملة المرور الأصليّة. إذا فقدت جملة المرور إلى المفتاح،فللأسف لا يوجد طريقة لإرجاعها وسيتوجّب عليك توليد زوج مفاتيح جديد.

لتغيير أو حذف جملة المرور، فقط أكتب: 

ssh-keygen -p 
Enter file in which the key is (/root/.ssh/id_rsa): 

يُمكنك أن تُحدد مسار المفتاح الذي تحاول تعديله أو اضغط Enter لقبول القيمة الافتراضيّة: 

Enter old passphrase: 

أكتب جملة المرور القديمة المراد تغييرها. بعد ذلك ستُسأل لإدخال جملة مرور جديدة:

Enter new passphrase (empty for no passphrase): 
Enter same passphrase again:

هنا أكتب جملة المرور الجديدة أو اضغط Enter لحذفها.

عرض بصمة مفتاح SSH

ينشر كل زوج مفاتيح بصمة مُشفّرة يُمكن استعمالها لتعريف المفاتيح بشكل فريد. يُمكن أن يكون هذا جيّدا في كثير من الحالات. 

لإيجاد بصمة مفتاح SSH، اكتب: 

ssh-keygen -l 
Enter file in which the key is (/root/.ssh/id_rsa): 

إذا كان هذا هو مسار المفتاح الصحيح اضغط ENTER ، أو اكتب المسار الخاص إذا كان المسار مختلفاً، ستُرجع سلسلة نصيّة تحتوي على سعة المفتاح من البتات، البصمة، والحساب والمُضيف الذي أنشئت له، والخوارزمية المُستخدمة: 

4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA) 

نسخ مفتاح SSH العام إلى الخادوم مع SSH-Copy-ID 

لنسخ مفتاحك العام إلى الخادوم، بغرض الاستيثاق بدون كلمة مرور، سنتخذ بعض الإجراءات.

إذا كنت حالياً تمتلك وصولا إلىSSH عن طريق كلمة مرور مضبوطاً على الخادوم، وتمتلك أداة ssh-copy-id مثبّتة، فهذه العمليّة بسيطة. أداة ssh-copy-id تأتي مضمّنة على حزم OpenSSH في كثير من توزيعات لينكس، لذلك فمن المُحتمل أن تكون لديك افتراضيا. 

إذا كنت تملك هذا الخيّار، يُمكنك بسهولة نقل مفتاحك العام باستعمال: 

ssh-copy-id username@remote_host 

سيُطلب منك إدخال كلمة مرور المُستخدم على الجهاز البعيد: 

The authenticity of host ‘111.111.11.111 (111.111.11.111)’ can’t be established. 
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 
Are you sure you want to continue connecting (yes/no)? yes 
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed 
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys 
demo@111.111.11.111’s password: 

بعد كتابة كلمة المرور، مُحتوى مفتاح ssh/id_rsa.pub./~ سوف يُلحق إلى آخر ملف ssh/authorized_keys./~ الخاصّ بحساب المُستخدم: 

Number of key(s) added: 1

Now try logging into the machine, with: "ssh ‘demo@111.111.11.111’"
and check to make sure that only the key(s) you wanted were added. 
يُمكنك الآن الدّخول إلى الحساب بدون كلمة مرور: 
ssh username@remote_host

نسخ مفتاح SSH العام إلى خادوم بدون SSH-Copy-ID

إذا لم تكن تملك أداة ssh-copy-id، لكنك لا زلت تملك وصولا إلى الخادوم البعيد بكلمة مرور، يُمكنك نسخ محتويات المفتاح العام بطريقة مختلفة. 

يُمكنك إرجاع مُحتويات المفتاح وتمريرها إلى أمر SSH، في الجهة البعيدة يُمكنك التأكد إذا ما كان مجلّد ssh./~ موجوداً، وبعد ذلك ألحق المحتوى المُمَرّر إلى ملفّ ssh/authorized_keys./~

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

سيُطلب منك كتابة كلمة المرور للحساب البعيد: 

The authenticity of host ‘111.111.11.111 (111.111.11.111)’ can’t be established. 
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 
Are you sure you want to continue connecting (yes/no)? yes 
demo@111.111.11.111’s password: 

بعد إدخال كلمة المرور، سيُنسخ مفتاحك، متيحاً لك الاتصال بدون كلمة مرور: 

ssh username@remote_IP_host

نسخ مفتاح SSH العام إلى خادوم يدويا

إذا لم تكن تملك وصولا عن طريق كلمة مرور، ستحتاج لإضافة مفتاحك العام إلى الخادوم البعيد يدويّاً. 

على جهازك المحليّ، يُمكنك إيجاد محتويات ملفّ مفتاحك العام بكتابة: 

cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test 

يُمكنك نسخ هذه القيمة، ولصقها يدويّاً في المكان المناسب على الخادوم البعيد. يجب عليك أن تتّصل بالخادوم بوسيلة مختلفة.

على الخادوم البعيد، أنشئ مجلّد ssh./~ إذا لم يكن موجوداً من قبل: 

mkdir -p ~/.ssh 

بعد ذلك، يُمكنك إنشاء أو إلحاق ملفّ ssh/authorized_keys./~ بكتابة: 

echo سلسلة_المفتاح_العام >> ~/.ssh/authorized_keys 

يجب عليك الآن أن تتمكّن من الدّخول إلى الخادوم بدون كلمة مرور عبر أمر ssh:

ssh username@remote_IP_host

ترجمة -مع شيءٍ من التصرّف- للقسم الأول من مقال: SSH Essentials: Working with SSH Servers, Clients, and Keys.



1 شخص أعجب بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن