أساسيات SSH: العمل مع خوادم SSH والعملاء والمفاتيح

مقدمة

SSH هو بروتوكول آمن يُستخدم كوسيلة أساسية للاتصال بخوادم Linux عن بُعد. يوفر واجهة قائمة على النص عن طريق إنشاء قشرة بعيدة. بعد الاتصال، يتم إرسال جميع الأوامر التي تكتبها في الطرفية المحلية إلى الخادم البعيد وتُنفذ هناك.

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

نشر تطبيقات الواجهة الأمامية الخاصة بك من GitHub باستخدام منصة DigitalOcean للتطبيقات. دع DigitalOcean تركز على توسيع تطبيقك.

كيفية استخدام هذا الدليل

  • اقرأ قسم نظرة عامة على SSH أولاً إذا كنت غير ملم بـ SSH بشكل عام أو إذا كنت بدأت للتو.
  • استخدم الأقسام التالية التي تنطبق على ما تحاول تحقيقه. معظم الأقسام لا تعتمد على الأقسام الأخرى، لذا يمكنك استخدام الأمثلة التالية بشكل مستقل.
  • استخدم قائمة المحتويات على الجانب الأيسر من هذه الصفحة (عندما يكون عرض الصفحة واسعًا) أو استخدم وظيفة البحث في متصفحك للعثور على الأقسام التي تحتاج إليها.
  • انسخ والصق أمثلة الأوامر المعطاة، مستبدلا القيم المميزة بالخاصة بك.

نظرة عامة على SSH

أكثر الطرق شيوعًا للاتصال بخادم Linux عن بُعد هي من خلال SSH. تعني SSH الشل الآمن وتوفر وسيلة آمنة وآمنة لتنفيذ الأوامر وإجراء التغييرات وتكوين الخدمات عن بُعد. عندما تتصل من خلال SSH، تقوم بتسجيل الدخول باستخدام حساب موجود على الخادم عن بُعد.

كيف يعمل SSH

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

تم تنفيذ اتصال SSH باستخدام نموذج العميل-الخادم. هذا يعني أنه يجب أن يكون هناك برنامج يعمل على الجهاز البعيد يسمى برنامج خادم SSH لإنشاء اتصال SSH. يستمع هذا البرنامج للاتصالات على منفذ شبكة محدد، ويقوم بالمصادقة على طلبات الاتصال، وينشئ البيئة المناسبة إذا قدم المستخدم بيانات اعتماد صحيحة.

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

كيفية مصادقة المستخدمين في SSH

عادةً ما يقوم العملاء بالمصادقة إما باستخدام كلمات المرور (أقل أمانًا وغير موصى به) أو مفاتيح SSH، والتي تعتبر آمنة للغاية.

تشفر تسجيلات الدخول بكلمات المرور وسهلة الفهم للمستخدمين الجدد. ومع ذلك، ستحاول الروبوتات الآلية والمستخدمون الخبيثون في كثير من الأحيان محاولة مصادقة متكررة على الحسابات التي تسمح بتسجيل الدخول باستخدام كلمة المرور، مما يمكن أن يؤدي إلى تعرض الأمان للمخاطر. لهذا السبب، نوصي دائمًا بإعداد المصادقة على أساس مفتاح SSH لمعظم التكوينات.

مفاتيح SSH هي مجموعة متطابقة من المفاتيح التشفيرية التي يمكن استخدامها للمصادقة. يحتوي كل مجموعة على مفتاح عام ومفتاح خاص. يمكن مشاركة المفتاح العام بحرية دون قلق، بينما يجب حراسة المفتاح الخاص بجدية وعدم تعريضه لأي شخص.

للمصادقة باستخدام مفاتيح SSH، يجب أن يكون للمستخدم زوج من مفاتيح SSH على جهاز الكمبيوتر المحلي. على الخادم البعيد، يجب نسخ المفتاح العام إلى ملف داخل دليل المستخدم في المسار ~/.ssh/authorized_keys. يحتوي هذا الملف على قائمة من المفاتيح العامة، واحدة لكل سطر، التي يتم تفويضها لتسجيل الدخول إلى هذا الحساب.

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

عند استلام هذه الرسالة، يقوم العميل بفك تشفيرها باستخدام المفتاح الخاص ويجمع السلسلة العشوائية التي تظهر مع معرف الجلسة المتفق عليه مسبقًا. ثم يولّد هاش MD5 لهذه القيمة وينقلها إلى الخادم. كان لدى الخادم بالفعل الرسالة الأصلية ومعرف الجلسة، لذا يمكنه مقارنة هاش MD5 تم إنشاؤه بواسطة تلك القيم وتحديد أن العميل يجب أن يكون لديه المفتاح الخاص.

الآن بعد أن تعرف كيف يعمل SSH، يمكننا أن نبدأ في مناقشة بعض الأمثلة لتوضيح طرق مختلفة للعمل مع SSH.

إنشاء والعمل مع مفاتيح SSH

سيغطي هذا القسم كيفية إنشاء مفاتيح SSH على جهاز العميل وتوزيع المفتاح العام إلى الخوادم حيث يجب استخدامه. هذا القسم جيد للبدء به إذا لم تكن قد قمت بإنشاء المفاتيح مسبقًا بسبب الأمان المتزايد الذي يتيحه لاتصالات المستقبل.

إنشاء زوج مفاتيح SSH

إنشاء زوج جديد من المفتاح العام والخاص لـ SSH على جهاز الكمبيوتر المحلي هو الخطوة الأولى نحو المصادقة مع خادم بعيد دون كلمة مرور. ما لم يكن هناك سبب جيد لعدم القيام بذلك، يجب دائمًا المصادقة باستخدام مفاتيح SSH.

A number of cryptographic algorithms can be used to generate SSH keys, including RSA, DSA, and ECDSA. RSA keys are generally preferred and are the default key type.

لإنشاء زوج مفتاح RSA على جهاز الكمبيوتر المحلي الخاص بك، اكتب:

  1. ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

هذا البرومبت يتيح لك اختيار موقع لتخزين المفتاح الخاص RSA الخاص بك. اضغط ENTER للإبقاء على الإعداد الافتراضي، والذي سيخزنه في الدليل الخفي .ssh في دليل المستخدم الخاص بك. ترك الموقع الافتراضي المحدد سيتيح لعميل SSH الخاص بك العثور على المفاتيح تلقائيًا.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

