انتقل إلى المحتوى الرئيسي

أزواج المفاتيح والمصادقة

كيف تصل إلى مثيل EC2؟​

للاتصال بمثيل EC2، تحتاج إلى آلية مصادقة. تستخدم AWS أزواج المفاتيح SSH لنظام Linux وكلمات المرور لنظام Windows.

┌─────────────────────────────────────────────────────────────┐
│ المصادقة EC2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ LINUX WINDOWS │
│ ───── ─────── │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ مفتاح SSH │ │ كلمة مرور │ │
│ │ (RSA/ED) │ │ │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ SSH │ │ RDP │ │
│ │ Port 22 │ │ Port 3389│ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ مثيل EC2 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

أزواج مفاتيح SSH (Linux)​

ما هي زوج المفاتيح؟​

يتكون زوج المفاتيح من جزئين:

┌─────────────────────────────────────────────────────────────┐
│ زوج مفاتيح SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ المفتاح الخاص │ │
│ │ (ma-cle.pem) │ │
│ │ │ │
│ │ • ملف تحتفظ به على جهازك │ │
│ │ • لا تشاركه أو تنشره أبدًا! │ │
│ │ • يستخدم لإثبات هويتك │ │
│ │ • إذا فقدته = لا يوجد وصول إلى المثيل │ │
│ │ │ │
│ │ صيغة: ملف .pem (Linux/Mac) أو .ppk (PuTTY) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ المفتاح العام │ │
│ │ (مثبت على المثيل) │ │
│ │ │ │
│ │ • مثبت تلقائيًا بواسطة AWS عند الإطلاق │ │
│ │ • مخزن في ~/.ssh/authorized_keys │ │
│ │ • يمكن مشاركته بدون مخاطر │ │
│ │ • يسمح بالتحقق من المفتاح الخاص │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 🔐 المبدأ: ما يتم تشفيره بالمفتاح العام لا يمكن فك تشفيره │
│ إلا بالمفتاح الخاص المقابل │
│ │
└─────────────────────────────────────────────────────────────┘

تشبيه: القفل والمفتاح​

┌─────────────────────────────────────────────────────────────┐
│ تشبيه: القفل والمفتاح │
├─────────────────────────────────────────────────────────────┤
│ │
│ المفتاح العام = قفل مفتوح │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔓 يمكنك إعطاء الأقفال المفتوحة للجميع. │ │
│ │ يمكنهم إغلاق الصناديق بها، لكن لا يمكنهم فتحها. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ المفتاح الخاص = مفتاح القفل الفريد │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔑 فقط أنت لديك المفتاح الذي يفتح هذه الأقفال. │ │
│ │ إذا فقدته، لا يمكن لأحد فتح الصناديق. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ التطبيق: │
│ • مثيل EC2 = صندوق مغلق بقفلك │
│ • اتصال SSH = استخدام مفتاحك للدخول │
│ │
└─────────────────────────────────────────────────────────────┘

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

عبر وحدة تحكم AWS​

1. EC2 → Network & Security → Key Pairs
2. Create key pair
3. الاسم: "ma-cle-ec2"
4. النوع: RSA (أو ED25519)
5. الصيغة: .pem (Linux/Mac) أو .ppk (PuTTY/Windows)
6. Create key pair
7. ⬇️ يتم تنزيل ملف .pem تلقائيًا
8. ⚠️ احتفظ به بعناية! AWS لا تخزنه!

عبر AWS CLI​

# إنشاء زوج مفاتيح
aws ec2 create-key-pair \
--key-name ma-cle-ec2 \
--query 'KeyMaterial' \
--output text > ma-cle-ec2.pem

# تعيين الأذونات (Linux/Mac)
chmod 400 ma-cle-ec2.pem

الاتصال عبر SSH​

Linux / macOS​

# الصيغة الأساسية
ssh -i /chemin/vers/cle.pem utilisateur@ip-publique

# مثال عملي
ssh -i ~/Downloads/ma-cle-ec2.pem ec2-user@52.1.2.3

# المستخدمون الافتراضيون حسب AMI:
# Amazon Linux, RHEL : ec2-user
# Ubuntu : ubuntu
# Debian : admin أو debian
# CentOS : centos أو ec2-user
# SUSE : ec2-user أو root

