كل ما تحتاجه لإتقان مفاتيح SSH

تعلّم إنشاء مفاتيح SSH، تشغيل ssh-agent، نسخ المفتاح العام، ضبط ~/.ssh/config، الاستخدام مع GitHub، إنشاء أنفاق SSH، وأفضل الممارسات الأمنية — باللغتين العربية والإنجليزية.

بداية سريعة

  1. 1 إنشاء مفتاح جديد باستخدام Ed25519
  2. 2 تشغيل ssh-agent وإضافة المفتاح
  3. 3 نسخ المفتاح العام إلى الخادم
  4. 4 ضبط ~/.ssh/config لتبسيط الاتصال
  5. 5 اختبار GitHub بالأوامر
$ ssh-keygen -t ed25519 -C "you@example.com"
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server
$ ssh -T git@github.com

ملاحظة: على Windows، استخدم Git Bash أو OpenSSH في PowerShell. قد تحتاج لإضافة المفتاح يدويًا إلى authorized_keys إن لم يتوفر ssh-copy-id.

إنشاء مفاتيح SSH باستخدام ssh-keygen

مفاتيح SSH توفر مصادقة آمنة بدون كلمات مرور. يوصى باستخدام Ed25519 لحداثته وأمنه وأدائه.

  • النوع الموصى به: Ed25519
  • استخدم RSA فقط عند الحاجة إلى توافق قديم (2048+ بت)
$ ssh-keygen -t ed25519 -C "you@example.com"
# Files:
#   Private key: ~/.ssh/id_ed25519
#   Public key:  ~/.ssh/id_ed25519.pub
# Tips: اختر عبارة مرور قوية واحفظها في مدير كلمات مرور.
موقع واسم ملف مخصص
$ ssh-keygen -t ed25519 -C "work-laptop" -f ~/.ssh/id_ed25519_work

أين تُحفظ الملفات؟

  • ~/.ssh/id_ed25519المفتاح الخاص (لا تشاركه أبدًا)
  • ~/.ssh/id_ed25519.pubالمفتاح العام (انسخه للخوادم/خدمات Git)
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ed25519
$ chmod 644 ~/.ssh/id_ed25519.pub

Windows: استخدم PowerShell مع OpenSSH أو Git Bash. المسارات عادة في C:\Users\NAME\.ssh.

إعداد ssh-agent وإضافة المفتاح

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519
# macOS: UseKeychain و AddKeysToAgent في config لتخزين آمن.
تشغيل تلقائي وإضافة تلقائية
# في macOS أضف في ~/.ssh/config
Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
# في Linux (bash/zsh) أضف إلى ~/.bashrc أو ~/.zshrc
eval "$(ssh-agent -s)" >/dev/null
ssh-add -l >/dev/null 2>&1 || ssh-add ~/.ssh/id_ed25519 

حل المشكلات

  • ssh-add -lلعرض المفاتيح المُحمّلة
  • ssh-add -Dإزالة كل المفاتيح من الوكيل
  • SSH_AUTH_SOCKتحقق من المقبس في الجلسات/الحاويات

نسخ المفتاح العام إلى الخادم

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

إن لم يتوفر ssh-copy-id (مثل Windows)، انسخ المحتوى يدويًا إلى ~/.ssh/authorized_keys على الخادم.

$ cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

اختبار الاتصال

$ ssh -v user@server

تأكد من إغلاق تسجيل الدخول بكلمة مرور لاحقًا بعد نجاح المفاتيح.

تكوين ~/.ssh/config

ملف الإعدادات يبسّط الأوامر ويضبط سلوك SSH لكل مضيف.

Host myvps
  HostName 203.0.113.10
  User ubuntu
  Port 22
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes
  AddKeysToAgent yes
  # macOS فقط
  UseKeychain yes

Host gh
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

# مثال ProxyJump
Host internal
  HostName 10.0.0.5
  User admin
  ProxyJump myvps
  IdentityFile ~/.ssh/id_ed25519

الاستخدام بعد الإعداد

$ ssh myvps
$ scp file.txt myvps:/tmp/
$ ssh internal  # يمر عبر myvps تلقائياً

استخدام SSH مع GitHub

  1. انسخ المفتاح العام
$ pbcopy < ~/.ssh/id_ed25519.pub   # macOS
$ xclip -sel clip < ~/.ssh/id_ed25519.pub   # Linux
$ clip < ~/.ssh/id_ed25519.pub     # Windows (PowerShell)
  1. اذهب إلى GitHub → Settings → SSH and GPG keys → New SSH key، الصق المفتاح.
  2. اختبر الاتصال:
$ ssh -T git@github.com
# المتوقع: Hi USERNAME! You've successfully authenticated...

العمل مع المستودعات عبر SSH

$ git clone git@github.com:owner/repo.git
$ git remote -v
$ git push

توقيع الكومِت يتم عادة بـ GPG/SSH Signing (اختياري) ولا يؤثر على نقل SSH.

أنفاق SSH (SSH Tunneling)

توجيه محلي -L (من جهازك إلى خادم هدف)

$ ssh -L 8080:localhost:3000 user@server
# افتح http://localhost:8080 للوصول إلى خدمة الخادم 3000

توجيه بعيد -R (من خادمك لعميلك)

$ ssh -R 2222:localhost:22 user@server
# أصبح منفذ 2222 على server يُحيل لاتصال SSH المحلي

وكيل SOCKS ديناميكي -D

$ ssh -D 1080 user@server
# عيّن المتصفح لاستخدام SOCKS5 على 127.0.0.1:1080

نصائح أمان للأنفاق

  • استخدم -N و -f عندما لا تحتاج لصدفة تفاعلية
$ ssh -N -f -L 8080:localhost:3000 user@server
  • حدد المضيفات المسموح بها في ~/.ssh/config، وتجنّب ForwardAgent ما لم يكن ضروريًا.

أفضل الممارسات الأمنية

  • استخدم مفاتيح Ed25519 مع عبارة مرور قوية
  • اضبط أذونات .ssh بشكل صحيح (700, 600, 644)
  • دوّر مفاتيحك دوريًا، واستبدلها عند الاشتباه
  • تجنّب Agent Forwarding إلا للضرورة القصوى
  • على الخادم: عطّل تسجيل الدخول بكلمة المرور (PasswordAuthentication no) وعطّل الجذر (PermitRootLogin no)
  • فعّل 2FA على GitHub والخدمات السحابية
  • تحقق من known_hosts عند أول اتصال لتجنّب MITM
  • احفظ نسخة احتياطية مشفرة من مفاتيحك في مكان آمن

اختبارات تفاعلية للأوامر

أجب بتحديد الخيار الصحيح أو بكتابة الأمر المطلوب. لن تُنفّذ الأوامر فعليًا — هذا محاكي للتعلم.

محاكي أوامر مبسّط

$

جرّب: ssh-keygen -t ed25519 -C "you@example.com" | ssh -T git@github.com | ssh -L 8080:localhost:3000 user@server