قمت باستنساخ مستودع git من حساب Github الخاص بي إلى جهاز الكمبيوتر الخاص بي.
أريد أن أعمل مع كل من الكمبيوتر الشخصي والكمبيوتر المحمول ، ولكن مع حساب Github واحد.
عندما أحاول الضغط على Github أو سحبه من جهاز الكمبيوتر الخاص بي ، فإنه يتطلب اسم مستخدم وكلمة مرور ، لكن ليس عند استخدام الكمبيوتر المحمول!
لا أرغب في كتابة اسم المستخدم وكلمة المرور الخاصة بي في كل مرة أتفاعل فيها مع Origin. ما أفتقده هنا؟
هناك خطأ شائع يتمثل في الاستنساخ باستخدام الافتراضي (HTTPS) بدلاً من SSH. يمكنك تصحيح ذلك من خلال الانتقال إلى مستودعك ، والنقر فوق "استنساخ أو تنزيل" ، ثم النقر فوق الزر "استخدام SSH" أعلى حقل URL وتحديث عنوان URL لجهاز التحكم عن بُعد في المنشأ مثل هذا:
git remote set-url Origin [email protected]:username/repo.git
تم توثيق ذلك في GitHub: تبديل عناوين URL عن بُعد من HTTPS إلى SSH .
قم بتشغيل الأمر التالي لتمكين التخزين المؤقت بيانات الاعتماد :
$ git config credential.helper store
$ git Push https://github.com/owner/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>
يجب أيضًا تحديد انتهاء صلاحية التخزين المؤقت ،
git config --global credential.helper 'cache --timeout 7200'
بعد تمكين التخزين المؤقت لبيانات الاعتماد ، سيتم تخزينه مؤقتًا لمدة 7200 ثانية (2 ساعة) .
لقد واجهت للتو المشكلة نفسها ، وكان أبسط الحلول التي وجدتها استخدام عنوان URL SSH بدلاً من HTTPS واحد:
ssh://[email protected]/username/repo.git
وليس هذا:
https://github.com/username/repo.git
يمكنك الآن التحقق من صحة باستخدام فقط SSH Key
بدلاً من username
و password
.
بصرف النظر عن التغيير إلى SSH ، يمكنك أيضًا استخدام HTTPS ، إذا كنت لا تمانع في وضع كلمة مرورك في نص واضح. ضع هذا في ~/.netrc
الخاص بك ولن يطلب اسم المستخدم/كلمة المرور الخاصة بك (على الأقل في Linux و Mac):
machine github.com
login <user>
password <password>
إضافة (انظر التعليق الثاني لـ VonC): على نظام Windows اسم الملف هو %HOME%\_netrc
.
اقرأ أيضًا تعليق VonC الأول في حال أردت تشفيره.
إضافة أخرى (انظر تعليق user137717) والتي يمكنك استخدامها إذا كان لديك بوابة 1.7.10 أو أحدث .
ذاكرة التخزين المؤقت كلمة المرور github في بوابة باستخدام مساعد بيانات الاعتماد :
إذا كنت تقوم باستنساخ مستودعات GitHub باستخدام HTTPS ، فيمكنك استخدام مساعد بيانات اعتماد لإخبار Git بتذكر اسم مستخدم GitHub وكلمة مروره في كل مرة يتحدث فيها إلى GitHub.
يعمل هذا أيضًا على أنظمة Linux و Mac و Windows.
بالنسبة للمبتدئين الذين يتم خلطهم بالإجابات السابقة ، يمكنك القيام بما يلي:
git remote -v
والتي سوف تستجيب شيء من هذا القبيل
Origin https://[email protected]/yourname/yourrepo.git (fetch)
Origin https://[email protected]/yourname/yourrepo.git (Push)
بعد ذلك يمكنك تشغيل الأمر الذي اقترحه كثيرون ، لكنك الآن تعرف اسمك و yourrepo من الأعلى ، لذلك يمكنك فقط قص ولصق yourname/yourrepo.git
من أعلاه إلى
git remote set-url Origin [email protected]:yourname/yourrepo.git
إذا كنت تستخدم ssh وكان مفتاحك الخاص مشفرًا بعبارة مرور ، فعندئذٍ ستظل مطالبًا بإدخال عبارة المرور/كلمة المرور للمفتاح الخاص عند إجراء عمليات الشبكة باستخدام Gitمثل Push
و pull
و fetch
.
إذا كنت ترغب في تجنب الاضطرار إلى إدخال عبارة المرور في كل مرة ، يمكنك استخدام ssh-agent
لتخزين بيانات اعتماد عبارة المرور الخاصة بالمرة الخاصة مرة واحدة لكل جلسة طرفية ، كما أوضح في إجابتي لـ "تعذر فتح اتصال بوكيل المصادقة الخاص بك" :
$ eval `ssh-agent -s`
$ ssh-add
في Bys msysgit Bash ، تحتاج إلى تقييم إخراج ssh-agent
، لكنني لست متأكدًا مما إذا كنت بحاجة إلى القيام بنفس الشيء في بيئات التطوير وأنظمة التشغيل الأخرى.
يبحث ssh-add
عن مفتاح خاص في مجلد .ssh
في منزلك يسمى id_rsa
، وهو الاسم الافتراضي ، لكن يمكنك تمرير مسار ملف إلى مفتاح باسم مختلف.
عند الانتهاء من الجلسة النهائية ، يمكنك إيقاف ssh-agent
باستخدام علامة القتل -k
:
$ ssh-agent -k
كما هو موضح في ssh-agent
manual :
-k
اقتل الوكيل الحالي (الذي قدمه متغير البيئة SSH_AGENT_PID).
أيضًا ، قد يستغرق الأمر معلمة مهلة اختيارية مثل:
$ ssh-add -t <timeout>
حيث <timeout>
بالتنسيق <n>h
لساعات <n>
ساعة ، <n>m
لمدة <n>
دقيقة ، وهكذا.
وفقًا لـ ssh-agent
manual :
-t life
عيّن قيمة افتراضية لأطول عمر للهويات المضافة إلى الوكيل. يمكن تحديد العمر بالثواني أو بتنسيق الوقت المحدد في sshd_config (5) . يتجاوز العمر المحدد لهوية بـ ssh-add (1) هذه القيمة. بدون هذا الخيار ، يكون الحد الأقصى الافتراضي لمدى الحياة إلى الأبد.
انظر هذه الصفحة لمزيد من تنسيقات الوقت .
يجب أن يكون مستخدمو Cygwin على دراية بـ مخاطر أمنية محتملة مع استخدام ssh-agent في Cygwin :
يجب أن يكون الناس على دراية بالمخاطر المحتملة لعامل ssh ضمن cygwin [1] ، على الرغم من أنه في ظل netstat ومنافذ بعيدة محلية ، لا يبدو أن المنفذ المحدد في/tmp/ssh-foo متاح لأي شخص ...؟
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
وفي الرابط المذكور :
ومع ذلك ، لاحظ أن مآخذ المجال يونكس الخاصة بـ cygwin هي {FUNDAMENTALLY INSECURE ولذا فأنا يشجع استخدام ssh-agent تحت cygwin.
عند تشغيل ssh-agent تحت cygwin ، فإنه ينشئ مقبس AF_UNIX في دليل
/tmp/ssh-$USERNAME/
. تحت cygwin AF_UNIX مآخذ تتم محاكاتها عبر مآخذ AF_INET. يمكنك بسهولة معرفة ما إذا كنت ستنظر في ملف/tmp/ssh-$USERNAME/agent-socket-*
عبر المفكرة. سترى شيء مثل!<socket >2080
ثم قم بتشغيل
netstat -a
و مفاجأة! لديك بعض البرامج التي تستمع إلى منفذ 2080. إنه وكيل ssh. عندما يتلقى ssh تحدي RSA من الخادم ، فإنه يشير إلى/tmp/ssh-$USERNAME/agent-socket-*
المقابل (تحت cygwin ، في حالتنا ، هذا يعني أنه سيتم فتح الاتصال بـlocalhost:2080
) ويطلب من ssh-agent معالجة تحدي RSA باستخدام مفتاح خاص لديه ، ثم ببساطة يمر استجابة وردت من وكيل سه إلى الخادم.تحت يونيكس ، يعمل هذا السيناريو دون مشاكل ، لأن يونكس نواة يتحقق من أذونات عندما يحاول البرنامج الوصول إلى مقبس AF_UNIX. بالنسبة إلى مآخذ AF_INET ، ومع ذلك ، فإن الاتصالات مجهولة (اقرأ "غير آمن"). تخيل أنك تعمل على cygwin ssh-agent. قد يقوم أحد المتطفلين الخبيثين بفحص المربع الخاص بك وتحديد موقع المنفذ المفتوح المستخدم من قِبل ssh-agent وفتح الاتصال بخادم ssh الخاص بك وتلقي تحدي RSA منه وإرساله إلى ssh-agent عبر منفذ مفتوح وجده وتلقي استجابة RSA وإرساله إلى ssh الخادم وفويلا ، قام بتسجيل الدخول بنجاح إلى الخادم الخاص بك كما كنت.
المصدر: إعداد Git
سيحفظ الأمر التالي كلمة مرورك في الذاكرة لبعض الوقت.
(لـ git 1.7.10 أو الأحدث.)
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
عند استخدام https git pull & Push ، ما عليك سوى تهيئة remote.Origin.url
لمشروعك ، لتجنب إدخال اسم المستخدم (أو/وكلمة المرور) في كل مرة تقوم فيها بالدفع.
كيفية تكوين remote.Origin.url
:
تنسيق عنوان Url: https: // {اسم المستخدم: password @} github.com/ {owner}/{repo} المعلمات في عنوان url: * اسم المستخدم اختياري ، اسم المستخدم الذي يجب استخدامه عند الحاجة إلى المصادقة ، إذا كان محددًا ، لا حاجة لإدخال اسم المستخدم مرة أخرى عند الحاجة إلى المصادقة ، اسم المستخدم الذي لا يحتوي على "@" ، وإلا لا يمكن تحليل عنوان url بشكل صحيح ، * كلمة المرور اختياري ، وكلمة المرور لاستخدامها عند الحاجة إلى المصادقة ، إذا تم تحديدها ، لا بحاجة إلى إدخال كلمة المرور مرة أخرى عند الحاجة إلى المصادقة ، نصيحة: يتم تخزين هذه القيمة كنص عادي ، لذا ، لمخاوف الأمان ، لا تحدد هذا الرمز الهام ، * على سبيل المثال git config remote.Origin.url https: //[email protected]/eric/myproject
ssh
أعتقد أن استخدام بروتوكول ssh
هو حل أفضل من https
، على الرغم من أن خطوة الإعداد أكثر تعقيدًا بقليل.
الخطوات التقريبية:
ssh-keygen
on linux ، على windows msysgit
توفر أوامر مماثلة.~/.ssh
. وأضفه إلى وكيل ssh عبر الأمر ssh-add
.remote.Origin.url
لمستودع git إلى ssh
style ، على سبيل المثال [email protected]:myaccount/myrepo.git
نصائح:
https
و ssh
.ما عليك سوى تغيير remote.Origin.url
سيكون كافيًا ، أو يمكنك تعديل repo_home/.git/config
مباشرةً لتغيير القيمة (مثل استخدام vi
on linux).
عادةً ما أقوم بإضافة سطر لكل بروتوكول ، وأعلق على أحدهما باستخدام #
.
على سبيل المثال
[بعيد "الأصل"] url = [email protected]: myaccount/myrepo.git # url = https: //[email protected]/myaccount/myrepo .git جلب = + refs/heads/*: refs/remotes/Origin /* Budap.____.]
يمكنك تخزين كلمة مرور GitHub الخاصة بك في Git:
فقط اتبع التعليمات من جيثب الوثائق الرسمية .
بعد اتباع التعليمات الواردة في الرابط أعلاه ، يجب أن تكون قادرًا على الضغط/السحب من/إلى الريبو دون كتابة اسم المستخدم/كلمة المرور الخاصة بك في كل مرة.
ما نجح بالنسبة لي هو تحرير .git/config
والاستخدام
[remote "Origin"]
url = https://<login>:<password>@gitlab.com(...).git
غني عن القول أن هذه طريقة غير آمنة لتخزين كلمة المرور الخاصة بك ولكن هناك بيئات/حالات قد لا تكون هذه مشكلة.
إليك خيار آخر:
بدلا من الكتابة
git Push Origin HEAD
يمكنك الكتابة:
git Push https://user:[email protected]/path HEAD
من الواضح أنه مع معظم الأصداف ، سينتج عن ذلك تخزين كلمة المرور في التاريخ ، لذا ضع ذلك في الاعتبار.
تحديث HTTPS:
أطلق Github برنامجًا جديدًا لنظام Windows يخزّن بيانات اعتمادك عند استخدام HTTPS:
ليستخدم:
قم بتنزيل البرنامج من هنا
بمجرد تشغيل البرنامج ، سيقوم بتحرير ملف .gitconfig
الخاص بك. أعد التحقق مما إذا كان قد قام بتعديل .gitconfig
الصحيح في حال كان لديك العديد منهم. إذا لم يقم بتحرير الصحيح ، أضف ما يلي إلى .gitconfig
الخاص بك
[credential]
helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
لاحظ فاصل الأسطر بعد [credential]
. هو مطلوب.
افتح عميل سطر الأوامر وحاول git Push Origin master
مرة واحدة. إذا طلب منك كلمة مرور ، فأدخلها وستنتقل إليها. تم حفظ كلمة المرور
لديك أساسا خياران.
إذا كنت تستخدم نفس المستخدم على كلا الجهازين ، فأنت بحاجة إلى نسخ مفتاح .pub إلى جهاز الكمبيوتر الخاص بك ، لذلك يعرف github أنك المستخدم نفسه.
إذا قمت بإنشاء ملف .pub جديد لجهاز الكمبيوتر الخاص بك وترغب في التعامل مع الأجهزة كمستخدمين مختلفين ، فأنت بحاجة إلى تسجيل ملف .pub الجديد على موقع github.
إذا لم يفلح ذلك ، فقد يكون ذلك بسبب عدم تكوين ssh بشكل صحيح وفشل ذلك في العثور على موقع مفاتيحك. محاولة
ssh -vv [email protected]
للحصول على مزيد من المعلومات لماذا فشل SSH.
بالنسبة لمستخدمي windows git ، بعد تشغيل git config --global credential.helper store
، إذا كان لا يزال يطالبك بكلمة مرور ، فمن الأفضل أن تتحقق من مكان كتابة التهيئة. باستخدام هذا الأمر
git config --list --show-Origin
في حالتي ، قم يدويًا بتحرير ملف التكوين 'C:\Program Files\Git\mingw64\etc\gitconfig' ، مع إضافة النص التالي ، إنه يعمل.
[credential] helper = store
كان لي نفس المشكلة.
لذلك قم بتغيير ملف .git/config من مشروعي
url = https://github.com/<your-user-here>/<your-repo-here>
إلى
url = [email protected]:<your-user-here>/<your-repo-here>
وأضف المفتاح العمومي ssh إلى ملف تعريف git الموجود في الإعداد.
للمفتاح العمومي ssh
cat ~/.ssh/id_rsa.pub
هذا هو ما نجح لي:
git remote set-url Origin https://[email protected]/username/reponame.git
مثال:
git remote set-url Origin https://[email protected]/jsmith/master.git
تحتاج إلى تنفيذ خطوتين -
1) git remote remove Origin
2) git remote add Origin [email protected]:NuggetAI/nugget.git
لاحظ عنوان urit git عبارة عن عنوان url ssh
وليس عنوان url https .. والذي يمكنك اختياره من هنا.
تحديث ملف git config مباشرة: (إذا كنت لا ترغب في حفظ الأوامر الهوى)
افتح ملفك .git/config
في محرر النصوص المفضل لديك. سيكون في المجلد الذي قمت بنسخه أو في الريبو الذي قمت بإجراء git init فيه. انتقل إلى ذلك الريبو. .git
هو مجلد مخفي ، والضغط على ctrl + h
يجب أن يعرض المجلد المخفي ، (ls -a
في الجهاز الطرفي).
فيما يلي نموذج لملف .git/config
، انسخ هذه الخطوط والصقها وتأكد من تحديث هذه السطور بمعلومات git الخاصة بك.
[user]
name = Tux
email = [email protected]
username = happy_feet
[remote "Origin"]
url = https://github.com/happy_feet/my_code.git
fetch = +refs/heads/*:refs/remotes/Origin/*
قم بتغيير جزء عنوان url بالتنسيق التالي لـ SSH
url = [email protected]:happy_feet/my_code.git
(لا تتغير التنسيقات المذكورة أعلاه مع العديد من خوادم git البعيدة مثل github أو bitbucket ، وهو نفسه إذا كنت تستخدم git للتحكم في الإصدار):
ملاحظة: سوف تتطلب منك طريقة SSH للاتصال بمخزن git عن بعد إضافة مفتاح SSH العام إلى خادم git البعيد (مثل github أو bitbucket ، ابحث في صفحة الإعدادات عن مفاتيح SSH)
لمعرفة كيفية إنشاء مفاتيح SSH ، راجع:https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html
إذا كان المفتاح ssh أو .netrc لا يعملان لديك ، فحل آخر بسيط ولكنه أقل أمانًا يمكن أن يعمل من أجلك هو git-credential-store - مساعد لتخزين بيانات الاعتماد على القرص
git config --global credential.helper store
سيتم حفظ بيانات الاعتماد الافتراضية في ~/.git-credentials
. سيتم إنشاؤه وكتابته.
يرجى ملاحظة أن استخدام هذا المساعد سوف يخزن كلمات المرور الخاصة بك غير مشفرة على القرص ، محمي فقط بواسطة أذونات نظام الملفات. إذا كان هذا قد لا يكون مقايضة أمان مقبولة.
كما قال العديد من المستخدمين ، عليك فقط تغيير عنوان URL الخاص بمخزن مستودع التخزين من https إلى SSH.
إذا لم تقم بإنشاء مفتاح SSH في جهازك ، فسيتعين عليك القيام بذلك.
كمعلومات إضافية ، بعد القيام بهذا التغيير ، ما زلت أتلقى نفس الخطأ: تم رفض الإذن.
في حالتي ، كانت المشكلة أنني كنت أستخدم Windows Shell لتنفيذ الأمر ngh ؛ نظرًا لأن هذا الأمر يجب أن يفتح موجهًا لطلب عبارة SSH ولا يفتح Windows Shell هذا النوع من المطالبات ، فشلت المصادقة فقط.
لذا ، كان عليّ فقط فتح بوابة شل وتنفيذ أمر ngh هناك ، ووضع عبارة SSH في الموجّه في كل مرة يطلبها و "voilà" ... كان الأمر جيدًا!
إذا كنت تستخدم git (على سبيل المثال git bash) ضمن Windows (وإذا كنت لا ترغب في التبديل من https إلى ssh)
يمكنك أيضًا استخدام https://github.com/Microsoft/Git-Credential-Manager-for-Windows
هذا التطبيق سوف تبقي اسم المستخدم وكلمة المرور بالنسبة لك ...