يعد بروتوكول النقل الآمن Secure Shell، أو SSH اختصارًا، إحدى الأدوات الأساسية التي يجب على مسؤول النظام إتقانها، وهو بروتوكول يستخدم لتسجيل الدخول الآمن إلى الأجهزة البعيدة عن طريق الطرفية أو سطر الأوامر، وهو أكثر الطرق شيوعًا للوصول إلى خوادم Linux لينكس البعيدة ستتعلم في هذا المقال خطوة بخطوة كيفية استخدام بروتوكول SSH للاتصال بنظام بعيد.
العمل على نظام تشغيل ويندوز Windows
إذا كنا نستخدم نظام التشغيل ويندوز على جهازنا، فسنحتاج إلى تثبيت إحدى إصدارات برنامج OpenSSH لنتمكن من استخدام الأمر ssh
من سطر الأوامر. أما إن فضّلنا العمل في برنامج PowerShell، فيمكن قراءة توثيقات مايكروسوفت لإضافة OpenSSH إلى PowerShell. أما في حال العمل في بيئة لينكس Linux كاملة، فيمكن إعداد WSL -أي نظام ويندوز الفرعي لنظام لينكس Windows Subsystem for Linux- وهو طبقة توافق لتشغيل أنظمة لينكس داخل أنظمة ويندوز، مما يتيح لنا تشغيل طرفية حقيقية مباشرةً في نظام ويندوز دون الحاجة لآلة افتراضية ويتضمن الأمر ssh
. وأخيرًا، يمكننا تثبيت Git على نظام ويندوز، والذي يوفر طرفية Bash أصلية تتضمن أيضًا الأمر ssh
. فجميع هذه البيئات الثلاثة مدعومة والخيار متروك لكم في العمل مع إحداها حسب ما تفضلونه.
العمل على نظام تشغيل لينكس Linux أو ماك Mac
إن كنا نستخدم نظام لينكس أو ماك فسيكون الأمر ssh
جاهزًا في الطرفية، وفيما يلي صيغته الأساسية:
ssh remote_host
remote_host
هو عنوان IP أو اسم النطاق domain الذي نريد الاتصال به.
يفترض الأمر السابق أن اسم المستخدم على النظام البعيد هو نفس اسم المستخدم على نظامنا المحلي، أما إن كان اسم المستخدم مختلفًا، فيمكننا تحديده باستخدام الأمر التالي:
ssh remote_username@remote_host
قد يُطلب منا إدخال كلمة مرور للاتصال بالخادم، وسنتحدث لاحقًا عن كيفية استخدام مفاتيح المصادقة المشفرة keys بدل كلمات المرور passwords.
نستخدم الأمر التالي للخروج من جلسة SSH والعودة إلى الصدفة:
Exit
آلية عمل بروتوكول SSH
يعمل بروتوكول SSH عن طريق توصيل برنامج عميل client program يسمى sshd مع خادم ssh، فبالعودة إلى مثالنا السابق، فإن ssh
هو بمثابة برنامج العميل، أما خادم ssh فيعمل على الجهاز البعيد remote host الذي حددناه. يجب أن يبدأ خادم sshd بالعمل تلقائيًا في معظم بيئات لينكس. وإذا لم يعمل لسبب ما، فقد نحتاج إلى الوصول إلى الخادم من خلال إحدى طرفيّات المتصفح المعتمدة على الويب web-based console، أوالطرفيّة المحلية local serial console.
يعتمد الأمر اللازم لتشغيل خادم ssh على توزيعة لينكس التي نستخدمها، فعند استخدام توزيعة أوبنتو، يمكننا تشغيل الأمر التالي:
sudo systemctl start ssh
يُشغّل الأمر السابق خادم sshd وبإمكاننا الآن تسجيل الدخول إلى الخادم عن بعد.
كيفية ضبط إعدادات بروتوكول SSH
عندما نغيّر إعدادات بروتوكول SSH فإننا نغيّر أيضًا إعدادات خادم sshd. سنجد ملف الإعدادات ضمن المسار /etc/ssh/sshd_config
. ومن الضروري أخذ نسخة احتياطيةً عن هذا الملف قبل بدء التعديل، باستخدام الأمر التالي:
sudo cp /etc/ssh/sshd_config{,.bak}
ثم نفتحه باستخدام محرر النصوص nano
أو أي محرر آخر:
sudo nano /etc/ssh/sshd_config
لنطلع على بعض خيارات الملف:
Port 22
عند الإعلان عن منفذ جديد port declaration فإننا نحدد المنفذ الذي سيستخدمه خادم sshd للاتصال، والمنفذ الافتراضي لذلك هو 22
. يُفضّل ألا نغيّر هذا الإعداد، إلا إن كان لدينا سبب لذلك. وسنوضح لاحقًا كيفية الاتصال بالمنفذ الجديد.
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key
عند الإعلان عن مفاتيح المضيف host keys فإننا نحدد مكان البحث عن مفاتيح المضيف العامة global host keys. وسنتحدث عن ذلك لاحقًا.
SyslogFacility AUTH LogLevel INFO
يحدد العنصران السابقان مستوى التسجيل logging level. إذ قد تكون زيادة التسجيل طريقة جيدة لاكتشاف المشكلات في SSH:
LoginGraceTime 120 PermitRootLogin yes StrictModes yes
تحدد المعاملات السابقة بعض معلومات تسجيل الدخول:
-
يحدد المعامل
LoginGraceTime
عدد الثواني إبقاء الاتصال قبل تسجيل الدخول، ويُنصح أن نجعل هذا الوقت أكثر بقليل من الوقت اللازم لتسجيل الدخول عادة -
يحدد المعامل
PermitRootLogin
هل يُسمح للمستخدم الجذر تسجيل الدخول أم لا، ويجب في معظم الحالات ضبط هذا الإعداد على الخيارno
عند إنشاء مستخدم لديه امتيازات الجذر لتقليل خطر حصول أي شخص على امتيازات الجذر والوصول إلى خادمنا -
المعامل
strictModes
هو حارس أمان لا يسمح بتسجيل الدخول إذا كانت ملفات المصادقة متاحة القراءة للجميع. وهذا يمنع تسجيل الدخول عندما تكون ملفات الإعدادات غير آمنة
X11Forwarding yes X11DisplayOffset 10
-
تضبط هذه المعاملات خاصيةً تسمى
X11 Forwarding
تتيح لنا عرض واجهة المستخدم الرسومية GUI للنظام البعيد على النظام المحلي، ويجب تفعيل هذا الخيار على الخادم واستخدامه مع عميل SSH أثناء الاتصال مصحوبًا بالخيارx-
.
بعد التعديل على الملف نحفظه ثم نغلقه. وإن كنا نستخدم محرر النصوص nano، نضغط على المفتاحين Ctrl+X، ثم Y عندما يُطلب منا ذلك، ثم نضغط على مفتاح Enter. ولا ننسى إعادة تحميل خادم sshd لتنفيذ التعديلات التي أجريناها في الملف باستخدام الأمر التالي:
sudo systemctl reload ssh
يجب اختبار التعديلات بدقة للتأكد أنها تعمل كما يجب. كما يمكننا فتح بضع جلسات في الطرفية أثناء التعديل على ملف الإعدادات، لإلغاء التعديلات إن لزم الأمر دون الحاجة إلى إعادة تسجيل الدخول.
تسجيل الدخول إلى SSH باستخدام مفاتيح المصادقة Keys
يُنصح لتسجيل الدخول إلى نظام بعيد استخدام كلمات المرور passwords أو مفاتيح المصادقة keys والتي تتصف بأنها أسرع وأكثر أمانًا من كلمات المرور.
آلية عمل المصادقة المعتمدة على المفاتيح
تعمل المصادقة المعتمدة على مفاتيح المصادقة عن طريق إنشاء زوج من المفاتيح: مفتاح خاص private key ومفتاح عام public key. يوجد المفتاح الخاص على جهاز العميل وهو سرّي، أما المفتاح العام فيمكن إعطاؤه لأي شخص أو وضعه على أي خادم نرغب الوصول إليه.
عندما نحاول الاتصال باستخدام زوج من المفاتيح، نستخدم الخادم المفتاح العام لإنشاء رسالة محمية لحاسوب العميل لا يمكن قراءتها إلا باستخدام المفتاح الخاص. بعد ذلك، يرسل حاسوب العميل الاستجابة المناسبة إلى الخادم وسيعرف الخادم أن العميل يُسمح له بالاتصال. تُنفَّذ هذه العملية تلقائيًا بعد ضبط إعدادات المفاتيح.
كيفية إنشاء مفاتيح المصادقة في بروتوكول SSH
يجب إنشاء مفاتيح المصادقة في بروتوكول SSH على الحاسوب الذي سنسجل الدخول منه، أي جهازنا المحلي. نكتب ما يلي في سطر الأوامر:
ssh-keygen -t rsa
قد يُطلب منا تعيين كلمة مرور على ملفات المفاتيح نفسها، ولكن هذا الأمر غير شائع. يجب الضغط على مفتاح Enter لقبول الإعدادات الافتراضية. وستُنشأ المفاتيح في المجلد ~/.ssh/id_rsa.pub
و المجلد ~/.ssh/id_rsa
.
نغيّر مكان إنشاء المفاتيح إلى المجلد .ssh
باستخدام الأمر التالي:
cd ~/.ssh
نستعرض سماحيات الملف باستخدام الأمر:
ls -l
وسنحصل على الخرج التالي:
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
نلاحظ أن الملف id_rsa
قابل القراءة والكتابة بواسطة المالك فقط، مما يساعد على إبقاء الملف سريًّا. أما الملف id_rsa.pub
فيمكن مشاركته وله سماحيات تمكّن ذلك.
نقل المفاتيح العامة إلى الخادم
إن فعّلنا الوصول إلى الخادم باستخدام كلمة المرور، فبإمكاننا نسخ مفتاح المرور العام إلى الخادم باستخدام الأمر التالي:
ssh-copy-id remote_host
سيؤدي الأمر إلى إنشاء جلسة SSH، وبعد إدخال كلمة المرور، سيُنسخ المفتاح العام إلى ملف المفاتيح المعتمدة authorized keys في الخادم، مما يسمح لنا بتسجيل الدخول دون كلمة المرور في المرة القادمة.
الخيارات المتاحة لعميل SSH
هناك خيارات عدة عند الاتصال عبر بروتوكول SSH، بعضها قد يكون ضروريًا لمطابقة الإعدادات الموجودة في sshd عند المضيف البعيد remote host. مثلًا، إذا غيّرنا رقم المنفذ في إعدادات sshd، فعلينا تغييره عند العميل باستخدام الأمر التالي:
ssh -p port_number remote_host
ملاحظة:: يُعدَ تغيير منفذ بروتوكول ssh طريقةً مناسبةً لزيادة الأمان، فإذا كنا نسمح بالاتصال بخادم معروف عبر بروتوكول ssh على المنفذ 22 كالمعتاد، ووضعنا كلمة مرور، فمن المحتمل أن نتعرض لمحاولات تسجيل دخول آلية عديدة automated logins. لكن، لا يُعدّ استخدام مفاتيح المصادقة وتشغيل بروتوكول ssh على منفذ غير المنفذ المعتاد الحل الأمني الأمثل، ولكنه يفيد في الحد من الهجمات الآلية.
إذا أردنا تنفيذ أمر واحد فقط على النظام البعيد، فيمكن تحديده بعد المضيف، كما يلي:
ssh remote_host command_to_run
سنتصل بالنظام البعيد وسيُنَفذ الأمر بعد إدخال مفتاح المرور. إن كانت خاصية X11 Forwarding مفعلةً على كلا الجهازين، فيمكننا تفعيل ميزاتها باستخدام الأمر التالي:
ssh -X remote_host
بشرط توفر الأدوات المناسبة لذلك على حاسوبنا، فبرامج واجهة المستخدم الرسومية التي نستخدمها على النظام البعيد ستُشَغّل الآن على نظامنا المحلي.
إلغاء التحقق من كلمة المرور
يمكن عند إنشاء مفاتيح SSH، تحسين أمان الخادم وتعطيل مصادقة كلمة المرور، وتمكين تسجيل الدخول إلى الخادم من خلال المفتاح الخاص المقترن بالمفتاح العام الذي نبّته على الخادم.
تنبيه: قبل متابعة هذه الخطوة، علينا التأكد من تثبيت مفتاح عام على خادمنا. وإلا لن نستطيع تسجيل الدخول!
نفتح ملف إعدادات sshd كمستخدم مسؤول root user أو أو مستخدم يتمتع بامتيازات sudo باستخدام الأمر التالي:
sudo nano /etc/ssh/sshd_config
نبحث عن سطر Password Authentication
ثم نزيل التعليق عنه بمسح رمز #
، ونغيّر قيمته إلى القيمة no
:
PasswordAuthentication no
أما الخيار PubkeyAuthentication
و ChallengeResponseAuthentication
فلا يحتاجان إلى تعديل، شريطة ألا نكون عدلنا هذا الملف، إذ يجب تركهما على الضبط الإفتراضي:
PubkeyAuthentication yes ChallengeResponseAuthentication no
نحفظ الملف ونغلقه بعد الانتهاء من التعديلات. ثم نعيد تحميل برنامج ssh:
sudo systemctl reload ssh
وبهكذا نكون قد ألغينا التحقق من كلمة المرور، وفعّلنا خيار الوصول إلى الخادم حصرًا عبر مفتاح SSH.
الخاتمة
شرحنا في هذا المقال كيفية استخدام بروتوكول SSH وهو أمر مفيد جدًا في مجال الحوسبة السحابية، وسنحتاج أثناء استخدام الخيارات المتنوعة مزيدًا من الميزات المتقدمة التي من شأنها تسهيل عملنا. لهذا بقي بروتوكول SSH شائع الاستخدام لأنه آمن وصغير الحجم ومفيد في الكثير من الحالات.
ترجمة ، وبتصرّف، للمقال How To Use SSH to Connect to a Remote Server لكاتبه Justin Ellingwood.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.