أزواج المفاتيح والمصادقة
كيف تصل إلى مثيل 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 | بديل بدون إدارة المفاتيح |
اختبار التحقق
- ما الفرق بين المفتاح العام والمفتاح الخاص؟
- أي مستخدم تستخدمه لـ SSH على Amazon Linux؟
- ما الأمر الذي يحدد الأذونات الصحيحة لملف .pem؟
- لماذا يرفض SSH مفتاحًا بأذونات "مفتوحة جدًا"؟
- كيف تستعيد كلمة المرور لمثيل Windows؟
- ما البديل الذي يسمح بالاتصال بدون إدارة المفاتيح؟
القسم التالي: Security Groups