إذا كنت قد اشتريت اسضافة ما مثل shared hosting أو VPS وأردت التحكم بهذا السيرفر, فلربما تساءلت عن آلية الإتصال به للتمكن من تنفيذ بعض الأوامر وتشغيل مشروعك الرائع عليه, إن كنت تردد في ذهنك وتقول ssh, نعم يا صديقي صدقت.
في البداية دعنا نوضح ما هو الـ SSH ؟
هو بروتوكول يعمل على فتح اتصال بين جهتين client/server على الشبكة, وهو اختصار ل secure socket shell أو secure shell, والذي يقوم به فعلياً هو فتح اتصال مشفّر بينك وبين السيرفر, وهذا هو الذي يميّزه عن غيره من البروتوكولات مثل telnet حيث أن الأخير لا يشفّر الاتصال بل يتركها بحري 😂.
ومن الجيد معرفة العالم الذي قام بتصميم ال SSH وهو تاتو أولونن (Tatu Ylönen) في عام 1995 كإصدار أولي SSH-1, وأصبح SSH-1 بعدها deprecated, وتم إصدار version جديد SSH-2 وهو الذي يُستخدم حالياً.
والذي نحن بصدد الاطلاع عليه هو كيفية الاتصال بهذا السيرفر عملياً, في البداية يجب أن تعلم أن هناك عدة طرق للاتصال من خلال SSH:
- من خلال password, وهي الطريقة التقليدية والأقل أماناً عن غيرها, لانه ما أن يحصل أحدهم على كلمة المرور حتى يصبح مخوّلاً بالدخول الى السيرفر.
- من خلال Key-Hosted ويتم من خلال إنشاء private key و public key, ومن ثم تقوم بتمرير الـ private key الى السيرفر لغاية المصادقة authentication, وهي ما تسمى بال symmetric encryption, وعلى هذا يتم فتح الاتصال المشفّر, فيتم تشفير الرسائل بينك وبين السيرفر من خلال الـ public key, ويتم فك التشفير من خلال private key وهذا ما يسمى بال asymmetric encryption.
- الطريقة الثالثة هي عبارة عن دمج الطريقتين السابقتين معاً, بحيث نستخدم ال key-hosted وعليها passphrase.
دعنا الآن نبدأ 👉:
بدايةً سوف نقوم بانشاء ال key pairs, وهو ال private/public keys وذلك من خلال tool تسمى ssh-keygen, سوف نقوم بهذا من خلال command line, وإذا أردت الإنشاء عن طريق GUI, لن أقف في دربك هناك برنامج إسمه puttygen قم بتحميله واعمل generate.
قم بكتابة هذا الأمر في command line :
ssh-keygen
هذا الأمر سيقوم بالانشاء الـ keys مع البيانات الافتراضية, ولكن إذا أردت إحداث بعض التعديلات عليه مثل إسم الـ keys ونوع الخوارزمية المستخدمة, فدعنا نتحدث عن ذلك :
ssh-keygen –f your-path-to-ssh-file
نستخدم ال (f-) لتحديد مسار الملف مع إسمه :
في نظام windows :
ssh-keygen –f C:\Users\yazan\new_ssh_key
وفي Linux :
ssh-keygen –f ~/.ssh/new_ssh_key
ويمكنك استخدام خيار (t-) لتغيير الخوارزمية الافتراضية والتي هي (rsa) الى خوارزمية أخرى, أو التحكم بحجم ال bytes في ال keys من خلال خيار (b-).
نقوم الآن بالذهاب الى السيرفر المراد الاتصال به و التعديل على الملف التالي من خلال nano :
nano ~/.ssh/authorized_keys
تقوم بإضافة محتوى ملف public key الذي أنشأناه منذ قليل والذي يحمل امتداد pub, وإضافته بداخل ملف authorized_keys وذلك لإخبار السيرفر أن يسمح بالاتصال لهذا ال key.
بعد هذه العملية لم يتبق الا القليل, نريد الآن أن تجعل السيرفر يبقى متمسكاً بال private key وال passphrase في حال أراد أن يعمل log in بشكل automatically على خدمات أخرى فلا يجبرك في كل مرة أن تقوم عمل مصادقة authentication, ويتم ذلك من خلال تشغيل ssh-agent إن كان لا يعمل تلقائيا عند تشغيل النظام الخاص بك, ومن بعدها اضافة الـ private key ليحتفظ به ويبقي النظر عليه 👀 :
eval “$(ssh-agent)”
ssh-add ~/.ssh/new_ssh_key
الان قمنا بتجهيز كل شيء, ما بقي الا اللمسات الأخيرة :
نقوم بذلك إما من خلال command line أو من خلال GUI مثل putty :
من خلال command line :
ssh username@ip-address –I path-to-your-private-key
نقوم بكتابة username والذي غالبا ما يكون ب root ما لم تقم بإضافة user آخر.
وخيار ال l- يستخدم فقط في حال اعتمدت طريقة key-hosted فتقوم بذكر مسار private-key file.
واذا كنت قد وضعت passphrase عليه, فإنه حتماً سيقوم بالمطالبة بها, فلا تبخل بها عليه.
الخلاصة مع مثال :
ال SSH من المواضيع المهمة التي يجب على التقنيين تعلمها وعدم إغفال ذكرها, لانها أولاً تشفّر البيانات وتحميها من قطّاع الطرق 🐱👤, ثانياً لأن أغلب شركات الاستضافة تدعمها بشكل أساسي للإتصال بالسيرفر.
من الأمثلة التي قد نحتاج بها الى ال ssh هي github, أحياناً قد نقوم بمشروع معين ونقوم بوضعه على github ك private repository ولا نريد أن نقوم بعمل دخول إلى حسابنا على جهاز معين, ولكن فقط إعطاء access لهذا ال repository من السيرفر, فكل ما علينا فعله هو عمل الخطوات السابقة: من إنشاء keys ووضع ال public key في authorized_keys وايضا عمل ssh-agent و ssh-add الذان تحدثنا عنهما في البداية, ولكن في حالة ال github يتبقى لدينا أمر واحد قبل الإتمام, وهو وضع محتوى الـ public key في حسابنا على github .
في حسابك على github, إذهب إلى الاعدادات settings واضغط على SSH and GPG keys :
الآن قم بعمل clone لل repository بالشكل الطبيعي (وطبعاً من ال host الخاص بال ssh الذي يوفره github) من هنا :