كلمة المرور يمكن أن تُخمَّن أو تُسرق أو تُنسى. أما مفتاح 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 مرتين لتتركها فارغة. هذه مخرجات حقيقية على ويندوز (مع تقصير المسار):

الخطوة 2: ضع المفتاح العام على السيرفر
من ويندوز: لا يوجد 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
واجهنا هذا الخطأ فعلًا أثناء التجربة: ويندوز يرفض استعمال مفتاح يستطيع مستخدم آخر على الجهاز قراءته، فيتجاهله ويطلب كلمة المرور أو يرفض الدخول:

الحل: أعد صلاحيات الملف لحسابك وحدك (في 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. - لا ترسل المفتاح الخاص لأحد، ولا تضعه على السيرفر. المبرمج الذي يعمل معك ينشئ مفتاحه ويعطيك العام فقط.
- احفظ نسخة من مفتاحك الخاص في مكان آمن (مدير كلمات مرور أو قرص مشفّر).