المرحلة التالية تتيح لك إدخال عبارة سرية ذات طول تختاره لتأمين مفتاحك الخاص. بشكل افتراضي، ستضطر إلى إدخال أي عبارة سرية تقوم بتعيينها هنا في كل مرة تستخدم فيها المفتاح الخاص، كإجراء أمان إضافي. لا تتردد في الضغط على ENTER لترك هذا الحقل فارغًا إذا لم تكن ترغب في وجود عبارة سرية. ومع ذلك، خذ في عين الاعتبار أن هذا سيسمح لأي شخص يتمكن من السيطرة على المفتاح الخاص بالدخول إلى خوادمك.

إذا اخترت إدخال عبارة سرية، فلن يتم عرض أي شيء أثناء كتابتك. هذا تدبير أمني.

Output
Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+

لقد أنشأ هذا الإجراء زوج مفاتيح SSH من نوع RSA، والذي يوجد في الدليل المخفي .ssh داخل دليل المستخدم الرئيسي. هذه هي الملفات:

  • ~/.ssh/id_rsa: المفتاح الخاص. لا تشارك هذا الملف مع أي شخص!
  • ~/.ssh/id_rsa.pub: المفتاح العمومي المرتبط. يمكن مشاركة هذا بحرية دون أي عواقب.

انشاء زوج مفاتيح SSH بعدد أكبر من البتات

تكون مفاتيح SSH مكونة من 2048 بت بشكل افتراضي. يُعتبر ذلك عادة مقبولا من حيث الأمان، ولكن يمكنك تحديد عدد أكبر من البتات للحصول على مفتاح أكثر صلابة.

للقيام بذلك، قم بتضمين الوسيطة -b مع عدد البتات التي ترغب فيها. تدعم معظم الخوادم المفاتيح طولا يصل إلى 4096 بت على الأقل. قد لا تتم قبول المفاتيح الأطول لأغراض حماية من هجمات الحجب الخدمي:

  1. ssh-keygen -b 4096

إذا كنت قد أنشأت مفتاحًا مختلفًا في السابق، سيُطلَب منك ما إذا كنت ترغب في استبدال المفتاح السابق الخاص بك:

Overwrite (y/n)?

إذا اخترت “نعم”، سيتم استبدال المفتاح السابق الخاص بك ولن تتمكن بعد ذلك من تسجيل الدخول إلى الخوادم باستخدام ذلك المفتاح. لهذا السبب، تأكد من استبدال المفاتيح بحذر.

إزالة أو تغيير عبارة المرور على المفتاح الخاص

إذا كنت قد أنشأت عبارة مرور لمفتاحك الخاص وترغب في تغييرها أو إزالتها، يمكنك القيام بذلك بسهولة.

ملاحظة: لتغيير أو إزالة عبارة المرور، يجب أن تعرف عبارة المرور الأصلية. إذا فقدت عبارة المرور للمفتاح، فليس هناك ما يمكن فعله وسيتعين عليك إنشاء زوج مفاتيح جديد.

لتغيير أو إزالة عبارة المرور، ما عليك سوى كتابة:

  1. ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):

يمكنك كتابة موقع المفتاح الذي ترغب في تعديله أو الضغط على ENTER لقبول القيمة الافتراضية:

Enter old passphrase:

أدخل عبارة المرور القديمة التي ترغب في تغييرها. سيُطلَب منك بعد ذلك عبارة مرور جديدة:

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

هنا، أدخل عبارة المرور الجديدة الخاصة بك أو اضغط على ENTER لإزالة عبارة المرور.

عرض بصمة مفتاح SSH

كل زوج مفاتيح SSH يشترك في بصمة تشفيرية واحدة يمكن استخدامها لتحديد الهوية بشكل فريد. يمكن أن يكون هذا مفيدًا في مجموعة متنوعة من الحالات.

للعثور على بصمة مفتاح SSH، اكتب:

  1. ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa):

يمكنك الضغط على ENTER إذا كان هذا هو الموقع الصحيح للمفتاح، وإلا فأدخل الموقع المعدل. سيتم منحك سلسلة نصية تحتوي على طول البت للمفتاح، والبصمة، والحساب والمضيف الذي تم إنشاؤه له، والخوارزمية المستخدمة:

Output
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA)

نسخ مفتاح SSH العام الخاص بك إلى خادم باستخدام SSH-Copy-ID

لنسخ مفتاحك العام إلى خادم، مما يتيح لك المصادقة دون كلمة مرور، يمكن اتباع عدة طرق.

إذا كان لديك حاليًا وصول SSH القائم على كلمة المرور إلى خادمك، وكنت قد قمت بتثبيت أداة ssh-copy-id، فهذه عملية بسيطة. أداة ssh-copy-id مضمنة في حزم OpenSSH للعديد من توزيعات Linux، لذا من المحتمل جدًا أن يتم تثبيتها افتراضيًا.

إذا كانت لديك هذه الخيارات، يمكنك نقل مفتاحك العام بسهولة عن طريق كتابة:

  1. ssh-copy-id username@remote_host

سيطلب منك هذا إدخال كلمة مرور حساب المستخدم على النظام البعيد:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

بعد إدخال كلمة المرور، سيتم إلحاق محتويات مفتاحك ~/.ssh/id_rsa.pub بنهاية ملف ~/.ssh/authorized_keys لحساب المستخدم:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.

يمكنك الآن تسجيل الدخول إلى ذلك الحساب بدون كلمة مرور:

  1. ssh username@remote_host

نسخ مفتاح SSH العام إلى خادم بدون استخدام SSH-Copy-ID

إذا لم يكن لديك أداة ssh-copy-id متاحة، ولكن لديك لا تزال إمكانية الوصول إلى الخادم عبر SSH بناءً على كلمة المرور، يمكنك نسخ محتويات مفتاحك العام بطريقة مختلفة.

يمكنك إخراج محتويات المفتاح وتوجيهها إلى أمر ssh. على الجانب البعيد، يمكنك التأكد من وجود مجلد ~/.ssh، ثم إلحاق محتويات الأنبوب بملف ~/.ssh/authorized_keys:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

سيُطلب منك إدخال كلمة المرور لحساب الجهاز البعيد:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:

بعد إدخال كلمة المرور، سيتم نسخ مفتاحك، مما يتيح لك تسجيل الدخول بدون كلمة مرور:

  1. ssh username@remote_IP_host

نسخ مفتاح SSH العام إلى خادم يدويًا

إذا لم يكن لديك إمكانية الوصول عبر SSH بناءً على كلمة المرور، ستحتاج إلى إضافة مفتاحك العام إلى الخادم عن بُعد يدويًا.

على جهازك المحلي، يمكنك العثور على محتويات ملف المفتاح العام عن طريق الكتابة:

  1. cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

يمكنك نسخ هذه القيمة ولصقها يدويًا في الموقع المناسب على الخادم البعيد. ستحتاج إلى تسجيل الدخول إلى الخادم البعيد من خلال وسائل أخرى (مثل واجهة ويب DigitalOcean).

على الخادم البعيد، قم بإنشاء دليل ~/.ssh إذا لم يكن موجودًا بالفعل:

  1. mkdir -p ~/.ssh

بعد ذلك، يمكنك إنشاء أو إضافة ملف ~/.ssh/authorized_keys بكتابة:

  1. echo public_key_string >> ~/.ssh/authorized_keys

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

تعليمات الاتصال الأساسية

ستغطي القسم التالي بعض الأساسيات حول كيفية الاتصال بخادم باستخدام SSH.

الاتصال بخادم بعيد

للاتصال بخادم بعيد وفتح جلسة تفاعلية هناك، يمكنك استخدام الأمر ssh.

الشكل الأبسط يفترض أن اسم المستخدم على جهازك المحلي هو نفسه على الخادم البعيد. إذا كان هذا صحيحًا، يمكنك الاتصال باستخدام:

  1. ssh remote_host

إذا كان اسم المستخدم الخاص بك مختلفًا على الخادم البعيد، فستحتاج إلى تمرير اسم المستخدم البعيد مثل هذا:

  1. ssh username@remote_host

في أول مرة تتصل فيها بمضيف جديد، سترى رسالة تبدو مثل هذه:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

اكتب نعم لقبول مصداقية المضيف البعيد.

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

تشغيل أمر واحد على خادم بعيد

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

  1. ssh username@remote_host command_to_run

سيتم الاتصال بالمضيف البعيد، والمصادقة ببيانات اعتمادك، وتنفيذ الأمر الذي حددته. سيتم إغلاق الاتصال على الفور بعد ذلك.

تسجيل الدخول إلى خادم باستخدام منفذ مختلف

بشكل افتراضي، يعمل سحاب SSH على الخادم على المنفذ 22. سيفترض عميل SSH أن هذا هو الحال عند محاولة الاتصال. إذا كان خادم SSH الخاص بك يستمع على منفذ غير قياسي (يتم توضيح هذا في القسم التالي)، عليك تحديد رقم المنفذ الجديد عند الاتصال بالعميل الخاص بك.

يمكنك القيام بذلك عن طريق تحديد رقم المنفذ باستخدام الخيار -p:

  1. ssh -p port_num username@remote_host

لتجنب الحاجة إلى القيام بذلك في كل مرة تقوم فيها بتسجيل الدخول إلى الخادم عن بعد الخاص بك، يمكنك إنشاء أو تحرير ملف تكوين في الدليل ~/.ssh داخل دليل المستخدم الخاص بك على الكمبيوتر المحلي.

قم بتحرير أو إنشاء الملف الآن عن طريق كتابة:

  1. nano ~/.ssh/config

في هذا المكان، يمكنك تعيين خيارات تكوين محددة للمضيف. لتحديد منفذك الجديد، استخدم تنسيق مثل هذا:

~/.ssh/config
Host remote_alias
    HostName remote_host
    Port port_num

سيتيح لك هذا تسجيل الدخول دون تحديد رقم المنفذ المحدد في سطر الأوامر.

إضافة مفاتيح SSH الخاصة بك إلى وكيل SSH لتجنب كتابة عبارة المرور

إذا كانت لديك عبارة مرور على مفتاح SSH الخاص بك، فسيُطلب منك إدخال عبارة المرور في كل مرة تستخدمها للاتصال بمضيف بعيد.

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

هذا مهم أيضًا إذا كنت بحاجة إلى إعادة توجيه بيانات اعتماد SSH الخاصة بك (والتي سيتم عرضها لاحقًا).

لبدء وكيل SSH، اكتب ما يلي في جلسة الطرفية المحلية الخاصة بك:

  1. eval $(ssh-agent)
Output
Agent pid 10891

هذا سيبدأ برنامج الوكيل وسيضعه في الخلفية. الآن، تحتاج إلى إضافة مفتاحك الخاص إلى الوكيل، حتى يتمكن من إدارة مفتاحك:

  1. ssh-add
Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

ستحتاج إلى إدخال عبارة المرور الخاصة بك (إذا كانت هناك). بعد ذلك، يتم إضافة ملف الهوية الخاص بك إلى الوكيل، مما يتيح لك استخدام مفتاحك لتسجيل الدخول دون الحاجة إلى إعادة إدخال عبارة المرور مرة أخرى.

توجيه بيانات اعتماد SSH الخاصة بك للاستخدام على خادم

إذا كنت ترغب في القدرة على الاتصال بخادم دون كلمة مرور من داخل خادم آخر، فستحتاج إلى توجيه معلومات مفتاح SSH الخاصة بك. سيتيح لك هذا المصادقة على خادم آخر من خلال الخادم الذي تم الاتصال به، باستخدام بيانات الاعتماد على جهاز الكمبيوتر المحلي الخاص بك.

للبدء، يجب أن يكون وكيل SSH الخاص بك مشغَّلًا ويجب أن يتم إضافة مفتاح SSH الخاص بك إلى الوكيل (انظر القسم السابق). بعد الانتهاء من هذا، تحتاج إلى الاتصال بالخادم الأول باستخدام الخيار -A. سيقوم هذا بتوجيه بيانات الاعتماد إلى الخادم لهذه الجلسة:

  1. ssh -A username@remote_host

من هنا، يمكنك الاتصال بـ SSH إلى أي مضيف آخر مرخص لمفتاح SSH الخاص بك. ستقوم بالاتصال كما لو كان مفتاح SSH الخاص بك موجودًا على هذا الخادم.

خيارات تكوين الخادم

تحتوي هذه الجزء على بعض الخيارات الشائعة لتكوين الخادم من الجانب الخادم الذي يمكن أن تؤثر على الطريقة التي يستجيب بها الخادم وأنواع الاتصالات المسموح بها.

تعطيل المصادقة بكلمة المرور

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

للقيام بذلك، قم بالاتصال بالخادم البعيد وافتح ملف /etc/ssh/sshd_config بصلاحيات المستخدم الجذر أو sudo:

  1. sudo nano /etc/ssh/sshd_config

في داخل الملف، ابحث عن التوجيهة PasswordAuthentication. إذا كانت معلقة، قم بفك تعليقها. ثم ضعها على no لتعطيل تسجيل الدخول بكلمة المرور:

/etc/ssh/sshd_config
PasswordAuthentication no

بعد أن قمت بإجراء التغيير، قم بحفظ وإغلاق الملف. لتنفيذ التغييرات، يجب عليك إعادة تشغيل خدمة SSH.

على Ubuntu/Debian:

  1. sudo service ssh restart

على CentOS/Fedora:

  1. sudo service sshd restart

الآن، لن يتمكن جميع الحسابات على النظام من تسجيل الدخول باستخدام SSH باستخدام كلمات مرور.

تغيير المنفذ الذي يعمل عليه خادم SSH Daemon

يقترح بعض المسؤولين تغيير المنفذ الافتراضي الذي يعمل عليه SSH. يمكن أن يساعد هذا في تقليل عدد محاولات المصادقة التي يتعرض لها خادمك من البوتات الآلية.

لتغيير المنفذ الذي يستمع إليه ساعة SSH، سيتعين عليك تسجيل الدخول إلى الخادم البعيد. افتح ملف sshd_config على النظام البعيد بامتيازات المستخدم الجذر، سواء عن طريق تسجيل الدخول باستخدام ذلك المستخدم أو باستخدام sudo:

  1. sudo nano /etc/ssh/sshd_config

بمجرد دخولك، يمكنك تغيير المنفذ الذي يعمل عليه SSH عن طريق البحث عن تحديد Port 22 وتعديله ليعكس المنفذ الذي ترغب في استخدامه. على سبيل المثال، لتغيير المنفذ إلى 4444، ضع هذا في ملفك:

/etc/ssh/sshd_config
#Port 22
Port 4444

احفظ وأغلق الملف عند الانتهاء. لتنفيذ التغييرات، يجب إعادة تشغيل ساعة SSH.

على أوبونتو/ديبيان:

  1. sudo service ssh restart

على سنت أوس/فيدورا:

  1. sudo service sshd restart

بعد إعادة تشغيل الساعة، ستحتاج إلى المصادقة عن طريق تحديد رقم المنفذ (كما هو موضح في القسم السابق).

تقييد المستخدمين الذين يمكنهم الاتصال عبر SSH

لتحديد الحسابات الخاصة بالمستخدمين الذين يمكنهم تسجيل الدخول من خلال SSH بشكل صريح، يمكنك اتباع بعض الطرق المختلفة، كل منها ينطوي على تحرير ملف تكوين ساعة SSH.

على الخادم البعيد الخاص بك، افتح هذا الملف الآن بامتيازات المستخدم الجذر أو بـ sudo:

  1. sudo nano /etc/ssh/sshd_config

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

/etc/ssh/sshd_config
AllowUsers user1 user2

احفظ وأغلق الملف. أعد تشغيل الخدمة لتنفيذ التغييرات.

على أوبونتو/ديبيان:

  1. sudo service ssh restart

على سينتوس/فيدورا:

  1. sudo service sshd restart

إذا كنت أكثر راحةً مع إدارة المجموعات، يمكنك استخدام التوجيه AllowGroups بدلاً من ذلك. إذا كان هذا هو الحال، قم بإضافة مجموعة واحدة فقط يجب السماح لها بالوصول عبر SSH (سنقوم بإنشاء هذه المجموعة وإضافة أعضائها لاحقًا):

/etc/ssh/sshd_config
AllowGroups sshmembers

احفظ وأغلق الملف.

الآن، يمكنك إنشاء مجموعة نظام (بدون دليل منزلي) تطابق المجموعة التي حددتها عبر الكتابة:

  1. sudo groupadd -r sshmembers

تأكد من إضافة حسابات المستخدمين الضرورية إلى هذه المجموعة. يمكن القيام بذلك عبر الكتابة:

  1. sudo usermod -a -G sshmembers user1
  2. sudo usermod -a -G sshmembers user2

الآن، أعد تشغيل خدمة SSH لتنفيذ التغييرات.

على أوبونتو/ديبيان:

  1. sudo service ssh restart

على سينتوس/فيدورا:

  1. sudo service sshd restart

تعطيل تسجيل الدخول باسم المستخدم root

من المستحسن في كثير من الأحيان تعطيل تمامًا تسجيل الدخول باسم المستخدم root عبر SSH بعد إعداد حساب مستخدم SSH يتمتع بامتيازات sudo.

للقيام بذلك، افتح ملف تكوين خادم SSH بصلاحيات root أو sudo على الخادم عن بعد الخاص بك.

  1. sudo nano /etc/ssh/sshd_config

ابحث في الداخل عن توجيه يسمى PermitRootLogin. إذا كان معلقًا، فقم بفك تعليقه. قم بتغيير القيمة إلى “no”:

/etc/ssh/sshd_config
PermitRootLogin no

احفظ وأغلق الملف. لتنفيذ التغييرات الخاصة بك، أعد تشغيل خادم SSH.

على أوبونتو/ديبيان:

  1. sudo service ssh restart

على سينت أو إفيدورا:

  1. sudo service sshd restart

السماح بالوصول الجذري لأوامر محددة

هناك بعض الحالات التي قد ترغب فيها في تعطيل الوصول الجذري بشكل عام، ولكن تمكينه للسماح بتشغيل تطبيقات معينة بشكل صحيح. على سبيل المثال، قد يكون ذلك في حالة جدول النسخ الاحتياطي.

يمكن تحقيق ذلك من خلال ملف authorized_keys للمستخدم الجذر، والذي يحتوي على مفاتيح SSH المصرح باستخدامها للحساب.

أضف المفتاح من جهاز الكمبيوتر المحلي الذي ترغب في استخدامه لهذه العملية (نوصي بإنشاء مفتاح جديد لكل عملية تلقائية) إلى ملف authorized_keys للمستخدم الجذر على الخادم. سنقوم بتوضيح ذلك باستخدام الأمر ssh-copy-id هنا، ولكن يمكنك استخدام أي من طرق نسخ المفاتيح التي نناقشها في أقسام أخرى:

  1. ssh-copy-id root@remote_host

