FlowingDev

شرح مفاتيح SSH: جواز سفرك الرقمي إلى السيرفر

تعلم كيف توفر مفاتيح SSH مصادقة آمنة بدون كلمة مرور للوصول إلى السيرفرات البعيدة باستخدام سحر التشفير بالمفتاح العام.

جرّب الأداة: مولّد مفاتيح SSH

في جملة واحدة

مفاتيح SSH هي زوج من ملفات التشفير—أحدهما خاص وسري، والآخر عام ويمكن مشاركته—تتيح لك إثبات هويتك لجهاز كمبيوتر بعيد دون كتابة كلمة مرور.

المشكلة التي يحلها

في الأيام الأولى للإنترنت، إذا أردت إدارة سيرفر بعيد، كنت ستستخدم شيئًا مثل Telnet. كنت ستكتب اسم المستخدم وكلمة المرور، وسيطيران عبر الشبكة كنص عادي يمكن لأي شخص رؤيته. كان الأمر أشبه بالصراخ برقم التعريف الشخصي (PIN) لحسابك البنكي في غرفة مزدحمة. وضع كارثي.

ثم جاء SSH، أو الـ Secure Shell. قام بتشفير المحادثة بأكملها، مما كان قفزة هائلة إلى الأمام. الآن يمكنك كتابة كلمة مرورك، وسيتم تشفيرها في طريقها إلى السيرفر. أفضل بكثير! لكن كلمات المرور لا تزال بها مشاكل. يمكن أن تكون ضعيفة، أو تُنسى، أو يتم تخمينها، أو اختراقها بهجمات القوة الغاشمة (brute-force). إدارة كلمات المرور لعشرات السيرفرات ولفريق كامل من المطورين تصبح كابوسًا أمنيًا ولوجستيًا. من لديه حق الوصول إلى ماذا؟ ماذا يحدث عندما يغادر شخص ما الشركة؟ هل تغير كلمة المرور على 50 سيرفرًا وتخبر الجميع بالكلمة الجديدة؟

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

كيف يعمل من الداخل

السحر وراء مفاتيح SSH هو مفهوم يسمى التشفير غير المتماثل (asymmetric cryptography). على عكس كلمة المرور البسيطة (وهي سر متماثل—أنت والسيرفر تعرفان نفس الشيء)، يتكون زوج مفاتيح SSH من مفتاحين مختلفين ولكنهما مرتبطان رياضيًا.

زوج المفاتيح العام والخاص: قصة حب من طرف واحد

تخيل أن لديك قفلًا سحريًا ومفتاحًا فريدًا واحدًا. القفل هو مفتاحك العام (public key). يمكنك عمل مليون نسخة من هذا القفل وإعطائها لأي شخص. يمكنك نشره على موقعك، وإرساله بالبريد الإلكتر الإلكتروني لأصدقائك، ووضعه على كل سيرفر تريد الوصول إليه. إنه عام؛ لا ضرر من انتشاره.

مفتاحك الخاص (private key) هو المفتاح الوحيد الذي يمكنه فتح هذا النوع المحدد من الأقفال. أنت تحرس هذا المفتاح بحياتك. تحتفظ به على جهاز الكمبيوتر الخاص بك، ولا تشاركه أبدًا، ومن الأفضل أن تحميه بعبارة مرور (passphrase).

  • المفتاح الخاص يمكنه إنشاء توقيع رقمي.
  • المفتاح العام يمكنه التحقق من أن التوقيع تم إنشاؤه بواسطة مفتاحه الخاص المقابل.

الأهم من ذلك، لا يمكن استخدام المفتاح العام لمعرفة المفتاح الخاص. العلاقة الرياضية تعمل في اتجاه واحد فقط، ومن هنا جاء اسم "غير متماثل".

مصافحة المصادقة (Authentication Handshake)

