ملاحظة: هذا الشرح مفيد كذلك في ربط الجهاز المحلي عن طريق SSH بموقع GitHub وليس خاصًا بالربط مع السيرفر فقط.

كنت أستخدم في مشروع برنامج FileZilla لنقل الملفات من وإلى السيرفر. وبما أن المشروع الذي كنت أعمل عليه مشروع لارافل مع مبرمجين آخرين، وفيه العديد من المجلدات فلم أكن أعلم أي الملفات التي عدّلت عليها، فكنت أضطر إلى رفع جميع الملفات أحيانًا وهذا يستغرق وقتًا كبيرًا. إضافة إلى عدم القدرة على تنفيذ أفضل الممارسات للتعامل مع GitHub كالطريقة الشهيرة: git-flow.

ولا يخفى على أي مبرمج أهمية git وأن يكون مسار العمل مبنيًا عليها، وليس على النقل التقليدي عبر برامج الـ ftp مثل FileZilla.

والآن إلى الطريقة..

  1. تنزيل git على السيرفر. أو التأكد من ذلك عن طريق الأمر git --version فسنجد النتيجة لرقم الإصدار في جهازك، وقد يختلف بحسب النسخة المنزّلة
git version 2.36.1
  1. إكمال إعداد الاسم لـ git عن طريق أمر التالي، حيث تستبدل YOUR NAME باسمك أو الاسم الذي تريده
git config --global user.name "YOUR NAME"

وللتأكد من صحة الأمر اكتب في سطر الأوامر git config user.name لتجد الاسم الذي كتبته آنفًا.

  1. إكمال إعدادات البريد الإلكتروني لـ git عن طريق الأمر التالي، حيث تستبدل YOUR EMAIL ببريدك الإلكتروني.
git config --global  user.email "YOUR EMAIL"

وكما في اسم git، يمكنك التأكد من صحة الأمر اكتب في سطر الأوامر git config user.email لتجد البريد الإلكتروني الذي كتبته.

  1. إضافة أمر توليد مفتاح SSH لنقله لاحقًا إلى مستودع GitHub. هذا الأمر سينتقل بك إلى مجلد المفاتيح المولّدة وينشئ مفتاحًا جديدًا. يمكنك كتابة بريدك الإلكتروني أو تركه كما هو فلا يؤثر.
cd ~/.ssh && ssh-keygen -t ecdsa -b 521 -C "your_email@example.com"

ستظهر لك أسئلة على سطر الأوامر لإدخال ال passphrase

Enter passphrase (empty for no passphrase):

يمكنك النقر على Enter لتجاوز إضافة passphrase. وفي بعض الأحيان لا ينجح ربط المستودع البرمجي إلا بإضافة ال passphrase.

  1. نسخ المفتاح ال public الذي تم توليده، للصقه لاحقًا إلى مستودع GitHub ال private عن طريق الأمر التالي لعرضه على شاشة سطر الأوامر cat id_rsa.pub ثم نسخ النص المعروض بالفأرة أو أي طريقة تريدها.
  1. افتح قائمة setting في المستودع الذي تريد ربطه مع السيرفر، ثم النقر على Deploy Keys كما هو موضع في الصورة أدناه. لقد أنشأت مستودعًا خاصًا تجريبيًا وأسميته

فتح إعدادات جت هب للوصول إلى Deploy Keys
فتح إعدادات جت هب للوصول إلى Deploy Keys
.

  1. الآن انقر على رز Add Deploy Key لإضافة المفتاح الذي نسخته، كما هو موضّح بالصورة أدناه.

فتح صفحة Deploy Keys
فتح صفحة Deploy Keys
.

  1. أدخل في خانة الاسم أي اسم تريده من أجل تذكّر هذا المفتاح. من الجيد أن تضيف اسمًا معبّرًا لكي لا يختلط عليك الأمر عند تعدّد المفاتيح.

وفي خانة Key ألصق نص الكود الذي نسخته من السيرفر.

ولا تنس أن تحدد على Allow Write Access إذا كنت تريد إمكانية التعديل من السيرفر إلى المستودع البرمجي، وليس فقط سحب آخر التغييرات. قد يطلب منك GitHub تأكيد حسابك، فهنا تدخل كلمة السر للاستمرار.

إدخال المفتاح
إدخال المفتاح
.

  1. ادخل للصفحة الرئيسية للمستودع البرمجي وانقر على الزر Code لكي ترى قائمة النسخ، وانسخ منها الرابط تحت تبويب SSH.

نسخ رابط SSH
نسخ رابط SSH
.

  1. ارجع إلى السيرفر وأنشئ مجلدًا مخصصًا لمشروعك، ثم نفذ الأمر حيث تستبدل YOUR COPIED SSH LINK بالرابط الذي نسخته
git clone YOUR COPIED SSH LINK

قد تجد هذه المشكلة

ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

عليك حينها إضافة الأمر التالي لحل هذه المشكلة:

eval `ssh-agent` -s;
ssh-add ~/.ssh/id_rsa

وبعدها تنفذ git clone دون مشاكل.

بعد تنفيذ الأمر بنجاح صار ربط السيرفر بمستودع GitHub عن طريق SSH جاهزًا.

مصادر مفيدة

ملاحظات

  • هذه الأوامر تنطبق على المستودعات الخاصة (private repositories) أما المستودعات العامة فلا تحتاج كل هذا. يمكنك تنزيلها والتعامل معها مباشرة دون أي تعقيدات.
  • جرّبت هذا الدرس على GitHub، وجربت شيئًا قريبًا منه على GitLab وأظن أن الفكرة نفسها تقريبًا تنطبق على GitLab و Bitbucket.

شكر وتقدير

  • طريف مندو الذي أرسل لي رابط Stack Overflow وكان بداية حل المشكلة.
  • معاذ السوادي الذي ساعدني في حل المشكلة منذ البداية إلى النهاية.
  • محمود عبدربه الذي أتاح لي تجربة بعض الأمور على السيرفر الخاص به.

إضافة من الصديق طريف

وأشكره هنا مرة أخرى على هذه المشاركة المفيدة

معلومة إضافية أن مفتاح ال ssh قد يفضل البعض توليده على الجهاز المحلي ثم الدخول إلى ssh مع البرامتر -A

ssh -A tareef@server.com

الخيار -A سيرسل نسخة من المفتاح إلى جلسة ال ssh

بهذه الطريقة في حال تمكن أحد من الدخول الى السيرفر تهكيرًا، فلن يكون تحت يديه مفتاحك السري الذي يمكن استخدامه لإرسال commit خبيث إلى الكود على gitlab

تعلمت هذه النصيحة فقط مؤخرًا وأحببت مشاركتها معك

أخيرًا

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