Windows مع PuTTY​

1. تحميل PuTTY و PuTTYgen
2. تحويل .pem إلى .ppk:
• فتح PuTTYgen
• Load → اختيار .pem
• Save private key → ma-cle.ppk

3. الاتصال باستخدام PuTTY:
• Host Name : ec2-user@52.1.2.3
• Connection → SSH → Auth → Browse → ma-cle.ppk
• Open

Windows مع OpenSSH (Windows 10+)​

# Windows 10/11 يحتوي على SSH مدمج
ssh -i C:\Users\moi\ma-cle-ec2.pem ec2-user@52.1.2.3

الأخطاء الشائعة​

خطأ: "Permission denied"​

┌─────────────────────────────────────────────────────────────┐
│ خطأ: PERMISSION DENIED │
├─────────────────────────────────────────────────────────────┤
│ │
│ الرسالة: │
│ Permission denied (publickey,gssapi-keyex,gssapi-with-mic)│
│ │
│ الأسباب المحتملة: │
│ │
│ 1. مفتاح خاطئ │
│ → تحقق من أن هذه هي زوج المفاتيح الصحيح │
│ │
│ 2. مستخدم خاطئ │
│ → ec2-user لـ Amazon Linux، ubuntu لـ Ubuntu │
│ │
│ 3. مجموعة الأمان │
│ → منفذ 22 مغلق أو عنوان IP خاطئ │
│ │
│ 4. المثيل لم يكن جاهزًا بعد │
│ → انتظر حتى تمر الفحوصات الحالة │
│ │
└─────────────────────────────────────────────────────────────┘

خطأ: "Permissions too open"​

┌─────────────────────────────────────────────────────────────┐
│ خطأ: PERMISSIONS TOO OPEN │
├─────────────────────────────────────────────────────────────┤
│ │
│ الرسالة: │
│ WARNING: UNPROTECTED PRIVATE KEY FILE! │
│ Permissions 0644 for 'ma-cle.pem' are too open. │
│ │
│ الحل (Linux/Mac): │
│ chmod 400 ma-cle.pem │
│ │
│ التفسير: │
│ • 400 = قراءة فقط للمالك │
│ • SSH يرفض المفاتيح القابلة للقراءة من قبل الآخرين │
│ • حماية ضد سرقة المفتاح │
│ │
└─────────────────────────────────────────────────────────────┘

خطأ: "Connection timeout"​

┌─────────────────────────────────────────────────────────────┐
│ خطأ: CONNECTION TIMEOUT │
├─────────────────────────────────────────────────────────────┤
│ │
│ الأسباب المحتملة: │
│ │
│ 1. مجموعة الأمان │
│ → منفذ 22 غير مفتوح │
│ → عنوان IP الخاص بك غير مسموح به │
│ │
│ 2. لا يوجد عنوان IP عام │
│ → المثيل في شبكة فرعية خاصة │
│ → Elastic IP غير متصل │
│ │
│ 3. NACL يحظر │
│ → تحقق من قواعد الشبكة للشبكة الفرعية │
│ │
│ 4. المثيل غير قيد التشغيل │
│ → تحقق من حالة المثيل │
│ │
└─────────────────────────────────────────────────────────────┘

المصادقة لنظام Windows (RDP)​

استعادة كلمة المرور​

┌─────────────────────────────────────────────────────────────┐
│ اتصال Windows - RDP │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. انتظر 4+ دقائق بعد الإطلاق │
│ (يجب على Windows توليد كلمة المرور) │
│ │
│ 2. EC2 → Instances → اختر المثيل │
│ │
│ 3. Actions → Security → Get Windows password │
│ │
│ 4. ارفع ملف .pem الخاص بك (المفتاح الخاص) │
│ │
│ 5. انقر على "Decrypt Password" │
│ │
│ 6. انسخ كلمة المرور المعروضة │
│ │
│ 7. اتصل باستخدام Remote Desktop: │
│ • العنوان: IP العام للمثيل │
│ • المستخدم: Administrator │
│ • كلمة المرور: التي تم فك تشفيرها │
│ │
└─────────────────────────────────────────────────────────────┘