إذًا كيف يتم هذا الأمر عندما تحاول تسجيل الدخول؟ لنفترض أنك كتبت ssh user@server.com.

  1. التعريف: جهاز الكمبيوتر الخاص بك (الكلاينت) يطرق باب السيرفر. "مرحبًا، أود تسجيل الدخول باسم user. أعتقد أن مفتاحي العام هو أحد المفاتيح التي ستتعرف عليها. هذا هو معرّفه."
  2. التحدي: ينظر السيرفر في ملف ~/.ssh/authorized_keys الخاص بالمستخدم user. هذا الملف هو مجرد قائمة بالمفاتيح العامة المسموح لها بتسجيل الدخول بهذا المستخدم. يجد السيرفر مفتاحًا عامًا مطابقًا. "آه، أرى قفلك العام! أصدقك، لكني بحاجة إلى إثبات. لإثبات أنك تملك المفتاح الخاص، يرجى توقيع هذه الرسالة العشوائية ذات الاستخدام الواحد التي اخترعتها للتو: R2-D2_is_the_true_hero."
  3. التوقيع: يستقبل الكلاينت الخاص بك التحدي. يستخدم مفتاحك الخاص لإنشاء توقيع رقمي فريد لتلك الرسالة المحددة. ثم يرسل هذا التوقيع مرة أخرى إلى السيرفر. مفتاحك الخاص نفسه لا يغادر جهاز الكمبيوتر الخاص بك أبدًا.
  4. التحقق: يستقبل السيرفر التوقيع. يأخذ المفتاح العام الذي لديه في الملف ويستخدمه للتحقق من التوقيع مقابل رسالة التحدي الأصلية. بما أن مفتاحك الخاص فقط هو الذي يمكنه إنتاج هذا التوقيع المحدد لتلك الرسالة المحددة، فإن السيرفر يعرف أنه يتحدث معك.
  5. تم منح الوصول: الرياضيات صحيحة. يقول السيرفر: "التوقيع صالح. أهلاً بك!" ويمنحك جلسة shell، كل ذلك دون أن تعبر كلمة مرور واحدة الشبكة.

أنواع المفاتيح: صورة عائلية (RSA, ECDSA, Ed25519)

ليست كل المفاتيح متساوية. تستخدم خوارزميات رياضية مختلفة لتوليد أزواج المفاتيح والتوقيعات. سترى عادةً ثلاثة أنواع رئيسية:

الخوارزمية الخلاصة حجم المفتاح (النموذجي) الحكم
RSA الحرس القديم. يعتمد على صعوبة تحليل الأعداد الأولية الضخمة إلى عواملها. 2048 أو 4096 بت لا يزال قويًا ومدعومًا على نطاق واسع، ولكنه بطيء ويتطلب مفاتيح كبيرة بالمعايير الحديثة.
ECDSA المعيار الحديث. يستخدم رياضيات المنحنى الإهليلجي ليكون أصغر وأسرع. 256 أو 384 بت خيار رائع. مفتاح ECDSA بحجم 256 بت يوفر أمانًا مشابهًا لمفتاح RSA بحجم 3072 بت.
Ed25519 الصرعة الجديدة. نوع محدد من مفاتيح المنحنى الإهليلجي وهو أسرع. 256 بت الخيار الأفضل إذا كان مدعومًا. سريع وآمن ومصمم لمقاومة هجمات معينة.

اليوم، يُنصح عمومًا باستخدام Ed25519 لأدائه وأمانه الفائقين.

ما هي البصمة (Fingerprint)؟

المفتاح العام هو سلسلة طويلة وقبيحة من الأحرف. ليس شيئًا يمكنك تذكره أو مقارنته بسهولة. البصمة هي ملخص قصير وفريد للمفتاح العام، يتم إنشاؤه عن طريق تمرير المفتاح عبر دالة هاش (مثل SHA256).

SHA256:88+EM65U024w0E7sF2w8w3n98w/L3t8d7f6e5g4h

تعمل كرقم تسلسلي يمكن قراءته من قبل الإنسان. عندما تتصل بسيرفر لأول مرة، سيعرض لك SSH بصمة المفتاح العام للسيرفر ويسألك عما إذا كنت تثق به. هذه هي فرصتك الوحيدة لمنع هجوم "الوسيط" (man-in-the-middle) عن طريق التحقق من تلك البصمة عبر قناة آمنة أخرى (مثل الاتصال بمسؤول النظام وقراءتها له).

قصص من الواقع

سكربت النشر الآلي

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

الدرس: مفاتيح SSH هي حجر الزاوية في الأتمتة الآمنة التي لا تعتمد على كلمات المرور.

المتعاقد الذي غادر

شركة ناشئة صغيرة استأجرت مستقلاً، ديفيد، لمشروع مدته ثلاثة أشهر. لمنحه حق الوصول إلى سيرفر الاختبار (staging server)، طلب قائد الفريق التقني، تشين، ببساطة مفتاح SSH العام لديفيد وأضافه إلى ملف authorized_keys على السيرفر. أصبح بإمكان ديفيد الآن تسجيل الدخول بأمان والقيام بعمله. في نهاية العقد، كانت عملية "إنهاء الخدمة" الكاملة للوصول إلى السيرفر تتكون من أمر واحد: فتح ملف authorized_keys وحذف السطر الذي يحتوي على مفتاح ديفيد. تم إلغاء الوصول على الفور وبشكل نظيف، دون الحاجة إلى تغيير كلمات مرور مشتركة أو القلق بشأنها.

