كلمة المرور يمكن أن تُخمَّن أو تُسرق أو تُنسى. أما مفتاح SSH فهو ملف على جهازك يثبت هويتك للسيرفر دون أن تكتب شيئًا، ويستحيل عمليًا تخمينه. في هذا الدليل ننشئ مفتاحًا حقيقيًا على ويندوز وعلى لينكس، ونضعه على سيرفر في مرام هوست، وندخل بلا كلمة مرور — مع حل خطأ الصلاحيات الشهير في ويندوز، وطريقة الهاتف.

⚡ الإجابة المختصرة

على جهازك نفّذ ssh-keygen -t ed25519 واضغط Enter للإعدادات الافتراضية. ثم انسخ المفتاح العام إلى السيرفر: في الماك ولينكس ssh-copy-id -p 2026 maram@IP، وفي ويندوز بأمر type … | ssh … الموضح أدناه. بعدها ssh -p 2026 maram@IP يدخل مباشرة.

كيف يعمل المفتاح؟

المفتاح زوج من ملفين: مفتاح خاص (id_ed25519) يبقى على جهازك كأنه مفتاح بيتك ولا تعطيه لأحد، ومفتاح عام (id_ed25519.pub) كأنه القفل، تضعه على السيرفر في الملف ~/.ssh/authorized_keys. عند الاتصال يتأكد السيرفر أن مفتاحك الخاص يطابق القفل، دون أن يُرسَل المفتاح الخاص نفسه أبدًا.

الخطوة 1: أنشئ المفتاح

الأمر نفسه في ويندوز (PowerShell) والماك ولينكس (Terminal):

ssh-keygen -t ed25519 -C "my-laptop"

اضغط Enter لقبول مكان الحفظ، ثم يسألك عن passphrase: كلمة سرّ اختيارية تحمي الملف لو سُرق جهازك (ننصح بها للحواسيب المحمولة)، أو اضغط Enter مرتين لتتركها فارغة. هذه مخرجات حقيقية على ويندوز (مع تقصير المسار):

إنشاء مفتاح ed25519 بأمر ssh-keygen في PowerShell
مخرجات حقيقية (المسار مختصر)

الخطوة 2: ضع المفتاح العام على السيرفر

من ويندوز: لا يوجد ssh-copy-id، لكن هذا الأمر يؤدي الغرض نفسه. سيطلب كلمة المرور مرة أخيرة:

نسخ المفتاح العام إلى authorized_keys من PowerShell ثم الدخول بلا كلمة مرور
من ويندوز

من الماك ولينكس: أمر واحد يتولى كل شيء:

تثبيت المفتاح على السيرفر بأمر ssh-copy-id من الماك أو لينكس
مخرجات حقيقية (المسار مختصر)

من الهاتف: Termius

في تطبيق Termius أنشئ مفتاحًا من قسم Keychain، ثم انسخ المفتاح العام (السطر الذي يبدأ بـssh-ed25519) وأضفه إلى السيرفر بسطر في ~/.ssh/authorized_keys، واختر المفتاح في إعدادات السيرفر داخل التطبيق. التفاصيل في دليل Termius.

# على السيرفر: إضافة مفتاح عام يدويًا (سطر واحد لكل جهاز)
echo "ssh-ed25519 AAAA...المفتاح... my-phone" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

خطأ ويندوز: UNPROTECTED PRIVATE KEY FILE

واجهنا هذا الخطأ فعلًا أثناء التجربة: ويندوز يرفض استعمال مفتاح يستطيع مستخدم آخر على الجهاز قراءته، فيتجاهله ويطلب كلمة المرور أو يرفض الدخول:

خطأ WARNING UNPROTECTED PRIVATE KEY FILE في ويندوز
خطأ حقيقي واجهناه في التجربة

الحل: أعد صلاحيات الملف لحسابك وحدك (في PowerShell):

icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r
icacls $env:USERPROFILE\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"

اختياري: أوقف الدخول بكلمة المرور

بعد أن تتأكد أن المفتاح يعمل، تستطيع منع الدخول بكلمة المرور عبر SSH نهائيًا، فتصبح محاولات التخمين بلا فائدة. اترك جلستك الحالية مفتوحة وجرّب الدخول من نافذة جديدة قبل إغلاقها:

echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-no-password.conf
sudo sshd -t && sudo systemctl reload ssh     # sshd -t يفحص الإعداد قبل التطبيق

الرقم 10 في اسم الملف مقصود: SSH يقرأ الملفات بالترتيب ويأخذ أول قيمة، فيسبق ملفك أي إعداد لاحق يسمح بكلمة المرور. ولن تفقد السيرفر لو ضاع مفتاحك: الكونسول في لوحة مرام يقبل كلمة المرور دائمًا لأنه لا يمرّ عبر SSH، وتستطيع تغييرها من اللوحة.

نصائح

  • مفتاح لكل جهاز باسم واضح في -C (my-laptop، my-phone)، فإن ضاع جهاز حذفت سطره فقط من authorized_keys.
  • لا ترسل المفتاح الخاص لأحد، ولا تضعه على السيرفر. المبرمج الذي يعمل معك ينشئ مفتاحه ويعطيك العام فقط.
  • احفظ نسخة من مفتاحك الخاص في مكان آمن (مدير كلمات مرور أو قرص مشفّر).