git - مشكلة - نسيت كلمة المرور mail ru




هل هناك طريقة لتخطي كلمة المرور عند استخدام https:// على GitHub؟ (16)

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" ، حيث تحتاج إلى تذكر كلمة (مرة واحدة لكل جلسة) وكتابة كلمة مرور مختلفة لكل من خدماتك البعيدة ، حتى يتم تخزين كلمة المرور في الذاكرة مؤقتًا.

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


أوث

يمكنك إنشاء رمز 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

ذات صلة:


  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

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

قم بإنشاء نص برمجي ووضعه في مجلد bin الخاص بالمستخدمين ، هنا باسم credfake ، سيوفر هذا البرنامج النصي اسم المستخدم وكلمة المرور الخاصة بك:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

جعلها قابلة للتنفيذ:

chmod u+x /home/mahuser/bin/credfake

ثم تهيئته في git:

git config --global credential.helper /home/mahuser/bin/credfake

(أو استخدمها دون - global ل repo واحد فقط)

و- voilá - git ستستخدم هذا المستخدم + كلمة المرور.


بالنسبة إلى Windows ، يمكنك استخدام المكوّن الإضافي Git Credential Manager (GCM). يتم الاحتفاظ به حاليًا بواسطة Microsoft. الشيء الجميل هو أنه يحفظ كلمة المرور في مخزن بيانات اعتماد Windows ، وليس كنص عادي.

يوجد مثبت على صفحة الإصدارات الخاصة بالمشروع. سيقوم هذا أيضًا بتثبيت الإصدار الرسمي من git-for-windows مع إدارة الاعتماد المضمنة. وهو يتيح مصادقة ثنائية لجيثب (والخوادم الأخرى). ولديه واجهة رسومية لتسجيل الدخول في البداية.

بالنسبة لمستخدمي cygwin (أو المستخدمين الذين يستخدمون بالفعل git-for-windows الرسمي) ، قد تفضل التثبيت اليدوي. قم بتنزيل حزمة zip من صفحة الإصدارات . قم باستخراج الحزمة ثم قم بتشغيل install.cmd . سيتم تثبيت هذا على مجلد ~/bin الخاص بك. (تأكد من أن دليل ~/bin الخاص بك موجود في المسار الخاص بك.) ثم قمت بتكوينه باستخدام هذا الأمر:

git config --global credential.helper manager

ستقوم Git بتشغيل git-credential-manager.exe عند المصادقة على أي خادم.


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


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

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

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

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

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


ربما أكون بطيئًا بعض الشيء ، ولكن لم يكن واضحًا لي على الفور أنني بحاجة إلى تنزيل المساعد أولاً! لقد عثرت على تنزيل بيانات الاعتماد في مركز confluence.atlassian.com/display/STASH/… ، وآمل أن يساعد ذلك.

اقتبس:

اتبع هذه الخطوات إذا كنت تريد استخدام Git مع تخزين بيانات الاعتماد على OSX:

تحميل ثنائي git-credential-osxkeychain.

قم بتشغيل الأمر أدناه للتأكد من أن الملف الثنائي قابل للتنفيذ:

chmod a+x git-credential-osxkeychain

ضعها في الدليل / usr / local / bin.

قم بتشغيل الأمر أدناه:

git config --global credential.helper osxkeychain

عادة ما يكون لديك عنوان 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)

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

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

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

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

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


يجب استخدام رمز مصادقة بدلاً من كلمة مرور الحساب. اذهب إلى إعدادات / تطبيقات 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.

يمكنك أيضًا تحرير ملف 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

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

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

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


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

git config credential.helper store

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

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

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





github