الآن، قم بتسجيل الدخول إلى الخادم عن بعد. سنحتاج إلى ضبط الإدخال في ملف authorized_keys، لذا افتحه بصلاحيات المستخدم الجذر أو sudo:

  1. sudo nano /root/.ssh/authorized_keys

في بداية السطر مع المفتاح الذي قمت بتحميله، أضف command= قائمة تعريف الأمر الذي يمكن استخدام هذا المفتاح له. يجب أن يتضمن المسار الكامل للبرنامج القابل للتنفيذ، بالإضافة إلى أي وسيطات:

/root/.ssh/authorized_keys
command="/path/to/command arg1 arg2" ssh-rsa ...

احفظ وأغلق الملف عند الانتهاء.

الآن، افتح ملف sshd_config بامتيازات المستخدم الجذر أو باستخدام sudo:

  1. sudo nano /etc/ssh/sshd_config

ابحث عن التوجيهة PermitRootLogin، وقم بتغيير القيمة إلى forced-commands-only. هذا سيسمح فقط بتسجيل دخول SSH باستخدام الجذر عندما يتم تحديد أمر للمفتاح:

/etc/ssh/sshd_config
PermitRootLogin forced-commands-only

احفظ وأغلق الملف. أعد تشغيل خدمة SSH لتطبيق التغييرات الخاصة بك.

على Ubuntu/Debian:

  1. sudo service ssh restart

على CentOS/Fedora:

  1. sudo service sshd restart

توجيه عرض تطبيقات X إلى العميل

يمكن تكوين خادم SSH لتوجيه عرض تطبيقات X على الخادم إلى جهاز العميل بشكل تلقائي. لكي تعمل هذه الوظيفة بشكل صحيح، يجب أن يكون لدى العميل نظام X windows مكونًا وممكنًا.

لتمكين هذه الوظيفة، قم بتسجيل الدخول إلى الخادم البعيد وقم بتحرير ملف sshd_config بصلاحيات الجذر أو باستخدام sudo:

  1. sudo nano /etc/ssh/sshd_config

ابحث عن التوجيهة X11Forwarding. إذا كانت معلقة، قم بإلغاء تعليقها. أنشئها إذا لزم الأمر وقم بتعيين القيمة إلى “نعم”:

/etc/ssh/sshd_config
X11Forwarding yes

حفظ وإغلاق الملف. أعد تشغيل خادم SSH لتنفيذ هذه التغييرات.

على أوبونتو/ديبيان:

  1. sudo service ssh restart

على سنت أوس/فيدورا:

  1. sudo service sshd restart

للاتصال بالخادم وتوجيه عرض تطبيق ما، يجب عليك تمرير الخيار -X من العميل أثناء الاتصال:

  1. ssh -X username@remote_host

التطبيقات الرسومية التي يتم تشغيلها على الخادم من خلال هذه الجلسة يجب أن تُعرض على الكمبيوتر المحلي. قد تكون الأداء بطيئة قليلاً، ولكنها مفيدة جدًا في الحالات الطارئة.

خيارات تكوين العميل

في القسم التالي، سنركز على بعض التعديلات التي يمكنك إجراؤها على الجانب العميل من الاتصال.

تحديد معلومات الاتصال خاصة بالخادم

على جهاز الكمبيوتر المحلي الخاص بك، يمكنك تحديد تكوينات فردية لبعض أو جميع الخوادم التي تتصل بها. يمكن تخزين هذه في ملف ~/.ssh/config، الذي يتم قراءته من قبل عميل SSH الخاص بك في كل مرة يتم فيها استدعاؤه.

أنشئ أو افتح هذا الملف في محرر النصوص على جهاز الكمبيوتر المحلي الخاص بك:

  1. nano ~/.ssh/config

في الداخل، يمكنك تعريف خيارات التكوين الفردية عن طريق إدخال كل واحدة بكلمة مفتاحية Host، تليها الاسم المستعار. تحت هذا، ومسوّر، يمكنك تعريف أي من الإرشادات الموجودة في صفحة الرجل لـ ssh_config:

  1. man ssh_config

مثال على تكوين يمكن أن يكون كالتالي:

~/.ssh/config
Host testhost
    HostName your_domain
    Port 4444
    User demo

ثم يمكنك الاتصال بـ your_domain على البور 4444 باستخدام اسم المستخدم demo ببساطة عن طريق كتابة:

  1. ssh testhost

يمكنك أيضًا استخدام البدائل الشاملة لتطابق أكثر من مضيف. تذكر أن التطابقات اللاحقة يمكن أن تتجاوز السابقة. بسبب هذا، يجب وضع التطابقات العامة الخاصة بك في الجزء العلوي. على سبيل المثال، يمكنك تعيين افتراضيًا عدم السماح بالتوجيه X لجميع الاتصالات، مع تجاوز لـ your_domain عن طريق وضع هذا في ملفك:

~/.ssh/config
Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

احفظ وأغلق الملف عند الانتهاء.

الحفاظ على الاتصالات نشطة لتجنب انقطاع الاتصال

إذا وجدت نفسك تفصل عن جلسات SSH قبل أن تكون جاهزًا، فمن الممكن أن يتم إنهاء اتصالك تلقائيًا.

يمكنك تكوين عميلك لإرسال باكت إلى الخادم كل فترة معينة لتجنب هذا الوضع:

على جهاز الكمبيوتر المحلي، يمكنك تكوين هذا لكل اتصال عن طريق تحرير ملف ~/.ssh/config. افتحه الآن:

  1. nano ~/.ssh/config

إذا لم يكن موجودًا بالفعل ، في أعلى الملف ، قم بتعريف قسم سيتطابق مع جميع المضيفين. ضع ServerAliveInterval إلى “120” لإرسال حزمة إلى الخادم كل دقيقتين. يجب أن يكون هذا كافيًا لإعلام الخادم بعدم إغلاق الاتصال:

~/.ssh/config
Host *
    ServerAliveInterval 120

احفظ وأغلق الملف عند الانتهاء من التعديل.

تعطيل فحص المضيف

بشكل افتراضي ، في كل مرة تقوم فيها بالاتصال بخادم جديد ، سيتم عرض بصمة مفتاح مضيف ديمون SSH البعيد.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

يتم تكوين هذا لتتمكن من التحقق من أصالة الخادم الذي تحاول الاتصال به ورصد الحالات التي قد يحاول فيها مستخدم شرير التنكر كمضيف بعيد.

