authentication مشكلة - هل هناك طريقة لتخطي كلمة المرور عند استخدام https:// على GitHub؟




السر في (21)

يمكنك أيضًا تحرير ملف bashrc وإضافة نص برمجي فيه. هذا من شأنه أن يطلب كلمة المرور الخاصة بك عند بدء تشغيل بوابة مرة واحدة ثم يتذكرها حتى تسجيل الخروج.

SSH_ENV=$HOME/.ssh/environment
  
# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

قمت مؤخرًا بالتبديل إلى مزامنة مستودعات التخزين الخاصة بي إلى https: // على GitHub (بسبب مشكلات جدار الحماية) ، ويطلب منك إدخال كلمة مرور في كل مرة. كان من المعتاد أن يكون لدي شهادة SSH ، وكان ذلك كافياً. هل هناك طريقة لتجاوز كلمة المرور في حالتي (باستخدام http / https)؟


تختلف الأمور قليلاً إذا كنت تستخدم مصادقة ثنائية مثلما أكون. وبما أنني لم أجد جوابًا جيدًا في مكان آخر ، فسوف ألصق أحدًا هنا حتى أتمكن من العثور عليه لاحقًا.

إذا كنت تستخدم مصادقة ثنائية ، فإن تحديد اسم المستخدم / كلمة المرور لن يعمل حتى - يتم رفض الوصول إليك. ولكن يمكنك استخدام الرمز المميز للوصول إلى التطبيق واستخدام مساعد بيانات اعتماد Git للتخزين المؤقت لك. فيما يلي الروابط ذات الصلة:

ولا أتذكر أين رأيت هذا ، ولكن عندما يُطلب منك اسم المستخدم الخاص بك - هذا هو المكان الذي تلتصق فيه برمز الوصول إلى التطبيق. ثم اترك كلمة المرور فارغة. عملت على جهاز Mac الخاص بي.


يمكنك استخدام مساعدي الاعتماد.

git config --global credential.helper 'cache --timeout=x'

حيث x هو عدد الثواني.


يمكنك أيضًا تخزين Git في بيانات اعتمادك بصفة دائمة باستخدام ما يلي:

git config credential.helper store

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

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

git config --unset credential.helper

لتخزين كلمات المرور في .git-credentials في دليل %HOME% بدلاً من دليل المشروع: استخدم علامة --global

git config --global credential.helper store

  1. إذا كان لديك بالفعل مشاريع تعمل:

    • اذهب إلى your/project/path/.git/config . افتحه. وتغيير عناوين المواقع
      مثل url = https://[email protected]/project.git
      to: url = https://username:[email protected]/project.git
    • أو فقط قم بتشغيل تلك الأوامر كمشروعك:
      git remote rm origin
      git remote add origin https://username:[email protected]/project.git
  2. إذا كنت تستنسخ مشروعًا جديدًا:
    git clone https://username:[email protected]/project.git

  3. الاتصال بمستودعك الحالي:
    git remote add origin https://username:[email protected]/project.git

في إعداد GNU / Linux ، يعمل ~ / .netrc بشكل جيد جدًا:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

قد تعتمد على مكتبات الشبكة التي تستخدمها Git لنقل HTTPS .


بعد استنساخ repo ، يمكنك تحرير repo/.git/config وإضافة بعض التكوين مثل أدناه:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

ثم لن يطلب منك username password مرة أخرى.


تشير وثائق المؤلف mentions أنه يمكنك منعها من استخدام واجهة برمجة تطبيقات GitHub ، بحيث تعمل مثل git clone :

إذا قمت بضبط مفتاح no-api على true في مستودع GitHub ، فستستنسح المخزون كما هو الحال مع أي مستودع Git آخر بدلاً من استخدام واجهة برمجة تطبيقات GitHub. ولكن على عكس استخدام برنامج git مباشرة ، سيحاول الملحن استخدام ملفات zip الخاصة بـ GitHub.

لذا سيبدو القسم كما يلي:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

ضع في اعتبارك أن واجهة برمجة التطبيقات موجودة لسبب ما. لذلك يجب أن يكون هذا الأسلوب هو الأسلوب الأخير فيما يتعلق بالحمل المتزايد على github.com.


