كل ما تحتاجه لإتقان مفاتيح SSH
تعلّم إنشاء مفاتيح SSH، تشغيل ssh-agent، نسخ المفتاح العام، ضبط ~/.ssh/config، الاستخدام مع GitHub، إنشاء أنفاق SSH، وأفضل الممارسات الأمنية — باللغتين العربية والإنجليزية.
بداية سريعة
- 1 إنشاء مفتاح جديد باستخدام Ed25519
- 2 تشغيل ssh-agent وإضافة المفتاح
- 3 نسخ المفتاح العام إلى الخادم
- 4 ضبط ~/.ssh/config لتبسيط الاتصال
- 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
- انسخ المفتاح العام
$ pbcopy < ~/.ssh/id_ed25519.pub # macOS $ xclip -sel clip < ~/.ssh/id_ed25519.pub # Linux $ clip < ~/.ssh/id_ed25519.pub # Windows (PowerShell)
- اذهب إلى GitHub → Settings → SSH and GPG keys → New SSH key، الصق المفتاح.
- اختبر الاتصال:
$ 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