في ظروف معينة ، قد ترغب في تعطيل هذه الميزة. ملحوظة: يمكن أن يكون هذا مخاطر أمنية كبيرة ، لذا تأكد من أنك تعرف ما تفعله إذا قمت بإعداد نظامك بهذه الطريقة.

لإجراء التغيير ، قم بفتح الملف ~/.ssh/config على جهاز الكمبيوتر المحلي:

  1. nano ~/.ssh/config

إذا لم يكن موجودًا بالفعل ، في أعلى الملف ، قم بتعريف قسم سيتطابق مع جميع المضيفين. ضبط الإرشاد StrictHostKeyChecking على no لإضافة مضيفين جدد تلقائيًا إلى ملف known_hosts. ضبط UserKnownHostsFile على /dev/null لعدم التحذير في حالة ظهور مضيفين جدد أو تغييرهم:

~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

يمكنك تمكين التحقق حالةً بحالةٍ عن طريق عكس تلك الخيارات للمضيفين الآخرين. الافتراضي لـ StrictHostKeyChecking هو ask:

~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName your_domain
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

التضاعف عبر SSH عبر اتصال TCP واحد

هناك حالات يمكن فيها أن يستغرق إنشاء اتصال TCP جديد وقتًا أطول مما ترغب فيه. إذا كنت تقوم بإجراء اتصالات متعددة بنفس الجهاز، فيمكنك الاستفادة من التضاعف.

يُعيد تضاعف SSH استخدام نفس الاتصال TCP لجلسات SSH متعددة. يزيل هذا بعض العمل اللازم لإنشاء جلسة جديدة، مما قد يسرّع الأمور. قد يكون تقييد عدد الاتصالات مفيدًا أيضًا لأسباب أخرى.

لإعداد التضاعف، يمكنك إعداد الاتصالات يدويًا، أو يمكنك تكوين عميلك لاستخدام التضاعف تلقائيًا عندما يتوفر. سنقدم الخيار الثاني هنا.

لتكوين التضاعف، قم بتحرير ملف تكوين عميل SSH على جهازك المحلي:

  1. nano ~/.ssh/config

إذا لم يكن لديك بالفعل تعريف مضيف بالنجمة في أعلى الملف، أضف واحدًا الآن (كـ Host *). سنقوم بتعيين القيم ControlMaster، ControlPath، و ControlPersist لتأسيس تكويننا للتضاعف.

يجب تعيين ControlMaster إلى “auto” للسماح تلقائيًا بتعدد القنوات إذا كان ذلك ممكنًا. سيقوم ControlPath بتحديد مسار المأخذ التحكم. ستقوم الجلسة الأولى بإنشاء هذا المأخذ وستكون الجلسات التالية قادرة على العثور عليه لأنه يتم وسمه بواسطة اسم المستخدم والمضيف والمنفذ.

تعيين خيار ControlPersist إلى 1 سيسمح بخلفية الاتصال الرئيسي الأولي. القيمة 1 تحدد أن الاتصال TCP يجب أن ينتهي تلقائيًا بعد ثانية واحدة من إغلاق آخر جلسة SSH:

/.ssh/config
Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

قم بحفظ وإغلاق الملف عند الانتهاء. الآن، نحتاج إلى إنشاء المجلد الذي حددناه في مسار التحكم:

  1. mkdir ~/.ssh/multiplex

الآن، ستحاول أي جلسات تُنشأ مع نفس الجهاز استخدام المأخذ والاتصال TCP الحالي. عندما تنتهي آخر جلسة، سيتم إيقاف الاتصال بعد ثانية واحدة.

إذا كان هناك سبب ما تحتاج إلى تجاوز تكوين التعدد مؤقتًا، يمكنك فعل ذلك عن طريق تمرير العلامة -S مع none:

  1. ssh -S none username@remote_host

إعداد أنفاق SSH

إنشاء نفق SSH آمن لتوجيه حركة المرور الأخرى هو طريقة ممتازة للتغلب على إعدادات جدار الحماية القيدية. إنها أيضًا طريقة رائعة لتشفير حركة المرور عبر الشبكة غير المشفرة.

تكوين النفق المحلي إلى خادم

يمكن استخدام اتصالات SSH لتوجيه حركة المرور من منافذ على المضيف المحلي إلى منافذ على مضيف بعيد.

A local connection is a way of accessing a network location from your local computer through your remote host. First, an SSH connection is established to your remote host. On the remote server, a connection is made to an external (or internal) network address provided by the user and traffic to this location is tunneled to your local computer on a specified port.

يُستخدم هذا غالبًا لإنشاء نفق إلى بيئة شبكية أقل قيودًا من خلال تجاوز جدار الحماية. واستخدام آخر شائع هو الوصول إلى واجهة ويب “localhost-only” من موقع بعيد.

لإنشاء نفق محلي إلى خادمك عن بُعد ، تحتاج إلى استخدام المعلمة -L عند الاتصال ويجب أن تقدم ثلاث قطع إضافية من المعلومات:

  • المنفذ المحلي الذي ترغب في الوصول إلى الاتصال المُنفذ من خلاله.
  • المضيف الذي ترغب في أن يتصل به مضيفك البعيد.
  • المنفذ الذي ترغب في أن يتصل به مضيفك البعيد عليه.

تُعطى هذه المعلومات ، بالترتيب أعلاه (مفصولة بواسطة نقاط وظيفية) ، كوسائط لعلم -L. سنستخدم أيضًا علم -f ، الذي يجعل SSH يدخل إلى الخلفية قبل التنفيذ والعلم -N ، الذي لا يفتح قشرة أو ينفذ برنامجًا على الجانب البعيد.

على سبيل المثال ، للاتصال بـ your_domain على المنفذ 80 على مضيفك البعيد ، مما يجعل الاتصال متاحًا على جهازك المحلي على المنفذ 8888 ، يمكنك كتابة:

  1. ssh -f -N -L 8888:your_domain:80 username@remote_host

الآن ، إذا قمت بتوجيه متصفح الويب المحلي إلى 127.0.0.1:8888 ، يجب أن ترى أي محتوى موجود في your_domain على المنفذ 80.

A more general guide to the syntax is:

  1. ssh -L your_port:site_or_IP_to_access:site_port username@host

منذ الاتصال في الخلفية، ستحتاج إلى العثور على مُعرف العملية الخاصة به لإنهائه. يمكنك القيام بذلك عن طريق البحث عن المنفذ الذي قمت بتوجيهه:

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