هذا يعمل بالنسبة لي أنا باستخدام نظام التشغيل Windows 10

git config --global credential.helper wincred

توجد طريقة سهلة قديمة الطراز لتخزين بيانات اعتماد المستخدم في عنوان URL لبروتوكول HTTPS:

https://user:[email protected]/...

يمكنك تغيير عنوان URL باستخدام git remote set-url <remote-repo> <URL>

الجانب السلبي الواضح لهذا النهج هو أنه يجب عليك تخزين كلمة المرور في نص عادي. لا يزال بإمكانك فقط إدخال اسم المستخدم ( https://[email protected]/... ) والذي سيوفر لك على الأقل نصف المتاعب.

قد تفضل التبديل إلى SSH أو استخدام برنامج عميل GitHub.


مع Git الإصدار 1.7.9 والإصدارات الأحدث

نظرًا لأن Git 1.7.9 (تم إصداره في أواخر يناير 2012) ، توجد آلية نظيفة في Git لتجنب الحاجة إلى كتابة كلمة المرور الخاصة بك طوال الوقت لـ HTTP / HTTPS ، والتي تسمى مساعدي الاعتماد . (شكرا ل dazonic للإشارة إلى هذه الميزة الجديدة في التعليقات أدناه.)

باستخدام Git 1.7.9 أو ما بعده ، يمكنك فقط استخدام أحد مساعدي الاعتماد التاليين:

git config --global credential.helper cache

... الذي يرشد Git للحفاظ على كلمة المرور مخزنة مؤقتًا في الذاكرة لـ (افتراضيًا) 15 دقيقة. يمكنك ضبط مهلة أطول مع:

git config --global credential.helper "cache --timeout=3600"

(تم اقتراح هذا المثال في صفحة مساعدة GitHub لنظام التشغيل Linux ). يمكنك أيضًا تخزين بيانات الاعتماد الخاصة بك بشكل دائم إذا كنت ترغب في ذلك ، راجع الإجابات الأخرى أدناه.

تقترح مساعدة GitHub أيضًا أنه إذا كنت تستخدم نظام التشغيل Mac OS X وتستخدم Homebrew لتثبيت Git ، فيمكنك استخدام نظام التشغيل الأصلي لنظام التشغيل Mac OS X مع:

git config --global credential.helper osxkeychain

بالنسبة إلى Windows ، يوجد مساعد يسمى Git Credential Manager لنظام التشغيل Windows أو wincred in msysgit .

git config --global credential.helper wincred # obsolete

مع Git for Windows 2.7.3+ (مارس 2016):

git config --global credential.helper manager

بالنسبة لنظام التشغيل Linux ، يمكنك استخدام gnome-keyring (أو تنفيذ Keyring آخر مثل KWallet).

مع إصدارات Git قبل 1.7.9

باستخدام إصدارات Git قبل 1.7.9 ، هذا الخيار الأكثر أمانًا غير متوفر ، وستحتاج إلى تغيير عنوان URL الذي يستخدمه جهاز بعيد origin ليشمل كلمة المرور بهذه الطريقة:

https://you:[email protected]/you/example.git

... وبعبارة أخرى مع :password بعد اسم المستخدم وقبل @ .

يمكنك تعيين عنوان URL جديد لوحدة التحكم عن بُعد origin الخاصة بك من خلال:

git config remote.origin.url https://you:[email protected]/you/example.git

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

مع أي إصدار Git (حسنا ، منذ الإصدار 0.99)

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

machine <hostname> login <username> password <password>

... استبدال <hostname> الخادم ، و <username> و <password> باسم المستخدم وكلمة المرور. تذكر أيضًا تعيين أذونات نظام الملفات المقيدة على هذا الملف:

chmod 600 ~/.netrc

لاحظ أنه في Windows ، يجب استدعاء هذا الملف باسم _netrc ، وقد تحتاج إلى تحديد متغير البيئة٪ HOME٪ - لمزيد من التفاصيل ، انظر:


استخدم متجر بيانات الاعتماد.

بالنسبة إلى git 2.11+ على OSX و Linux ، استخدم git's built في مخزن بيانات الاعتماد :

git config --global credential.helper libsecret

بالنسبة إلى msysgit 1.7.9+ على نظام التشغيل Windows :

git config --global credential.helper wincred

لـ Git 1.7.9+ على OS X استخدم:

git config --global credential.helper osxkeychain

أوث

يمكنك إنشاء رمز API المميز ( OAuth ) الخاص بك واستخدامه بنفس الطريقة التي تستخدم بها بيانات الاعتماد العادية (في: /settings/tokens ). فمثلا:

git remote add fork https://[email protected]/foo/bar
git push fork

.netrc

طريقة أخرى هي استخدام تكوين المستخدم / كلمة المرور في ~/.netrc ( _netrc على نظام التشغيل Windows) ، على سبيل المثال

machine github.com
login USERNAME
password PASSWORD

بالنسبة إلى https:

machine github.com
login USERNAME
password PASSWORD
protocol https

مساعد الاعتماد

لتخزين كلمة مرور GitHub في Git عند استخدام HTTPS ، يمكنك استخدام مساعد بيانات اعتماد لإخبار Git بتذكر اسم المستخدم وكلمة المرور الخاصين بك في GitHub في كل مرة يتحدث فيها مع GitHub.

  • Mac: git config --global credential.helper osxkeychain ( osxkeychain helper is required)،
  • ويندوز: git config --global credential.helper wincred
  • Linux و other: git config --global credential.helper cache

ذات صلة:


عادة ما يكون لديك عنوان URL بعيد مثل هذا ،

git remote -v

origin  https://gitlab.com/username/Repo.git (fetch)
origin  https://gitlab.com/username/Repo.git (push)

إذا كنت تريد تخطي اسم المستخدم وكلمة المرور أثناء استخدام git push ، جرب هذا

 git remote set-url origin https://username:[email protected]/username/Repo.git

لقد قمت للتو بإضافة نفس عنوان url (مع تفاصيل المستخدم بما في ذلك كلمة المرور) إلى الأصل.

ملاحظة: لا يعمل إذا كان اسم المستخدم هو معرف البريد الإلكتروني.

git remote -v

origin  https://username:[email protected]/username/Repo.git (fetch)
origin  https://username:[email protected]/username/Repo.git (push)

يمكنك فقط استخدام

git config credential.helper store

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

وهذا كل شيء ، كما هو مذكور في هذه الصفحة:

https://git-scm.com/docs/git-credential-store


TLDR. استخدام ملف netrc مشفر مع Git 1.8.3+ .

حفظ كلمة مرور لـ Git مستودع تخزين URL HTTPS ممكن مع ~/.netrc (Unix) أو %HOME%/_netrc (لاحظ الـ _ ) على Windows.

لكن : سيخزن هذا الملف كلمة المرور الخاصة بك بنص عادي.

الحل : قم بتشفير هذا الملف باستخدام GPG (GNU Privacy Guard) ، وقم بإلغاء تشفير Git في كل مرة يحتاج فيها إلى كلمة مرور (لعملية push / pull / fetch / clone ).

إرشادات خطوة بخطوة لنظام التشغيل Windows

مع ويندوز:

(يحتوي Git على gpg.exe في توزيعه ، ولكن استخدام تثبيت GPG كامل يتضمن gpg-agent.exe ، والذي gpg-agent.exe عبارة المرور المرتبطة بمفتاح GPG الخاص بك.)

  • قم بتثبيت gpg4Win Lite ، الحد الأدنى لواجهة سطر الأوامر gnupg (خذ gpg4win-vanilla-2.XY-betaZZ.exe ) ، وأكمل PATH مع دليل تثبيت GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(لاحظ أمر ' copy ': سوف يحتاج Git إلى برنامج Bash النصي لتنفيذ الأمر ' gpg '. بما أن gpg4win-vanilla-2 يأتي مع gpg2.exe ، فستحتاج إلى تكراره.)

  • إنشاء أو استيراد مفتاح GPG ، والثقة به:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(تأكد من وضع عبارة مرور لهذا المفتاح.)

  • ثق بهذا المفتاح

  • قم بتثبيت البرنامج النصي لمسار الاعتماد في دليل ضمن %PATH% :

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
    

(نعم ، هذا هو البرنامج النصي Bash ، لكنه سيعمل على Windows حيث سيتم استدعاؤه من Git.)

  • قم بعمل ملف _netrc بنص واضح

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(لا تنس جزء " protocol ": " http " أو " https " بناءً على عنوان URL الذي ستستخدمه.)

  • تشفير هذا الملف:

    gpg -e -r a_recipient _netrc
    

(يمكنك الآن حذف ملف _netrc ، مع الاحتفاظ فقط _netrc.gpg .)

  • استخدم هذا الملف المشفر:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(لاحظ ' / ': C:\path\to... لن تعمل على الإطلاق.) (يمكنك استخدامه في first -v -d لمشاهدة ما يجري.)

من الآن فصاعدًا ، سيؤدي أي أمر Git باستخدام عنوان URL لـ HTTP (S) والذي يتطلب المصادقة إلى فك تشفير ملف _netrc.gpg واستخدام تسجيل الدخول / كلمة المرور المرتبطة بالخادم الذي تتصل به. في المرة الأولى ، سيطلب منك GPG الحصول على عبارة المرور الخاصة بمفتاح GPG الخاص بك ، لفك تشفير الملف. في الأوقات الأخرى ، فإن gpg-agent الذي يتم تشغيله تلقائيًا بواسطة أول استدعاء لـ GPG سيوفر لك كلمة المرور هذه.

بهذه الطريقة ، يمكنك حفظ العديد من عناوين URL / تسجيلات الدخول / كلمات المرور في ملف واحد ، وجعلها مخزنة على القرص الخاص بك مشفرة.
أجده أكثر ملاءمة من مساعد "cache" ، حيث تحتاج إلى تذكر كلمة (مرة واحدة لكل جلسة) وكتابة كلمة مرور مختلفة لكل من خدماتك البعيدة ، حتى يتم تخزين كلمة المرور في الذاكرة مؤقتًا.


حصلت على جوابي من gitcredentials (7) صفحة دليل . بالنسبة لحالتي ، ليس لدي ذاكرة بيانات الاعتماد في تثبيت Windows الخاص بي ؛ أنا استخدم مخزن الاعتماد.

بعد أن أستخدم مخزن بيانات الاعتماد ، يتم تخزين اسم المستخدم / كلمة المرور في ملف [gd-credentials]. لإزالة اسم المستخدم / كلمة المرور ، ما عليك سوى حذف محتوى الملف.


يجب استخدام رمز مصادقة بدلاً من كلمة مرور الحساب. اذهب إلى إعدادات / تطبيقات GitHub ثم قم بإنشاء رمز وصول شخصي. يمكن استخدام الرمز المميز بنفس طريقة استخدام كلمة المرور.

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

بدلاً من الرمز المميز أو كلمة المرور التي تمنح المستخدم وصولاً كاملاً إلى حساب GitHub ، يمكن استخدام مفتاح نشر مشروع معين لمنح الوصول إلى مستودع مشروع واحد. يمكن تكوين مشروع Git لاستخدام هذا المفتاح المختلف في الخطوات التالية عندما يمكنك الوصول إلى حسابات أو مشاريع Git الأخرى باستخدام بيانات الاعتماد العادية الخاصة بك:

  1. اكتب ملف تهيئة SSH الذي يحتوي على Host و IdentityFile لمفتاح النشر ، وربما UserKnownHostsFile ، وربما User (على الرغم من أنني أعتقد أنك لست بحاجة إليه).
  2. اكتب برنامج نصي لقذيفة برنامج SSH الذي يكون فعليًا ssh -F /path/to/your/config $*
  3. قم بإعداد GIT_SSH=/path/to/your/wrapper أمام أمر Git العادي. هنا يجب أن تستخدم git remote (origin) [email protected]:user/project.git format.

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

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

سيتم حفظ بيانات اعتمادك لمدة 3600 ثانية.


ما عليك سوى تضمين بيانات اعتماد تسجيل الدخول كجزء من عنوان URL:

git remote rm origin 
git remote add origin https://username:[email protected]/path/to/repo.git

فقط للتناغم هنا ، ما تم حل المشكلة بالنسبة لي كان ببساطة ألغيت من المطالبة الأولية ، فتح واحد ssh مع حساب بيتبوكيت ، دخلت كلمة المرور هناك وعمل كل شيء كما هو متوقع.





git authentication github