🔐 الدليل الكامل لربط SSH بالجهاز الافتراضي (VM)

شرح خطوة بخطوة — من الصفر حتى الاتصال الآمن

١. ما هو SSH؟

SSH (Secure Shell) هو بروتوكول شبكي مشفّر يسمح لك بالتحكم عن بُعد بجهاز آخر عبر سطر الأوامر. يستخدم SSH_PORT الافتراضي 22.

╔══════════════════════════════════╗ ║ 💻 جهازك المحلي ║ ║ (Client) ║ ║ ssh user@IP ║ ╚══════════════╦═══════════════════╝ ║ 🔐 SSH (مشفّر) ║ PORT 22 ╔══════════════╩═══════════════════╗ ║ ☁️ السيرفر / VM ║ ║ (Server) ║ ║ sshd service ║ ╚══════════════════════════════════╝

٢. المتطلبات الأساسية

٣. تحضير الجهاز الافتراضي (VM)

1 تحديث الحزم وتثبيت OpenSSH Server

sudo apt update && sudo apt upgrade -y
sudo apt install openssh-server -y

2 التأكد من أن الخدمة شغالة

sudo systemctl status sshd
sudo systemctl enable sshd   # تشغيل تلقائي مع البوت

3 فتح المنفذ 22 في جدار الحماية

sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status

4 معرفة IP الجهاز

ip addr show
# أو
hostname -I
📌 اكتب الـ IP اللي يظهر (مثلاً 192.168.1.100) — ستحتاجه للاتصال.

٤. الاتصال من الجهاز المحلي

🔹 الطريقة البسيطة (باسوورد)

ssh username@192.168.1.100

إذا كان البورت مختلفاً:

ssh -p 2222 username@192.168.1.100
📌 في Windows: استخدم PowerShell أو CMD أو Windows Terminal — الـ SSH client موجود افتراضياً من Windows 10 build 1809 فما فوق.

🔹 المصادقة بالمفتاح (SSH Key — الأكثر أماناً)

الخطوة ١: توليد مفتاح على جهازك المحلي:

ssh-keygen -t ed25519 -C "my-vm-key"
# أو
ssh-keygen -t rsa -b 4096 -C "my-vm-key"

الخطوة ٢: نسخ المفتاح العام إلى الـ VM:

ssh-copy-id username@192.168.1.100
# أو يدوياً:
cat ~/.ssh/id_ed25519.pub | ssh username@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"

الخطوة ٣: اتصل الآن — لن يطلب الباسوورد:

ssh username@192.168.1.100
✅ تم! الآن الاتصال يتم عبر المفتاح الخاص بدون كلمة سر.

٥. رفع مستوى الأمان (تأمين الـ SSH)

📁 ملف الإعدادات: /etc/ssh/sshd_config

افتح الملف بالتعديل:

sudo nano /etc/ssh/sshd_config

التعديلات الموصى بها:

الخيارالقيمةالشرح
Port2222تغيير البورت الافتراضي (يقلل هجمات البوتات)
PermitRootLoginnoمنع تسجيل الدخول كمستخدم root
PasswordAuthenticationnoإيقاف الباسوورد — استخدام المفاتيح فقط
PubkeyAuthenticationyesتفعيل المصادقة بالمفتاح العام
AllowUsersusernameتحديد المستخدمين المسموح لهم فقط
MaxAuthTries3عدد محاولات المصادقة القصوى

بعد التعديل، أعد تشغيل الخدمة:

sudo systemctl restart sshd
⚠️ تحذير: لا تغلق الباسوورد إلا بعد التأكد من أن المفتاح يعمل. احتفظ بجلسة SSH مفتوحة أثناء الاختبار.

٦. تبسيط الاتصال بـ ~/.ssh/config

إنشاء ملف إعدادات على جهازك المحلي لتجنب كتابة IP والمستخدم كل مرة:

Host my-vm
    HostName 192.168.1.100
    Port 22
    User username
    IdentityFile ~/.ssh/id_ed25519

بعد الحفظ، اتصل ببساطة:

ssh my-vm

٧. مشاكل وحلول شائعة

Connection refused

Permission denied (publickey)

Connection timed out

٨. إعدادات خاصة للـ VM المحلي (VirtualBox / VMware)

🔹 خيار 1: NAT + Port Forwarding

في إعدادات الشبكة للـ VM:

اتصل بـ:

ssh -p 2222 user@127.0.0.1

🔹 خيار 2: Bridged (جسر)

🔹 خيار 3: Host-Only

٩. أدوات مفيدة لتسهيل العمل

١٠. 🧠 ملخص سريع (Cheat Sheet)

# ---- على الـ VM ----
sudo apt install openssh-server -y
sudo systemctl enable --now sshd
sudo ufw allow 22/tcp
ip addr                       # اعرف الـ IP

# ---- على جهازك المحلي ----
ssh-keygen -t ed25519         # توليد مفتاح
ssh-copy-id user@IP           # نسخ المفتاح
ssh user@IP                   # اتصل

# ---- تأمين SSH ----
sudo nano /etc/ssh/sshd_config
  # PermitRootLogin no
  # PasswordAuthentication no
sudo systemctl restart sshd

# ---- اتصال سريع ----
# بعد إعداد ~/.ssh/config:
ssh my-vm