يمكنك بعد ذلك إنهاء العملية عن طريق استهداف مُعرف العملية (PID)، والذي هو الرقم في العمود الثاني من السطر الذي يتطابق مع أمر SSH الخاص بك:

  1. kill 5965

خيار آخر هو بدء الاتصال بدون استخدام العلم -f. سيبقي هذا الاتصال في الأمامية، مما يمنعك من استخدام نافذة الطرفية لمدة التوجيه. الفائدة من ذلك هي أنه يمكنك بسهولة إنهاء النفق عن طريق كتابة CTRL-C.

تكوين التوجيه عن بعد إلى خادم

يمكن استخدام اتصالات SSH لتوجيه حركة المرور من منافذ على المضيف المحلي إلى منافذ على مضيف بعيد.

في نفق بعيد، يتم إنشاء اتصال بمضيف بعيد. خلال إنشاء النفق، يتم تحديد منفذ بعيد. ثم يتم توجيه هذا المنفذ، على المضيف البعيد، إلى تركيبة مضيف ومنفذ متصل بها من الكمبيوتر المحلي. سيسمح هذا للكمبيوتر البعيد بالوصول إلى المضيف من خلال الكمبيوتر المحلي الخاص بك.

يمكن أن يكون ذلك مفيدًا إذا كنت بحاجة إلى السماح بالوصول إلى شبكة داخلية مقفلة على الاتصالات الخارجية. إذا سمحت جدار الحماية بالاتصالات من الشبكة، فسيتيح لك هذا الاتصال بجهاز بعيد وتوجيه حركة المرور من تلك الجهاز إلى موقع في الشبكة الداخلية.

لإنشاء نفق بعيد إلى الخادم البعيد الخاص بك، تحتاج إلى استخدام المعلمة -R عند الاتصال ويجب عليك تزويد ثلاث معلومات إضافية:

  • المنفذ الذي يمكن للمضيف البعيد الوصول إليه للاتصال بالنفق.
  • المضيف الذي ترغب في أن يتصل جهاز الكمبيوتر المحلي بك.
  • المنفذ الذي ترغب في أن يتصل جهاز الكمبيوتر المحلي به.

تُعطى هذه، بالترتيب أعلاه (مفصولة بواسطة نقاط الفاصلة)، كمُعطيات لعلم الرايات -R. سنستخدم أيضًا الراية -f، التي تُسبب لـ SSH الدخول إلى الخلفية قبل التنفيذ، والراية -N، التي لا تفتح قشرة أو تنفذ برنامجًا على الجانب البعيد.

على سبيل المثال، للاتصال بـ your_domain على المنفذ 80 على جهاز الكمبيوتر المحلي الخاص بنا، مما يجعل الاتصال متاحًا على مضيفنا البعيد على المنفذ 8888، يمكنك كتابة:

  1. ssh -f -N -R 8888:your_domain:80 username@remote_host

الآن، على المضيف البعيد، بافتتاح متصفح ويب على 127.0.0.1:8888 سيتيح لك رؤية أي محتوى يتواجد عنوانه في your_domain على المنفذ 80.

A more general guide to the syntax is:

  1. ssh -R remote_port:site_or_IP_to_access:site_port username@host

نظرًا لأن الاتصال في الخلفية، عليك أن تجد مُعرِّف العملية الخاص به لقتله. يمكنك القيام بذلك عن طريق البحث عن المنفذ الذي قمت بتوجيهه:

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -R 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

ثم يمكنك قتل العملية عن طريق استهداف مُعرّف العملية، وهو الرقم في العمود الثاني، للسطر الذي يتطابق مع أمر SSH الخاص بك:

  1. kill 5965

خيار آخر هو بدء الاتصال بدون استخدام علامة -f. سيحافظ هذا على الاتصال في الخلفية، مما يمنعك من استخدام نافذة الطرفية أثناء التوجيه. الفائدة من هذا هي أنه يمكنك بسهولة إيقاف التونيل عن طريق كتابة CTRL-C.

تكوين التوجيه الديناميكي إلى خادم بعيد

يمكن استخدام اتصالات SSH لتوجيه حركة المرور من منافذ على المضيف المحلي إلى منافذ على المضيف البعيد.

A dynamic tunnel is similar to a local tunnel in that it allows the local computer to connect to other resources through a remote host. A dynamic tunnel does this by simply specifying a single local port. Applications that wish to take advantage of this port for tunneling must be able to communicate using the SOCKS protocol so that the packets can be correctly redirected at the other side of the tunnel.

سيتم إرسال حركة المرور التي تم تمريرها إلى هذا المنفذ المحلي إلى المضيف البعيد. من هناك، سيتم تفسير بروتوكول SOCKS لإنشاء اتصال بالموقع النهائي المرغوب. يتيح هذا الإعداد لتطبيق قادر على SOCKS الاتصال بأي عدد من المواقع عبر الخادم البعيد، دون توجهات ثابتة متعددة.

لإنشاء الاتصال، سنمرر العلامة -D بالإضافة إلى المنفذ المحلي الذي نرغب في الوصول إلى التونيل من خلاله. سنستخدم أيضًا العلامة -f، التي تجعل SSH يدخل في الخلفية قبل التنفيذ، والعلامة -N، التي لا تفتح شاشة أو تنفذ برنامجًا على الجانب البعيد.

على سبيل المثال، لإنشاء تونيل على المنفذ 7777، يمكنك كتابة:

  1. ssh -f -N -D 7777 username@remote_host

من هنا، يمكنك البدء في توجيه تطبيقك الذي يدعم SOCKS (مثل متصفح الويب) إلى المنفذ الذي اخترته. سيقوم التطبيق بإرسال معلوماته إلى مأخذ مرتبط بالمنفذ.

طريقة توجيه حركة المرور إلى منفذ SOCKS ستختلف اعتمادًا على التطبيق. على سبيل المثال، في متصفح Firefox، المكان العام هو التفضيلات > متقدم > الإعدادات > تكوينات البروكسي اليدوية. في Chrome، يمكنك بدء التطبيق بمعلمة --proxy-server= معينة. سترغب في استخدام واجهة localhost والمنفذ الذي قمت بتوجيهه.

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

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -D 7777 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

ثم يمكنك إيقاف العملية بالتوجيه إلى مُعرّف العملية، والذي هو الرقم في العمود الثاني، من السطر الذي يتطابق مع أمر SSH الخاص بك:

  1. kill 5965

