{"id":"l-git-3-2","courseId":"git-github","lang":"ar","kind":"lesson","summary":"أعِدّ مصادقة Git مع GitHub عبر HTTPS باستخدام مدير بيانات اعتماد أو عبر SSH بمفتاح ed25519، واختبر الاتصال، وبدّل عنوان الـ remote بين الصيغتين.","html":"<p>طلب منك أول <code dir=\"ltr\">git push</code> اسم مستخدم وكلمة مرور. يحتاج GitHub إلى دليل على أن من يرفع إلى <code dir=\"ltr\">maya-okafor/portfolio</code> هي Maya فعلًا. ولن يقبل كلمة مرور حسابك لهذا الغرض؛ فقد توقّف عن ذلك منذ 2021، حين نقل عمليات Git إلى بيانات اعتماد أقوى. لديك خياران جيدان، وتُعدّ أيًّا منهما مرة واحدة فقط لكل حاسوب.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">البروتوكولان</h2>\n<p>عنوان الـ remote يحدّد كيف يتحدّث Git مع GitHub:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"text\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Text</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code>https://github.com/maya-okafor/portfolio.git    HTTPS\ngit@github.com:maya-okafor/portfolio.git        SSH</code></pre></div>\n<p><strong>HTTPS</strong> يصادق بـ token. ويحصل مدير بيانات الاعتماد على واحد بإرسالك عبر تسجيل الدخول العادي إلى GitHub في المتصفّح (بما في ذلك المصادقة الثنائية)، ثم يخزّنه في المخزن الآمن لنظامك. أما <strong>SSH</strong> فيصادق بزوج مفاتيح تولّده أنت؛ يخزّن GitHub النصف العام ويتحقّق من أنك تملك النصف الخاص.</p>\n<p>أيهما تختار؟ HTTPS مع مدير بيانات اعتماد هو الأسهل إعدادًا ويعمل على أي شبكة تسمح بتصفّح الويب. أما SSH فيأخذ خمس دقائق إضافية، ولا تنتهي صلاحية مفتاحه (يحذف GitHub المفتاح فقط إن بقي عامًا كاملًا دون استخدام)، وهو ما يستخدمه كثير من المطوّرين يوميًا. وكلاهما آمن بالقدر نفسه حين يُعدّ كما يجب. إن كنت مترددًا فابدأ بـ HTTPS؛ وتستطيع التبديل في أي وقت.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">الخيار الأول: HTTPS مع مدير بيانات اعتماد</h2>\n<p>يأتي <strong>Git Credential Manager</strong> (GCM) مع Git for Windows. وعلى macOS ثبّته بـ Homebrew (<code dir=\"ltr\">brew install --cask git-credential-manager</code>)؛ وعلى Linux اتبع دليل التثبيت في صفحته على GitHub. في المرة التالية التي يحتاج فيها Git إلى بيانات اعتماد، تُفتح نافذة متصفّح، فتسجّل دخولك إلى GitHub وتوافق، ويخزّن GCM الـ token. ولن يُطلب منك ذلك مرة أخرى.</p>\n<p>وإن كنت قد ثبّت GitHub CLI، فبإمكانه القيام بالمهمّة نفسها:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">gh</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> auth</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> login</span></span></code></pre></div>\n<p>اختر GitHub.com ثم HTTPS، وأجب بنعم عن “Authenticate Git with your GitHub credentials?”. يسجّل دخولك عبر المتصفّح ويضبط Git ليستخدمه كمساعد بيانات اعتماد (credential helper).</p>\n<p>البديل اليدوي هو <strong>personal access token</strong> (رمز وصول شخصي): أنشئ واحدًا من Settings ثم Developer settings، والصقه حيث يطلب Git كلمة المرور. هذا ينجح، لكن عليك أن تدير انتهاء صلاحيته وتخزينه بنفسك، لذا فضّل مدير بيانات الاعتماد على جهازك الشخصي، واحتفظ بالـ tokens للأتمتة.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">الخيار الثاني: مفاتيح SSH</h2>\n<p>ولّد زوج مفاتيح. Ed25519 هو الخيار الافتراضي الحديث:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"2\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">ssh-keygen</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -t</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ed25519</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -C</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"maya.okafor@example.com\"</span></span></code></pre></div>\n<p>اضغط Enter لقبول المكان الافتراضي، ثم اضبط عبارة مرور (passphrase). عبارة المرور تحمي المفتاح الخاص إن سُرق حاسوبك يومًا. والتعليق بعد <code dir=\"ltr\">-C</code> اسم يساعدك على التعرّف على المفتاح لاحقًا.</p>\n<p>لديك الآن ملفان:</p>\n<ul>\n<li><code dir=\"ltr\">~/.ssh/id_ed25519</code>، وهو <strong>المفتاح الخاص</strong>. لا يغادر هذا الجهاز أبدًا.</li>\n<li><code dir=\"ltr\">~/.ssh/id_ed25519.pub</code>، وهو <strong>المفتاح العام</strong>. آمن للمشاركة؛ وهو ما يحصل عليه GitHub.</li>\n</ul>\n<p>حمّل المفتاح في الـ SSH agent لتكتب عبارة المرور مرة واحدة في كل جلسة، لا مع كل رفع:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"3\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">eval</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"$(</span><span style=\"color:#953800;--shiki-dark:#FFA657\">ssh-agent</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -s</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">)\"</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">ssh-add</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ~/.ssh/id_ed25519</span></span></code></pre></div>\n<p>على macOS، الأمر <code dir=\"ltr\">ssh-add --apple-use-keychain ~/.ssh/id_ed25519</code> يخزّن عبارة المرور في Keychain؛ ويعرض دليل GitHub أسطر <code dir=\"ltr\">~/.ssh/config</code> المقابلة. ثم انسخ المفتاح العام (<code dir=\"ltr\">pbcopy &lt; ~/.ssh/id_ed25519.pub</code> على macOS، أو افتح الملف وانسخ سطره الوحيد)، وعلى GitHub اذهب إلى Settings ثم SSH and GPG keys ثم New SSH key، والصقه.</p>\n<p>اختبر الاتصال:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"4\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">ssh</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -T</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> git@github.com</span></span></code></pre></div>\n<p>في المرة الأولى، يطلب منك SSH تأكيد البصمة (fingerprint) الخاصة بخادم GitHub؛ قارنها بالبصمات التي ينشرها GitHub في وثائقه قبل أن تكتب <code dir=\"ltr\">yes</code>. والنجاح يبدو هكذا:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"text\" data-index=\"5\"><div class=\"code-head\"><span class=\"code-title\">Text</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code>Hi maya-okafor! You've successfully authenticated, but GitHub does not provide shell access.</code></pre></div>\n<p>سطر “does not provide shell access” طبيعي؛ فأنت لا تسجّل الدخول إلى خادم، بل تثبت هويتك فقط.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">خطأ شائع</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>مشاركة المفتاح الخطأ</span></p>\n<p>الملف الذي لا ينتهي بـ <code dir=\"ltr\">.pub</code> هو مفتاحك الخاص. لصقه في GitHub أو في محادثة أو في issue يشبه نشر مفتاح بيتك على الإنترنت: احذف ذلك المفتاح من كل مكان، وولّد زوجًا جديدًا، وأضف المفتاح العام الجديد. إن كان الملف الذي توشك على مشاركته لا ينتهي بـ <code dir=\"ltr\">.pub</code>، فتوقّف.</p>\n</aside>\n<h2 id=\"sec-4\" tabindex=\"-1\">توجيه الـ remote إلى البروتوكول الصحيح</h2>\n<p>المصادقة تتبع العنوان. إن أعددت SSH لكنك استنسخت عبر HTTPS، يواصل Git استخدام HTTPS. تحقّق وبدّل:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"6\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">git</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> remote</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -v</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">git</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> remote</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> set-url</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> origin</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> git@github.com:maya-okafor/portfolio.git</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">git</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> push</span></span></code></pre></div>\n<p>والاتجاه المعاكس هو الأمر نفسه مع عنوان <code dir=\"ltr\">https://</code>.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">نصيحة</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>مفتاح لكل جهاز</span></p>\n<p>ولّد مفتاحًا منفصلًا على كل حاسوب تستخدمه، وأعطِ كلًا منها عنوانًا واضحًا على GitHub (“Maya MacBook 2026”). إن ضاع حاسوب، تحذف ذلك المفتاح وحده من GitHub ولا يتعطّل شيء آخر.</p>\n</aside>\n<p>بعد حلّ مسألة الرفع، تستطيع أن تبدأ العمل كما تعمل الفرق على GitHub: عبر الـ pull requests.</p>\n","toc":[{"id":"sec-1","text":"البروتوكولان","level":2},{"id":"sec-2","text":"الخيار الأول: HTTPS مع مدير بيانات اعتماد","level":2},{"id":"sec-3","text":"الخيار الثاني: مفاتيح SSH","level":2},{"id":"sec-4","text":"توجيه الـ remote إلى البروتوكول الصحيح","level":2}],"takeaways":["لا يقبل GitHub كلمة مرور حسابك في عمليات Git؛ استخدم مدير بيانات اعتماد، أو personal access token، أو مفتاح SSH.","يسجّل Git Credential Manager (أو <code dir=\"ltr\">gh auth login</code>) دخولك عبر المتصفّح مرة واحدة ويخزّن بيانات الاعتماد بأمان.","زوج مفاتيح SSH له نصف خاص لا يغادر جهازك أبدًا، ونصف عام بامتداد <code dir=\"ltr\">.pub</code> تضيفه إلى GitHub.","<code dir=\"ltr\">ssh -T git@github.com</code> يختبر مصادقة SSH ويرحّب بك باسم المستخدم حين تنجح.","عنوان الـ remote يحدّد البروتوكول: <code dir=\"ltr\">https://github.com/…</code> يستخدم HTTPS، و <code dir=\"ltr\">git@github.com:…</code> يستخدم SSH؛ وتبدّل بينهما بـ <code dir=\"ltr\">git remote set-url</code>."],"further":[{"title":"About authentication to GitHub","url":"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github"},{"title":"Caching your GitHub credentials in Git","url":"https://docs.github.com/en/get-started/git-basics/caching-your-github-credentials-in-git"},{"title":"Generating a new SSH key and adding it to the ssh-agent","url":"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent"},{"title":"Testing your SSH connection","url":"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection"}],"quiz":[{"q":"<p>يطلب <code dir=\"ltr\">git push</code> عبر HTTPS كلمة مرور. تكتب كلمة مرور GitHub فتحصل على <code dir=\"ltr\">Support for password authentication was removed</code>. ماذا تفعل؟</p>","options":[{"text":"أعِد تعيين كلمة مرور GitHub؛ لا بد أن القديمة انتهت صلاحيتها.","why":"كلمة المرور سليمة للموقع. الأمر ببساطة أن GitHub لا يقبل كلمات مرور الحسابات في عمليات Git إطلاقًا."},{"text":"بدّل الـ remote إلى <code dir=\"ltr\">http://</code> بدل <code dir=\"ltr\">https://</code>.","why":"لا يقدّم GitHub خدمة Git عبر HTTP العادي، وإرسال بيانات الاعتماد دون تشفير سيكون أسوأ لا أفضل."},{"text":"أوقف المصادقة الثنائية لتعمل كلمة المرور.","why":"المصادقة الثنائية ليست السبب، وإيقافها يجعل الاستيلاء على حسابك أسهل. ولن يقبل Git كلمة المرور على أي حال."},{"text":"أعِدّ مدير بيانات اعتماد (أو <code dir=\"ltr\">gh auth login</code>) يسجّل دخولك عبر المتصفّح، أو استخدم personal access token.","why":"صحيح. يشترط GitHub بيانات اعتماد قائمة على token عبر HTTPS؛ ومدير بيانات الاعتماد يحصل عليها ويخزّنها لك."}],"answer":3},{"q":"<p>بعد تشغيل <code dir=\"ltr\">ssh-keygen -t ed25519</code>، أيّ ملف تلصقه في نموذج “New SSH key” على GitHub؟</p>","options":[{"text":"<code dir=\"ltr\">~/.ssh/id_ed25519</code>، ملف المفتاح نفسه.","why":"هذا هو المفتاح الخاص. من يملكه يستطيع التصرّف باسمك. ولا يغادر جهازك أبدًا."},{"text":"<code dir=\"ltr\">~/.ssh/known_hosts</code>","why":"هذا الملف يسجّل الخوادم التي اتصلت بها. وليس مفتاحًا خاصًا بك."},{"text":"<code dir=\"ltr\">~/.ssh/id_ed25519.pub</code>، المفتاح العام.","why":"صحيح. النصف العام آمن للمشاركة؛ ويستخدمه GitHub للتحقّق من أنك تملك المفتاح الخاص المطابق."},{"text":"الملفين كليهما، ليتحقّق GitHub من تطابقهما.","why":"لا يحتاج GitHub إلا المفتاح العام. ورفع المفتاح الخاص إلى أي مكان يعني أن عليك توليد زوج جديد."}],"answer":2},{"q":"<p>الـ SSH يعمل (<code dir=\"ltr\">ssh -T git@github.com</code> يرحّب بك)، لكن <code dir=\"ltr\">git push</code> ما زال يطلب اسم مستخدم وكلمة مرور. لماذا؟</p>","options":[{"text":"عنوان الـ remote ما زال HTTPS؛ بدّله بـ <code dir=\"ltr\">git remote set-url origin git@github.com:maya-okafor/portfolio.git</code>.","why":"صحيح. يستخدم Git البروتوكول الذي يسمّيه عنوان الـ remote أيًّا كان. والعنوان <code dir=\"ltr\">https://</code> لا يلمس مفتاح SSH الخاص بك أبدًا."},{"text":"يجب إضافة مفتاح SSH إلى إعدادات الـ repository لا إلى حسابك.","why":"المفاتيح المضافة إلى حسابك تعمل مع كل repository يمكنك الوصول إليه. أما مفاتيح النشر (deploy keys) الخاصة بالـ repository فهي للخوادم، لا لك."},{"text":"عليك تشغيل <code dir=\"ltr\">ssh-keygen</code> مرة أخرى داخل الـ repository.","why":"المفاتيح تخصّ المستخدم، لا الـ repository. وتوليد مفتاح آخر لن يغيّر البروتوكول الذي يستخدمه Git."}],"answer":0},{"q":"<p>أنت على شبكة تحجب المنفذ 22. أيّ خيار يُبقي Git يعمل بأقل عناء؟</p>","options":[{"text":"ولّد مفتاح RSA بدل ed25519.","why":"نوع المفتاح لا يؤثّر في المنفذ الذي يستخدمه الاتصال."},{"text":"استخدم HTTPS مع مدير بيانات اعتماد، فهو يعمل عبر المنفذ 443 مثل حركة الويب العادية.","why":"صحيح. يذهب HTTPS إلى حيث يذهب الويب. (ويوفّر GitHub أيضًا SSH عبر المنفذ 443 على <code dir=\"ltr\">ssh.github.com</code> إن كنت تفضّل SSH.)"},{"text":"ارفع عبر موقع GitHub بتحميل الملفات واحدًا تلو الآخر.","why":"هذا ينفع لتعديل سريع، لكنه يتجاوز سجلّك المحلي وليس طريقة للاستمرار في استخدام Git."},{"text":"أوقف جدار الحماية على حاسوبك.","why":"الحجب على الشبكة لا على حاسوبك، وإيقاف جدار الحماية الخاص بك لا يضيف إلا المخاطر."}],"answer":1}],"exercise":{"kind":"order","items":["keygen","agent","copy","github","test","seturl"],"title":"أعِدّ SSH للموقع الشخصي","prompt":"<p>قرّرت أن ترفع الموقع الشخصي عبر SSH. رتّب خطوات الإعداد بالترتيب الذي ينجح، من عدم وجود أي مفتاح إلى <code dir=\"ltr\">git push</code> ناجح عبر SSH. أنهِ كل العمل المحلي على المفتاح (توليده وتحميله في الـ agent) قبل أن تلمس GitHub، وتأكّد أن SSH يعمل قبل أن تغيّر إعدادات الـ repository.</p>\n","hints":["لا تستطيع إضافة مفتاح أو نسخه قبل أن يوجد.","يجب أن يعرف GitHub مفتاحك العام قبل أن يرحّب بك اختبار الاتصال.","تغيير عنوان الـ remote هو الخطوة الأخيرة، بعد أن تتأكّد أن SSH يعمل."],"explanation":"<p>ولّد الزوج أولًا بـ <code dir=\"ltr\">ssh-keygen -t ed25519</code>، ثم حمّل المفتاح الخاص في الـ agent كي لا تعيد كتابة عبارة المرور. انسخ المفتاح العام (ملف <code dir=\"ltr\">.pub</code>) وأضفه إلى حسابك على GitHub. الأمر <code dir=\"ltr\">ssh -T git@github.com</code> يثبت أن الإعداد يعمل قبل أن تغيّر أي شيء في الـ repository. وأخيرًا، يبدّل <code dir=\"ltr\">git remote set-url</code> الـ <code dir=\"ltr\">origin</code> إلى عنوان SSH فيستخدم Git المفتاح في الرفع التالي.</p>\n","checkLabels":{},"itemText":{"keygen":"شغّل <code dir=\"ltr\">ssh-keygen -t ed25519 -C &quot;maya.okafor@example.com&quot;</code> واضبط عبارة مرور.","agent":"شغّل الـ agent ثم <code dir=\"ltr\">ssh-add ~/.ssh/id_ed25519</code>.","copy":"انسخ محتوى <code dir=\"ltr\">~/.ssh/id_ed25519.pub</code>.","github":"على GitHub، افتح Settings ثم SSH and GPG keys ثم New SSH key، والصقه.","test":"شغّل <code dir=\"ltr\">ssh -T git@github.com</code> وتأكّد أنه يرحّب بك باسم المستخدم.","seturl":"شغّل <code dir=\"ltr\">git remote set-url origin git@github.com:maya-okafor/portfolio.git</code>، ثم <code dir=\"ltr\">git push</code>."}},"words":637,"readMinutes":4}