الدرس: توفر مفاتيح SSH تحكمًا في الوصول دقيقًا، وقابلًا للمراجعة، وسهل الإلغاء على أساس كل مستخدم على حدة.

أول push على GitHub

انضم مطور جديد، سام، إلى فريق وقام بنسخ (clone) مستودع الكود الخاص بهم. بعد إجراء أول تغيير له، حاول أن يقوم بـ git push. قوبل بخطأ "Permission denied". الشركة، مثل الكثيرين، كانت قد عطلت المصادقة المستندة إلى كلمة المرور على GitHub لأسباب أمنية. وجهته الويكي الداخلية إلى إنشاء مفتاح SSH جديد، ثم الانتقال إلى إعدادات GitHub الخاصة به ولصق محتويات مفتاحه العام (id_ed25519.pub) في قسم "SSH and GPG keys". بعد ذلك، تمكن من رفع الكود الخاص به باستخدام عنوان URL الخاص بالمستودع عبر SSH (git@github.com:...). كان GitHub يستخدم نفس آلية التحدي والاستجابة للتحقق من أن سام هو بالفعل من يقوم برفع الكود.

الدرس: مفاتيح SSH هي المعيار للمصادقة على الخدمات التي تتجاوز مجرد الوصول عبر الـ shell، بما في ذلك معظم منصات استضافة الكود.

أخطاء ومزالق شائعة

  • مشاركة مفتاحك الخاص. لا تقم أبدًا، أبدًا، أبدًا بإرسال مفتاحك الخاص (id_ed25519 أو id_rsa) إلى أي شخص أو رفعه إلى أي مكان. إنه سرك. مشاركته تقوض تمامًا الغرض من هذا النموذج الأمني.
  • نسيان عبارة المرور (passphrase). مفتاحك الخاص هو مجرد ملف على القرص الصلب. إذا سُرق حاسوبك المحمول، يمكن للمهاجم نسخه ببساطة. عبارة مرور قوية تشفر هذا الملف، مما يجبر السارق على كسر كلمة مرور حاسوبك المحمول و عبارة مرور مفتاحك. إنها طبقة دفاع حاسمة.
  • لصق المفتاح الخاص في حقل المفتاح العام. من السهل الوقوع في هذا الخطأ. أنت تقوم بإعداد خدمة جديدة، تطلب مفتاحك العام، وبطريق الخطأ تنسخ وتلصق محتويات الملف الخاطئ. تحقق دائمًا من أن المفتاح الذي تشاركه ينتهي بـ .pub.
  • استخدام مفاتيح قديمة وضعيفة. إنشاء مفتاح RSA بحجم 1024 بت في هذا العصر فكرة سيئة. من المحتمل أن تكون عرضة للكسر من قبل المهاجمين الممولين جيدًا. التزم بالخيارات الافتراضية الحديثة: Ed25519 أو على الأقل مفتاح RSA بحجم 4096 بت.
  • كتابة "yes" بعيون مغمضة. في المرة الأولى التي تتصل فيها بمضيف جديد، يحذرك SSH من أنه لا يمكن إثبات صحة المضيف ويعرض لك بصمته. لا تقبلها بشكل أعمى. هذه هي اللحظة التي يمكن أن يحدث فيها هجوم الوسيط (Man-in-the-Middle). تحقق من البصمة عبر قناة أخرى إذا كنت في شبكة غير موثوق بها.

لماذا يجب أن تكون على رادارك

إذا كنت مطورًا، أو مسؤول نظام (sysadmin)، أو مهندس DevOps، أو أي شخص يحتاج في أي وقت إلى تسجيل الدخول إلى جهاز كمبيوتر بعيد، فإن مفاتيح SSH ليست مجرد "إضافة لطيفة"—إنها أساسية. إنها الطريقة الاحترافية والآمنة والفعالة لإدارة الوصول إلى الأجهزة.

يجب أن تفكر في مفاتيح SSH عندما:

  • تقوم بإعداد سيرفر جديد (سحابي أو محلي).
  • تكتب أي سكربت يحتاج إلى الاتصال بجهاز آخر (scp، sftp، rsync، git).
  • تقوم بإعداد وصول لعضو فريق جديد.
  • تتصل بـ GitHub أو GitLab أو Bitbucket.
  • تريد التوقف عن كتابة كلمات المرور.

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

تعمق أكثر

انتهينا من النظرية. حان وقت التطبيق — 100% في متصفحك.

جرّب الأداة: مولّد مفاتيح SSH