خيار آخر هو بدء الاتصال بدون العلم -f. سيُبقي هذا الاتصال في المقدمة، مما يمنعك من استخدام نافذة الطرفية خلال فترة التوجيه. الفائدة من ذلك هو أنه يمكنك بسهولة إيقاف النفق بكتابة CTRL-C.

استخدام أكواد هروب SSH للتحكم في الاتصالات

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

فرض فصل من الجانب العميل (كيفية الخروج من جلسة متجمدة أو معلقة)

أحد أكثر الميزات المفيدة لـ OpenSSH التي تمر عادة دون إشعار هي القدرة على التحكم في جوانب معينة من الجلسة من الداخل.

يمكن تنفيذ هذه الأوامر بدءًا من الحرف التحكمي ~ داخل جلسة SSH. ستتم تفسير أوامر التحكم فقط إذا كانت أول ما يُكتب بعد سطر جديد، لذا اضغط دائمًا على مفتاح ENTER مرة واحدة أو مرتين قبل استخدامها.

أحد أكثر عناصر التحكم فائدة هو القدرة على بدء فصل من العميل. يتم غالبًا إغلاق اتصالات SSH من قبل الخادم، ولكن يمكن أن يكون هذا مشكلة إذا كان الخادم يعاني من مشاكل أو إذا تم فصل الاتصال. من خلال استخدام فصل من الجانب العميل، يمكن إغلاق الاتصال بشكل نظيف من العميل.

لإغلاق الاتصال من العميل، استخدم الحرف التحكمي (~) مع نقطة. إذا كان اتصالك يعاني من مشاكل، فمن المحتمل أن تكون في ما يبدو جلسة تحكم معلقة. اكتب الأوامر على الرغم من عدم وجود تغذية راجعة لتنفيذ فصل من الجانب العميل:

  1. [ENTER]
  2. ~.

يجب أن يتم إغلاق الاتصال على الفور، مما يعيدك إلى جلسة الطرف المحلي.

وضع جلسة SSH في الخلفية

واحدة من أكثر الميزات المفيدة لـ OpenSSH التي تمر دون أن يلاحظها الكثيرون هي القدرة على التحكم في جوانب معينة من الجلسة من داخل الاتصال.

يمكن تنفيذ هذه الأوامر ابتداءً من الحرف التحكمي ~ داخل اتصال SSH. ستتم تفسير الأوامر التحكمية فقط إذا كانت هي أول شيء يُكتب بعد سطر جديد، لذا يجب دائمًا الضغط على ENTER مرة أو مرتين قبل استخدام واحدة.

إحدى القدرات التي يوفرها ذلك هي وضع جلسة SSH في الخلفية. للقيام بذلك، نحتاج إلى توفير الحرف التحكمي (~) ثم تنفيذ اختصار لوحة المفاتيح التقليدي لتخليف مهمة (CTRL-z):

  1. [ENTER]
  2. ~[CTRL-z]

سيضع هذا الأمر الاتصال في الخلفية، مما يعيدك إلى جلسة الشل المحلية الخاصة بك. للعودة إلى جلسة SSH الخاصة بك، يمكنك استخدام آليات التحكم في المهام التقليدية.

يمكنك إعادة تنشيط مهمتك التي تم وضعها في الخلفية مؤخرًا على الفور عن طريق كتابة:

  1. fg

إذا كان لديك عدة مهام في الخلفية، يمكنك رؤية المهام المتاحة عن طريق كتابة:

  1. jobs
Output
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host

ثم يمكنك جلب أي من المهام إلى الأمام باستخدام الفهرس في العمود الأول مع علامة النسبة المئوية:

  1. fg %2

تغيير خيارات توجيه المنفذ في اتصال SSH قائم

واحدة من أكثر الميزات المفيدة في OpenSSH التي تذهب دون أن يلفت الكثير من الانتباه هي القدرة على التحكم في بعض جوانب الجلسة من داخل الاتصال.

يمكن تنفيذ هذه الأوامر باستخدام الرمز التحكمي ~ من داخل اتصال SSH. سيتم تفسير أوامر التحكم فقط إذا كانت أول شيء يتم كتابته بعد سطر جديد ، لذا دائمًا اضغط على ENTER مرة أو مرتين قبل استخدام واحدة.

إحدى الأشياء التي يسمح بها هذا هي تغيير تكوين توجيه المنفذ بعد تأسيس الاتصال بالفعل. يتيح لك هذا إنشاء أو إلغاء قواعد توجيه المنفذ على الطاير.

هذه القدرات جزء من واجهة سطر الأوامر لـ SSH ، والتي يمكن الوصول إليها أثناء الجلسة باستخدام الرمز التحكمي (~) و “C”:

  1. [ENTER]
  2. ~C
ssh>

سيتم منحك موجه أوامر SSH ، الذي يحتوي على مجموعة محدودة جدًا من الأوامر الصالحة. لرؤية الخيارات المتاحة ، يمكنك كتابة -h من هذا الموجه. إذا لم يتم إرجاع أي شيء ، قد تحتاج إلى زيادة وضوح إخراج SSH الخاص بك باستخدام ~v عدة مرات:

  1. [ENTER]
  2. ~v
  3. ~v
  4. ~v
  5. ~C
  6. -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward

كما يمكنك أن ترى، يمكنك بسهولة تنفيذ أي من خيارات الإعادة التوجيه باستخدام الخيارات المناسبة (انظر قسم الإعادة التوجيه لمزيد من المعلومات). يمكنك أيضًا إيقاف تشغيل النفق بالأمر “kill” المرتبط مع حرف النوع المرسل مع “K” قبل الحرف. على سبيل المثال، لإيقاف تشغيل الإعادة التوجيه المحلية (-L)، يمكنك استخدام الأمر -KL. ستحتاج فقط إلى تقديم المنفذ لذلك.

لذلك، لإعداد إعادة توجيه محلية للمنفذ، يمكنك كتابة:

  1. [ENTER]
  2. ~C
  3. -L 8888:127.0.0.1:80

الآن ستتمكن منفذ 8888 على جهاز الكمبيوتر المحلي من التواصل مع خادم الويب على الجهاز الذي تقوم بالاتصال به. عند الانتهاء، يمكنك تفكيك هذا التوجيه بكتابة:

  1. [ENTER]
  2. ~C
  3. -KL 8888

الختام

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

Source:
https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys