SSH والمصادقة بالمفاتيح
💡 دليل التعلم: هل تُدخل كلمة المرور في كل مرة تنفذ فيها
git push؟ هل يظهر دائماً "Permission denied" عند الاتصال عبر SSH؟ يشرح هذا الفصل في 5 دقائق مبدأ المصادقة بمفاتيح SSH، وكيفية إعداد تسجيل دخول بدون كلمة مرور إلى GitHub والخوادم بأمر واحد.
0. لابد أنك مررت بهذه المواقف
git pushيُظهر نافذة إدخال كلمة المرور مراراً، مزعج جداً- فشل اتصال SSH بالخادم، لا تعرف ما هي
id_rsaوid_ed25519 - سمعت عن "المفتاح العام" و"المفتاح الخاص"، لكنك لا تعرف أيهما يُعطى للآخرين وأيهما تحتفظ به
التناقض الجوهري: كلمات المرور غير آمنة ومزعجة. مفاتيح SSH هي الحل الذي يحل المشكلتين معاً: الأمان والراحة.
1. كلمة المرور مقابل المفتاح: لماذا المفاتيح أفضل؟
👇 جرّب: قارن الفرق بين تسجيل الدخول بكلمة المرور وتسجيل الدخول بالمفتاح
💡 ملخص في جملة واحدة
تسجيل الدخول بكلمة مرور = إرسال كلمة المرور في كل مرة للتحقق منها (قد يُعترضها أحد)؛ تسجيل الدخول بالمفتاح = إثبات أن "لديّ المفتاح" دون الحاجة لإظهاره (المفتاح الخاص لا يُنقل أبداً).
2. التشفير غير المتماثل: المفتاح العام والمفتاح الخاص
مفاتيح SSH مبنية على التشفير غير المتماثل، حيث تُولّد مفتاحين في وقت واحد:
| المفتاح الخاص (Private Key) | المفتاح العام (Public Key) | |
|---|---|---|
| مكان الحفظ | حاسوبك ~/.ssh/id_ed25519 | الخادم/GitHub |
| هل يمكن مشاركته؟ | ❌ أبداً | ✅ بحرية |
| الوظيفة | التوقيع (إثبات الهوية) | التحقق (التحقق من الهوية) |
| التشبيه | المفتاح | القفل |
أنواع المفاتيح الشائعة
| النوع | الأمر | التقييم | ملاحظات |
|---|---|---|---|
| Ed25519 | ssh-keygen -t ed25519 | ⭐⭐⭐ | الأحدث والأسرع والأكثر أماناً |
| RSA | ssh-keygen -t rsa -b 4096 | ⭐⭐ | توافقية جيدة لكن أبطأ |
| ECDSA | ssh-keygen -t ecdsa | ⭐ | عموماً غير موصى بها |
3. تطبيق عملي: إنشاء وإعداد مفاتيح SSH
3.1 إنشاء زوج مفاتيح
ssh-keygen -t ed25519 -C "your@email.com"بعد التنفيذ سيُسألك عن:
- مسار الملف: اضغط Enter لاستخدام المسار الافتراضي
~/.ssh/id_ed25519 - عبارة المرور: يمكنك إضافة حماية إضافية (أو تركها فارغة)
3.2 إضافة المفتاح العام إلى GitHub
# 1. نسخ محتوى المفتاح العام
cat ~/.ssh/id_ed25519.pub | pbcopy # macOS
cat ~/.ssh/id_ed25519.pub | xclip # Linux
# 2. افتح GitHub → Settings → SSH and GPG keys → New SSH key
# 3. الصق المفتاح العام واحفظ
# 4. اختبر الاتصال
ssh -T git@github.com
# عند النجاح سترى: Hi username! You've been authenticated...3.3 إضافة المفتاح العام إلى الخادم
# الطريقة 1: ssh-copy-id (موصى بها)
ssh-copy-id user@your-server
# الطريقة 2: النسخ اليدوي
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"4. SSH Config: وداعاً للأوامر الطويلة
إعداد أسماء مستعارة في ~/.ssh/config، إعداد مرة واحدة والاستفادة مدى الحياة:
Host dev
HostName 192.168.1.100
User deploy
IdentityFile ~/.ssh/id_ed25519
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519النتيجة بعد الإعداد:
| قبل | بعد |
|---|---|
ssh -i ~/.ssh/id_ed25519 deploy@192.168.1.100 | ssh dev |
| يجب تذكر IP واسم المستخدم في كل مرة | يكفي تذكر الاسم المستعار |
5. استكشاف المشاكل الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
Permission denied (publickey) | المفتاح العام لم يُضف للخادم | ssh-copy-id user@server |
WARNING: UNPROTECTED PRIVATE KEY FILE | صلاحيات ملف المفتاح الخاص واسعة جداً | chmod 600 ~/.ssh/id_ed25519 |
Could not resolve hostname | خطأ في تهيئة SSH Config | تحقق من تنسيق ~/.ssh/config |
| GitHub لا يزال يطلب كلمة المرور | تستخدم HTTPS بدلاً من SSH | استخدم git@github.com:user/repo.git |
6. الخلاصة
📚 النقاط الرئيسية
- المفتاح > كلمة المرور: المفتاح الخاص لا يُنقل أبداً، وهو أكثر أماناً بكثير من كلمة المرور
- يُنصح بـ Ed25519: خوارزمية المفاتيح الأحدث والأسرع والأكثر أماناً
- المفتاح العام يُشارك بحرية، الخاص لا يُفقد أبداً: تذكر هذه القاعدة الذهبية
- SSH Config: إعداد اسم مستعار مرة واحدة، ثم
ssh aliasللاتصال بأمر واحد - GitHub/GitLab: بعد إضافة المفتاح العام،
git push/pullلن يحتاج كلمة مرور بعد الآن
الخطوة التالية:
- المنافذ و localhost - فهم أساسيات اتصال الشبكة
- متغيرات البيئة و PATH - فهم تهيئة النظام