it-swarm.asia

يتطلب Git Push اسم المستخدم وكلمة المرور

قمت باستنساخ مستودع git من حساب Github الخاص بي إلى جهاز الكمبيوتر الخاص بي.

أريد أن أعمل مع كل من الكمبيوتر الشخصي والكمبيوتر المحمول ، ولكن مع حساب Github واحد.

عندما أحاول الضغط على Github أو سحبه من جهاز الكمبيوتر الخاص بي ، فإنه يتطلب اسم مستخدم وكلمة مرور ، لكن ليس عند استخدام الكمبيوتر المحمول!

لا أرغب في كتابة اسم المستخدم وكلمة المرور الخاصة بي في كل مرة أتفاعل فيها مع Origin. ما أفتقده هنا؟

1224
TooCooL

هناك خطأ شائع يتمثل في الاستنساخ باستخدام الافتراضي (HTTPS) بدلاً من SSH. يمكنك تصحيح ذلك من خلال الانتقال إلى مستودعك ، والنقر فوق "استنساخ أو تنزيل" ، ثم النقر فوق الزر "استخدام SSH" أعلى حقل URL وتحديث عنوان URL لجهاز التحكم عن بُعد في المنشأ مثل هذا:

git remote set-url Origin [email protected]:username/repo.git

تم توثيق ذلك في GitHub: تبديل عناوين URL عن بُعد من HTTPS إلى SSH .

1730
Tekkub

المصادقة بشكل دائم مع مستودعات Git ،

قم بتشغيل الأمر التالي لتمكين التخزين المؤقت بيانات الاعتماد :

$ 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 ساعة) .

265
Jay Patel

لقد واجهت للتو المشكلة نفسها ، وكان أبسط الحلول التي وجدتها استخدام عنوان URL SSH بدلاً من HTTPS واحد:

ssh://[email protected]/username/repo.git

وليس هذا:

https://github.com/username/repo.git

يمكنك الآن التحقق من صحة باستخدام فقط SSH Key بدلاً من username و password.

127
Anton Salikhmetov

بصرف النظر عن التغيير إلى 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.

114
rintcius

بالنسبة للمبتدئين الذين يتم خلطهم بالإجابات السابقة ، يمكنك القيام بما يلي:

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
77
Davide

إذا كنت تستخدم ssh وكان مفتاحك الخاص مشفرًا بعبارة مرور ، فعندئذٍ ستظل مطالبًا بإدخال عبارة المرور/كلمة المرور للمفتاح الخاص عند إجراء عمليات الشبكة باستخدام Gitمثل Push و pull و fetch.

استخدم ssh-agent لحفظ بيانات اعتماد كلمة مرور/كلمة مرور المفتاح الخاص

إذا كنت ترغب في تجنب الاضطرار إلى إدخال عبارة المرور في كل مرة ، يمكنك استخدام 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

يجب أن يكون مستخدمو 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 الخادم وفويلا ، قام بتسجيل الدخول بنجاح إلى الخادم الخاص بك كما كنت.

52
user456814

المصدر: إعداد 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)
46
Sagar Rakshe

عند استخدام 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 
 

Update - باستخدام ssh

أعتقد أن استخدام بروتوكول ssh هو حل أفضل من https ، على الرغم من أن خطوة الإعداد أكثر تعقيدًا بقليل.

الخطوات التقريبية:

  • قم بإنشاء مفاتيح ssh باستخدام command ، مثل ssh-keygen on linux ، على windows msysgit توفر أوامر مماثلة.
  • احتفظ بالمفتاح الخاص على الجهاز المحلي في الموقع المناسب ، على سبيل المثال ، ~/.ssh. وأضفه إلى وكيل ssh عبر الأمر ssh-add.
  • تحميل المفتاح العمومي لخادم بوابة.
  • تغيير remote.Origin.url لمستودع git إلى ssh style ، على سبيل المثال [email protected]:myaccount/myrepo.git
  • ثم عند السحب أو الضغط ، لا حاجة لإدخال اسم المستخدم أو كلمة المرور على الإطلاق.

نصائح:

  • إذا كان مفتاح ssh الخاص بك به عبارة مرور ، فأنت بحاجة إلى إدخاله عند أول استخدام للمفتاح بعد كل إعادة تشغيل لجهازك ، افتراضيًا.

Update - التبديل بين 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.____.]
30
Eric Wang

يمكنك تخزين كلمة مرور GitHub الخاصة بك في Git:

فقط اتبع التعليمات من جيثب الوثائق الرسمية .

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

15
K M Rakibul Islam

ما نجح بالنسبة لي هو تحرير .git/config والاستخدام

[remote "Origin"]
        url = https://<login>:<password>@gitlab.com(...).git

غني عن القول أن هذه طريقة غير آمنة لتخزين كلمة المرور الخاصة بك ولكن هناك بيئات/حالات قد لا تكون هذه مشكلة.

8
WoJ

إليك خيار آخر:

بدلا من الكتابة

git Push Origin HEAD

يمكنك الكتابة:

git Push https://user:[email protected]/path HEAD

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

