الوحدة 3 · التعاون على GitHub
المصادقة بمفاتيح SSH أو HTTPS
14 دقراءة 4 درتّب الخطوات
الدرس في لمحة
أعِدّ مصادقة Git مع GitHub عبر HTTPS باستخدام مدير بيانات اعتماد أو عبر SSH بمفتاح ed25519، واختبر الاتصال، وبدّل عنوان الـ remote بين الصيغتين.
- 1البروتوكولان
- 2الخيار الأول: HTTPS مع مدير بيانات اعتماد
- 3الخيار الثاني: مفاتيح SSH
- 4توجيه الـ remote إلى البروتوكول الصحيح
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
طلب منك أول git push اسم مستخدم وكلمة مرور. يحتاج GitHub إلى دليل على أن من يرفع إلى maya-okafor/portfolio هي Maya فعلًا. ولن يقبل كلمة مرور حسابك لهذا الغرض؛ فقد توقّف عن ذلك منذ 2021، حين نقل عمليات Git إلى بيانات اعتماد أقوى. لديك خياران جيدان، وتُعدّ أيًّا منهما مرة واحدة فقط لكل حاسوب.
البروتوكولان
عنوان الـ remote يحدّد كيف يتحدّث Git مع GitHub:
https://github.com/maya-okafor/portfolio.git HTTPS
git@github.com:maya-okafor/portfolio.git SSHHTTPS يصادق بـ token. ويحصل مدير بيانات الاعتماد على واحد بإرسالك عبر تسجيل الدخول العادي إلى GitHub في المتصفّح (بما في ذلك المصادقة الثنائية)، ثم يخزّنه في المخزن الآمن لنظامك. أما SSH فيصادق بزوج مفاتيح تولّده أنت؛ يخزّن GitHub النصف العام ويتحقّق من أنك تملك النصف الخاص.
أيهما تختار؟ HTTPS مع مدير بيانات اعتماد هو الأسهل إعدادًا ويعمل على أي شبكة تسمح بتصفّح الويب. أما SSH فيأخذ خمس دقائق إضافية، ولا تنتهي صلاحية مفتاحه (يحذف GitHub المفتاح فقط إن بقي عامًا كاملًا دون استخدام)، وهو ما يستخدمه كثير من المطوّرين يوميًا. وكلاهما آمن بالقدر نفسه حين يُعدّ كما يجب. إن كنت مترددًا فابدأ بـ HTTPS؛ وتستطيع التبديل في أي وقت.
الخيار الأول: HTTPS مع مدير بيانات اعتماد
يأتي Git Credential Manager (GCM) مع Git for Windows. وعلى macOS ثبّته بـ Homebrew (brew install --cask git-credential-manager)؛ وعلى Linux اتبع دليل التثبيت في صفحته على GitHub. في المرة التالية التي يحتاج فيها Git إلى بيانات اعتماد، تُفتح نافذة متصفّح، فتسجّل دخولك إلى GitHub وتوافق، ويخزّن GCM الـ token. ولن يُطلب منك ذلك مرة أخرى.
وإن كنت قد ثبّت GitHub CLI، فبإمكانه القيام بالمهمّة نفسها:
gh auth loginاختر GitHub.com ثم HTTPS، وأجب بنعم عن “Authenticate Git with your GitHub credentials?”. يسجّل دخولك عبر المتصفّح ويضبط Git ليستخدمه كمساعد بيانات اعتماد (credential helper).
البديل اليدوي هو personal access token (رمز وصول شخصي): أنشئ واحدًا من Settings ثم Developer settings، والصقه حيث يطلب Git كلمة المرور. هذا ينجح، لكن عليك أن تدير انتهاء صلاحيته وتخزينه بنفسك، لذا فضّل مدير بيانات الاعتماد على جهازك الشخصي، واحتفظ بالـ tokens للأتمتة.
الخيار الثاني: مفاتيح SSH
ولّد زوج مفاتيح. Ed25519 هو الخيار الافتراضي الحديث:
ssh-keygen -t ed25519 -C "maya.okafor@example.com"اضغط Enter لقبول المكان الافتراضي، ثم اضبط عبارة مرور (passphrase). عبارة المرور تحمي المفتاح الخاص إن سُرق حاسوبك يومًا. والتعليق بعد -C اسم يساعدك على التعرّف على المفتاح لاحقًا.
لديك الآن ملفان:
~/.ssh/id_ed25519، وهو المفتاح الخاص. لا يغادر هذا الجهاز أبدًا.~/.ssh/id_ed25519.pub، وهو المفتاح العام. آمن للمشاركة؛ وهو ما يحصل عليه GitHub.
حمّل المفتاح في الـ SSH agent لتكتب عبارة المرور مرة واحدة في كل جلسة، لا مع كل رفع:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519على macOS، الأمر ssh-add --apple-use-keychain ~/.ssh/id_ed25519 يخزّن عبارة المرور في Keychain؛ ويعرض دليل GitHub أسطر ~/.ssh/config المقابلة. ثم انسخ المفتاح العام (pbcopy < ~/.ssh/id_ed25519.pub على macOS، أو افتح الملف وانسخ سطره الوحيد)، وعلى GitHub اذهب إلى Settings ثم SSH and GPG keys ثم New SSH key، والصقه.
اختبر الاتصال:
ssh -T git@github.comفي المرة الأولى، يطلب منك SSH تأكيد البصمة (fingerprint) الخاصة بخادم GitHub؛ قارنها بالبصمات التي ينشرها GitHub في وثائقه قبل أن تكتب yes. والنجاح يبدو هكذا:
Hi maya-okafor! You've successfully authenticated, but GitHub does not provide shell access.سطر “does not provide shell access” طبيعي؛ فأنت لا تسجّل الدخول إلى خادم، بل تثبت هويتك فقط.
توجيه الـ remote إلى البروتوكول الصحيح
المصادقة تتبع العنوان. إن أعددت SSH لكنك استنسخت عبر HTTPS، يواصل Git استخدام HTTPS. تحقّق وبدّل:
git remote -v
git remote set-url origin git@github.com:maya-okafor/portfolio.git
git pushوالاتجاه المعاكس هو الأمر نفسه مع عنوان https://.
بعد حلّ مسألة الرفع، تستطيع أن تبدأ العمل كما تعمل الفرق على GitHub: عبر الـ pull requests.
أهم النقاط
- لا يقبل GitHub كلمة مرور حسابك في عمليات Git؛ استخدم مدير بيانات اعتماد، أو personal access token، أو مفتاح SSH.
- يسجّل Git Credential Manager (أو
gh auth login) دخولك عبر المتصفّح مرة واحدة ويخزّن بيانات الاعتماد بأمان. - زوج مفاتيح SSH له نصف خاص لا يغادر جهازك أبدًا، ونصف عام بامتداد
.pubتضيفه إلى GitHub. ssh -T git@github.comيختبر مصادقة SSH ويرحّب بك باسم المستخدم حين تنجح.- عنوان الـ remote يحدّد البروتوكول:
https://github.com/…يستخدم HTTPS، وgit@github.com:…يستخدم SSH؛ وتبدّل بينهما بـgit remote set-url.