إدارة المفاتيح​

أفضل الممارسات​

┌─────────────────────────────────────────────────────────────┐
│ أفضل الممارسات - مفاتيح SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✅ يجب القيام به: │
│ │
│ • استخدام مفتاح مختلف لكل بيئة │
│ - cle-dev.pem │
│ - cle-staging.pem │
│ - cle-prod.pem │
│ │
│ • تخزين المفاتيح في مكان آمن │
│ - مدير كلمات المرور (1Password، إلخ) │
│ - خزنة الشركة (Vault) │
│ │
│ • تعيين الأذونات الصحيحة │
│ - chmod 400 على ملفات .pem │
│ │
│ • استخدام مفاتيح ED25519 (أكثر أمانًا من RSA) │
│ │
│ ❌ يجب تجنبه: │
│ │
│ • مشاركة المفاتيح عبر البريد الإلكتروني أو Slack │
│ • إدخال المفاتيح في Git │
│ • استخدام نفس المفتاح لكل شيء │
│ • ترك المفاتيح غير المستخدمة │
│ │
└─────────────────────────────────────────────────────────────┘

بديل: EC2 Instance Connect​

تقدم AWS بديلاً لمفاتيح SSH: EC2 Instance Connect

┌─────────────────────────────────────────────────────────────┐
│ EC2 INSTANCE CONNECT │
├─────────────────────────────────────────────────────────────┤
│ │
│ اتصال SSH عبر وحدة تحكم AWS بدون إدارة مفاتيح │
│ │
│ كيفية الاستخدام: │
│ 1. EC2 → Instances → اختر المثيل │
│ 2. Connect → EC2 Instance Connect │
│ 3. Connect │
│ 4. يفتح طرفية في المتصفح! │
│ │
│ المزايا: │
│ • لا توجد مفاتيح لإدارتها │
│ • الوصول من أي مكان │
│ • التتبع عبر CloudTrail │
│ │
│ العيوب: │
│ • يتطلب الوصول إلى الشبكة للمثيل │
│ • لا يوجد نقل للملفات (scp) │
│ • ليس مثاليًا للأتمتة │
│ │
└─────────────────────────────────────────────────────────────┘

بديل: AWS Systems Manager Session Manager​

┌─────────────────────────────────────────────────────────────┐
│ SESSION MANAGER │
├─────────────────────────────────────────────────────────────┤
│ │
│ اتصال SSH بدون فتح منفذ 22! │
│ │
│ كيف يعمل: │
│ • وكيل SSM مثبت على المثيل │
│ • اتصال عبر وحدة تحكم AWS أو CLI │
│ • يتم عبر API AWS، وليس عبر SSH المباشر │
│ │
│ المزايا: │
│ • لا حاجة لفتح منفذ 22 │
│ • لا توجد مفاتيح SSH لإدارتها │
│ • سجلات لجميع الجلسات │
│ • الوصول إلى المثيلات الخاصة │
│ │
│ aws ssm start-session --target i-0123456789abcdef0 │
│ │
└─────────────────────────────────────────────────────────────┘

ملخص​

المفهومالوصف
المفتاح الخاصملف .pem يجب الاحتفاظ به سريًا
المفتاح العاممثبت على المثيل
SSHبروتوكول اتصال Linux (المنفذ 22)
RDPبروتوكول اتصال Windows (المنفذ 3389)
chmod 400الأذونات الصحيحة للمفتاح الخاص
Instance Connectبديل بدون إدارة المفاتيح

اختبار التحقق​

  1. ما الفرق بين المفتاح العام والمفتاح الخاص؟
  2. أي مستخدم تستخدمه لـ SSH على Amazon Linux؟
  3. ما الأمر الذي يحدد الأذونات الصحيحة لملف .pem؟
  4. لماذا يرفض SSH مفتاحًا بأذونات "مفتوحة جدًا"؟
  5. كيف تستعيد كلمة المرور لمثيل Windows؟
  6. ما البديل الذي يسمح بالاتصال بدون إدارة المفاتيح؟

القسم التالي: Security Groups