7
Lacho Tomov

تحديث HTTPS:

أطلق Github برنامجًا جديدًا لنظام Windows يخزّن بيانات اعتمادك عند استخدام HTTPS:

ليستخدم:

قم بتنزيل البرنامج من هنا

بمجرد تشغيل البرنامج ، سيقوم بتحرير ملف .gitconfig الخاص بك. أعد التحقق مما إذا كان قد قام بتعديل .gitconfig الصحيح في حال كان لديك العديد منهم. إذا لم يقم بتحرير الصحيح ، أضف ما يلي إلى .gitconfig الخاص بك

[credential]
    helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'

لاحظ فاصل الأسطر بعد [credential]. هو مطلوب.

افتح عميل سطر الأوامر وحاول git Push Origin master مرة واحدة. إذا طلب منك كلمة مرور ، فأدخلها وستنتقل إليها. تم حفظ كلمة المرور

4
Varun Achar

لديك أساسا خياران.

إذا كنت تستخدم نفس المستخدم على كلا الجهازين ، فأنت بحاجة إلى نسخ مفتاح .pub إلى جهاز الكمبيوتر الخاص بك ، لذلك يعرف github أنك المستخدم نفسه.

إذا قمت بإنشاء ملف .pub جديد لجهاز الكمبيوتر الخاص بك وترغب في التعامل مع الأجهزة كمستخدمين مختلفين ، فأنت بحاجة إلى تسجيل ملف .pub الجديد على موقع github.

إذا لم يفلح ذلك ، فقد يكون ذلك بسبب عدم تكوين ssh بشكل صحيح وفشل ذلك في العثور على موقع مفاتيحك. محاولة

ssh -vv [email protected]

للحصول على مزيد من المعلومات لماذا فشل SSH.

4
ralphtheninja

بالنسبة لمستخدمي windows git ، بعد تشغيل git config --global credential.helper store ، إذا كان لا يزال يطالبك بكلمة مرور ، فمن الأفضل أن تتحقق من مكان كتابة التهيئة. باستخدام هذا الأمر

git config --list --show-Origin

في حالتي ، قم يدويًا بتحرير ملف التكوين 'C:\Program Files\Git\mingw64\etc\gitconfig' ، مع إضافة النص التالي ، إنه يعمل.

[credential] helper = store

2
Liang

كان لي نفس المشكلة.

لذلك قم بتغيير ملف .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
2
shrikant

هذا هو ما نجح لي:

git remote set-url Origin https://[email protected]/username/reponame.git

مثال:

git remote set-url Origin https://[email protected]/jsmith/master.git
1
user5854766

تحتاج إلى تنفيذ خطوتين -

1) git remote remove Origin
2) git remote add Origin [email protected]:NuggetAI/nugget.git

لاحظ عنوان urit git عبارة عن عنوان url ssh وليس عنوان url https .. والذي يمكنك اختياره من هنا.

 enter image description here

1
sapy

تحديث ملف 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

1
Survesh Jones

إذا كان المفتاح ssh أو .netrc لا يعملان لديك ، فحل آخر بسيط ولكنه أقل أمانًا يمكن أن يعمل من أجلك هو git-credential-store - مساعد لتخزين بيانات الاعتماد على القرص

git config --global credential.helper store

سيتم حفظ بيانات الاعتماد الافتراضية في ~/.git-credentials. سيتم إنشاؤه وكتابته.

يرجى ملاحظة أن استخدام هذا المساعد سوف يخزن كلمات المرور الخاصة بك غير مشفرة على القرص ، محمي فقط بواسطة أذونات نظام الملفات. إذا كان هذا قد لا يكون مقايضة أمان مقبولة.

0
rumman0786

كما قال العديد من المستخدمين ، عليك فقط تغيير عنوان URL الخاص بمخزن مستودع التخزين من https إلى SSH.

إذا لم تقم بإنشاء مفتاح SSH في جهازك ، فسيتعين عليك القيام بذلك.

كمعلومات إضافية ، بعد القيام بهذا التغيير ، ما زلت أتلقى نفس الخطأ: تم رفض الإذن.

في حالتي ، كانت المشكلة أنني كنت أستخدم Windows Shell لتنفيذ الأمر ngh ؛ نظرًا لأن هذا الأمر يجب أن يفتح موجهًا لطلب عبارة SSH ولا يفتح Windows Shell هذا النوع من المطالبات ، فشلت المصادقة فقط.

لذا ، كان عليّ فقط فتح بوابة شل وتنفيذ أمر ngh هناك ، ووضع عبارة SSH في الموجّه في كل مرة يطلبها و "voilà" ... كان الأمر جيدًا!

0
Thisisalexis

إذا كنت تستخدم git (على سبيل المثال git bash) ضمن Windows (وإذا كنت لا ترغب في التبديل من https إلى ssh)

يمكنك أيضًا استخدام https://github.com/Microsoft/Git-Credential-Manager-for-Windows

هذا التطبيق سوف تبقي اسم المستخدم وكلمة المرور بالنسبة لك ...

0
boly38