Skip to content

SSH والمصادقة بالمفاتيح

💡 دليل التعلم: هل تُدخل كلمة المرور في كل مرة تنفذ فيها git push؟ هل يظهر دائماً "Permission denied" عند الاتصال عبر SSH؟ يشرح هذا الفصل في 5 دقائق مبدأ المصادقة بمفاتيح SSH، وكيفية إعداد تسجيل دخول بدون كلمة مرور إلى GitHub والخوادم بأمر واحد.


0. لابد أنك مررت بهذه المواقف

  • git push يُظهر نافذة إدخال كلمة المرور مراراً، مزعج جداً
  • فشل اتصال SSH بالخادم، لا تعرف ما هي id_rsa و id_ed25519
  • سمعت عن "المفتاح العام" و"المفتاح الخاص"، لكنك لا تعرف أيهما يُعطى للآخرين وأيهما تحتفظ به

التناقض الجوهري: كلمات المرور غير آمنة ومزعجة. مفاتيح SSH هي الحل الذي يحل المشكلتين معاً: الأمان والراحة.


1. كلمة المرور مقابل المفتاح: لماذا المفاتيح أفضل؟

👇 جرّب: قارن الفرق بين تسجيل الدخول بكلمة المرور وتسجيل الدخول بالمفتاح

SSH Key Authentication: Your Digital IDSymmetric vs asymmetric encryption · key pair generation · authentication flow
🔑
Password login
1Enter username and password
2Password is sent to the server over the network
3Server checks whether the password is correct
4You must enter the password every time
⚠️The password travels over the network and may be intercepted
🔐
Key login
1Put the public key on the server in advance
2Send identity when connecting, without sending the private key
3Server asks a mathematical challenge with the public key
4Your private key answers locally and only sends the answer
The private key never leaves your computer
Core idea:SSH key login is safer than passwords because the private key never travels over the network and cannot be stolen by a man-in-the-middle.

💡 ملخص في جملة واحدة

تسجيل الدخول بكلمة مرور = إرسال كلمة المرور في كل مرة للتحقق منها (قد يُعترضها أحد)؛ تسجيل الدخول بالمفتاح = إثبات أن "لديّ المفتاح" دون الحاجة لإظهاره (المفتاح الخاص لا يُنقل أبداً).


2. التشفير غير المتماثل: المفتاح العام والمفتاح الخاص

مفاتيح SSH مبنية على التشفير غير المتماثل، حيث تُولّد مفتاحين في وقت واحد:

المفتاح الخاص (Private Key)المفتاح العام (Public Key)
مكان الحفظحاسوبك ~/.ssh/id_ed25519الخادم/GitHub
هل يمكن مشاركته؟❌ أبداً✅ بحرية
الوظيفةالتوقيع (إثبات الهوية)التحقق (التحقق من الهوية)
التشبيهالمفتاحالقفل

أنواع المفاتيح الشائعة

النوعالأمرالتقييمملاحظات
Ed25519ssh-keygen -t ed25519⭐⭐⭐الأحدث والأسرع والأكثر أماناً
RSAssh-keygen -t rsa -b 4096⭐⭐توافقية جيدة لكن أبطأ
ECDSAssh-keygen -t ecdsaعموماً غير موصى بها

3. تطبيق عملي: إنشاء وإعداد مفاتيح SSH

3.1 إنشاء زوج مفاتيح

bash
ssh-keygen -t ed25519 -C "your@email.com"

بعد التنفيذ سيُسألك عن:

  • مسار الملف: اضغط Enter لاستخدام المسار الافتراضي ~/.ssh/id_ed25519
  • عبارة المرور: يمكنك إضافة حماية إضافية (أو تركها فارغة)

3.2 إضافة المفتاح العام إلى GitHub

bash
# 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 إضافة المفتاح العام إلى الخادم

bash
# الطريقة 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.100ssh 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. الخلاصة

📚 النقاط الرئيسية

  1. المفتاح > كلمة المرور: المفتاح الخاص لا يُنقل أبداً، وهو أكثر أماناً بكثير من كلمة المرور
  2. يُنصح بـ Ed25519: خوارزمية المفاتيح الأحدث والأسرع والأكثر أماناً
  3. المفتاح العام يُشارك بحرية، الخاص لا يُفقد أبداً: تذكر هذه القاعدة الذهبية
  4. SSH Config: إعداد اسم مستعار مرة واحدة، ثم ssh alias للاتصال بأمر واحد
  5. GitHub/GitLab: بعد إضافة المفتاح العام، git push/pull لن يحتاج كلمة مرور بعد الآن

الخطوة التالية: