क्यों git Windows के तहत मेरे पासफ़्रेज़ को याद नहीं रख सकता है


144

मैंने अभी-अभी गिट का उपयोग करना शुरू किया है और मैं अपने पासफ़्रेज़ को याद रखने के लिए इसे प्राप्त नहीं कर सकता। मैं cmd।

लेकिन मैं अभी भी मिलता है

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

मैंने स्वयं msysgit का उपयोग नहीं किया है, लेकिन पेजेंट प्रमाणीकरण एजेंट मददगार हो सकता है।
Cebjyre

1
मैंने सब कुछ करने की कोशिश की और फिर मुझे यह मिला जिसने काम किया।
ब्लेक निमेज्स्की

1
कुछ समय के लिए ओपनएसएसएच के साथ विंडोज 10 जहाज। Ssh- एजेंट सेवा सक्षम करें, ssh स्टोर में अपनी कुंजी जोड़ने के लिए ssh-add का उपयोग करें, और GIT_SSHअपने वातावरण में सेट करें (यदि आवश्यक हो) और git / ssh ssh-agent के माध्यम से आपके पासफ़्रेज़ को याद रखेगा। अधिक विस्तृत निर्देशों के लिए मेरा जवाब नीचे देखें।
d3r3kk

1
2019, बस विंडोज़ 10 पर गिट स्थापित किया गया है और गिट एक बार पासवर्ड मांगता है , और इसे याद करता है।
जीन फ़्राँस्वा Fabre

@ जीन-फ्रांस्वाफ़्रे आप ओपनएसएसएल का उपयोग नहीं कर रहे होंगे।
रोडरनर

जवाबों:


206

मुझे एहसास है कि यह सवाल दो साल पुराना है, लेकिन मेरे पास एक ही मुद्दा था और यहां कई जवाब मेरे लिए सवाल का पूरी तरह से जवाब नहीं देते थे। यहाँ दो चरण-दर-चरण समाधान हैं, जो इस बात पर निर्भर करता है कि आप msysgit के अलावा TortoiseGit का उपयोग करते हैं या नहीं।

पहला समाधान विंडोज, एमएसआईएसजिट और पुट्टी को मानता है।

  1. निर्देशानुसार msysgit और PuTTY स्थापित करें।
  2. (वैकल्पिक) अपने पथ के लिए PuTTY जोड़ें। (यदि आप ऐसा नहीं करते हैं, तो नीचे दिए गए PuTTY कमांड के किसी भी संदर्भ को उपयुक्त निष्पादन योग्य के लिए पूर्ण पथ के साथ उपसर्ग किया जाना चाहिए।)
  3. यदि आपने पहले से ऐसा नहीं किया है, तो GitHub पर दिए गए निर्देश के अनुसार या अपने Git होस्ट द्वारा निर्देश के रूप में एक महत्वपूर्ण हैश उत्पन्न करें।
  4. फिर, अगर आपने पहले से ऐसा नहीं किया है, तो पुट्टीने.नेट का उपयोग करके पुट्टी के पेजेंट के साथ उपयोग के लिए अपनी कुंजी को परिवर्तित करें । निर्देश इस उपयोगी मार्गदर्शिका में और साइबर स्पेस में कई अन्य स्थानों में पुट्टी के प्रलेखन में हैं।
  5. PuTTY का pageant.exe चलाएँ , अपनी .ppk फ़ाइल ("कुंजी जोड़ें") खोलें, और अपनी कुंजी के लिए अपना पासफ़्रेज़ प्रदान करें।
  6. विंडोज के पर्यावरण चर डायलॉग ("कंप्यूटर" पर राइट-क्लिक करें, "गुण" पर क्लिक करें, "उन्नत सिस्टम सेटिंग्स" या "उन्नत" टैब पर क्लिक करें, "पर्यावरण चर" पर क्लिक करें)। निम्नलिखित पर्यावरण चर जोड़ें:

    GIT_SSH = C: \ पूर्ण \ पथ \ के लिए \ plink.exe

    पूर्ण स्थापना पथ के साथ "C: \ full \ path \" बदलें, जहां plink.exe पाया जाता है। संभवतः "उपयोगकर्ता चर" अनुभाग में इसे जोड़ना सबसे अच्छा है। इसके अलावा, सुनिश्चित करें कि आप जिस पथ का उपयोग प्लिंक। Exe के लिए करते हैं वह उस मार्ग से मेल खाता है जो आप Pageant (pageant.exe) के लिए उपयोग करते हैं। कुछ मामलों में आपके पास PuTTY की कई स्थापनाएं हो सकती हैं क्योंकि यह अन्य अनुप्रयोगों के साथ स्थापित हो सकती है। एक स्थापना से plink.exe और दूसरे से pageant.exe का उपयोग करने से आपको परेशानी होगी।

  7. एक कमांड प्रॉम्प्ट खोलें।

  8. यदि आप Github.com पर होस्ट किए गए git रिपॉजिटरी से कनेक्ट करने का प्रयास कर रहे हैं, तो निम्न कमांड चलाएँ:

    plink.exe git@github.com

    यदि आप जिस गिट रिपॉजिटरी को कनेक्ट करने का प्रयास कर रहे हैं उसे कहीं और होस्ट किया गया है, तो git@github.com को एक उपयुक्त उपयोगकर्ता नाम और URL से बदल दें। (गिथब को मानते हुए) आपको सूचित किया जाना चाहिए कि सर्वर की होस्ट कुंजी कैश नहीं है, और पूछा गया कि क्या आपको इस पर भरोसा है। Y के साथ उत्तर दें । यह PuTTY की ज्ञात मेजबानों की सूची में सर्वर की होस्ट कुंजी जोड़ देगा। इस चरण के बिना git कमांड ठीक से काम नहीं करेगा। एंट्री मारने के बाद, गितुब आपको सूचित करता है कि गितुब शेल एक्सेस प्रदान नहीं करता है। यह ठीक है ... हमें इसकी आवश्यकता नहीं है। (यदि आप किसी अन्य होस्ट से कनेक्ट कर रहे हैं, और यह आपको शेल एक्सेस देता है, तो संभवतः लिंक को समाप्त करने के लिए कुछ और किए बिना सबसे अच्छा है।)

  9. सब कुछ कर दिया! Git कमांड को अब कमांड लाइन से काम करना चाहिए। आप pageant.exe को अपने .ppk फ़ाइल को बूट समय पर स्वचालित रूप से लोड करना चाह सकते हैं , यह इस बात पर निर्भर करता है कि आपको कितनी बार इसकी आवश्यकता होगी।

दूसरा समाधान Windows, msysgit और TortoiseGit मानता है।

TortoiseGit, PuTTY निष्पादनों के साथ आता है, और पलक का एक विशेष रूप से संशोधित संस्करण (जिसे TortoisePlink.exe कहा जाता है) जो चीजों को आसान बना देगा।

  1. निर्देशानुसार msysgit और TortoiseGit स्थापित करें।
  2. यदि आपने पहले से ऐसा नहीं किया है, तो GitHub पर दिए गए निर्देश के अनुसार या अपने Git होस्ट द्वारा निर्देश के रूप में एक महत्वपूर्ण हैश उत्पन्न करें।
  3. फिर, यदि आपने पहले से ऐसा नहीं किया है, तो TortoiseGit के pageant.exe के साथ उपयोग के लिए अपनी कुंजी को TortoiseGit के puttygen.exe का उपयोग करके परिवर्तित करें । निर्देश पुट्टी के प्रलेखन में, पहले समाधान में जुड़े सहायक मार्गदर्शिका में, और साइबरस्पेस में कई अन्य स्थानों पर हैं।
  4. TortoiseGit का pageant.exe चलाएँ , अपनी .ppk फ़ाइल ("कुंजी जोड़ें") खोलें, और अपनी कुंजी के लिए अपना पासफ़्रेज़ प्रदान करें।
  5. विंडोज के पर्यावरण चर डायलॉग ("कंप्यूटर" पर राइट-क्लिक करें, "गुण" पर क्लिक करें, "उन्नत सिस्टम सेटिंग्स" या "उन्नत" टैब पर क्लिक करें, "पर्यावरण चर" पर क्लिक करें)। निम्नलिखित पर्यावरण चर जोड़ें:

    GIT_SSH = C: \ पूर्ण \ पथ \ \ TortoisePlink.exe को

    "C: \ full \ path \" को TortoiseGit के पूर्ण इंस्टॉलेशन पथ से बदलें, जहाँ TortoisePlink.exe पाया जाता है। संभवतः "उपयोगकर्ता चर" अनुभाग में इसे जोड़ना सबसे अच्छा है। इसके अलावा, सुनिश्चित करें कि आप जिस मार्ग का उपयोग TortoisePlink.exe के लिए करते हैं, वह उस मार्ग से मेल खाता है जो आप Pageant (pageant.exe) के लिए उपयोग करते हैं। कुछ मामलों में आपके पास PuTTY की कई स्थापनाएं हो सकती हैं क्योंकि यह अन्य अनुप्रयोगों के साथ स्थापित हो सकती है। TortoiseGit इंस्टॉलेशन और pageant.exe से TortoisePlink.exe का उपयोग किसी अन्य एप्लिकेशन की किसी अन्य इंस्टॉलेशन से (या स्टैंडअलोन PuTTY इंस्टॉलेशन से) करने से आपको परेशानी होगी।

  6. सब कुछ कर दिया! Git कमांड को अब कमांड लाइन से काम करना चाहिए। पहली बार जब आप अपने गिट रिपॉजिटरी से जुड़ने का प्रयास करते हैं, तो आपको संभवतः सूचित किया जाएगा कि सर्वर की होस्ट कुंजी कैश नहीं है, और पूछता है कि क्या आपको सर्वर पर भरोसा है। "हाँ" पर क्लिक करें। (यह कार्रवाई में TortoisePlink.exe है।)

    आप pageant.exe को अपने .ppk फ़ाइल को बूट समय पर स्वचालित रूप से लोड करना चाह सकते हैं , यह इस बात पर निर्भर करता है कि आपको कितनी बार इसकी आवश्यकता होगी।

तीसरा समाधान विंडो, msysgit, और देशी कमांड प्रॉम्प्ट मानता है।

  1. Msysgit स्थापित करें
  2. MS-DOS कमांड प्रॉम्प्ट पर git का उपयोग करने की अनुमति देना सुनिश्चित करें
  3. Daud start-ssh-agent
  4. SSH पासफ़्रेज़ दर्ज करें
  5. सब कुछ कर दिया! Git कमांड को अब देशी कमांड प्रॉम्प्ट में काम करना चाहिए।

3
यदि आपके पास GitExtensions और TortoiseGit दोनों हैं, जिनमें से प्रत्येक के पास पोटीन का अपना संस्करण है, तो सुनिश्चित करें कि आपने वास्तव में उपयोग किए जा रहे पेजेंट के लिए GIT_SSH परिवेश चर को पलक के पथ पर सेट किया है ।
shovavnik

15
यदि कोई व्यक्ति इस बेवकूफ त्रुटि में भागता है, तो सुनिश्चित करें कि आप SSH दूरस्थ URL प्रारूप का उपयोग कर रहे हैं (git @ host: accountname / reponame.git) HTTPS URL नहीं तो यह उस पासवर्ड के लिए पूछते रहेंगे ...
dain

जब मैं plink.exe git@github.com चलाता हूं, तो मुझे "FATAL ERROR: सर्वर अप्रत्याशित रूप से बंद नेटवर्क कनेक्शन" मिलता है
ब्रेट

4
नोट: विधि तीन को msysgit में अपस्ट्रीम किया गया है ताकि आप start-ssh-agentअपने SSH पासफ़्रेज़ को बचाने के लिए इसे कमांड लाइन में टाइप कर सकें ।
मैट क्लार्कसन

6
तीसरा समाधान केवल कमांड प्रॉम्प्ट बंद होने तक और केवल उस कमांड प्रॉम्प्ट के लिए काम करता है - अन्य सभी सीएमडी अभी भी पासफ़्रेज़ के लिए पूछते हैं। इसके अलावा अन्य सभी क्लाइंट (VS, VS कोड) रिमोट गिट के साथ संवाद करने में विफल रहते हैं।
दिमा

21

जब भी मैं इन निर्देशों को भूलता हूं, एक नया डेस्कटॉप सेट करता हूं, इसलिए मैं एक और उत्तर यहां जोड़ रहा हूं क्योंकि मैं इसे समान रूप से अक्सर ठोकर खाता हूं!


मेरे जैसे प्रभावशाली उपयोगकर्ताओं के लिए त्वरित कदम

  1. OpenSSH Authentication Agentसेवा को सक्षम करें और इसे स्वचालित रूप से प्रारंभ करें।
  2. ssh-addकमांड लाइन पर एजेंट के साथ अपनी SSH कुंजी जोड़ें ।
  3. टेस्ट गिट एकीकरण, अगर यह अभी भी आपके पासफ़्रेज़ के लिए पूछता है, तो जारी रखें।
  4. पर्यावरण $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exeसत्र को अपने सत्र में, या स्थायी रूप से अपने उपयोगकर्ता वातावरण में जोड़ें।

विस्तृत चरण: अवलोकन

पिछले कुछ समय से विंडोज ओपनएसएसएच के साथ शिपिंग कर रहा है इसमें Git के साथ काम करने के लिए ssh के लिए सभी आवश्यक बिट्स शामिल हैं, लेकिन यह अभी भी कुछ TLC की जरूरत है इससे पहले कि यह 100% मूल काम करता है। यहाँ मैं चरणों का अनुसरण कर रहा हूँ जो कि Windows ver 10.0.18362.449 के रूप में सफलता के साथ है (आप cmd.exe खोलकर और टाइप करके अपने विंडोज 10 संस्करण को देख सकते हैं ver)।

मैं यहां मानता हूं कि आपके पास पहले से ही अपना SSH कुंजी सेटअप है, और यह स्थित है ~/.ssh/id_rsa

अपने विंडोज 10 बॉक्स पर ssh- एजेंट सेवा को सक्षम करें।

  1. स्टार्ट-> टाइप 'सर्विसेज' और दिखाई देने वाले सर्विसेज ऐप पर क्लिक करें।
  2. OpenSSH Authentication Agentसूची में सेवा खोजें ।
  3. OpenSSH Authentication Agentसेवा पर राइट-क्लिक करें , और 'गुण' चुनें।
  4. बदले Startup type:के लिए Automatic
  5. Startसेवा की स्थिति बदलने के लिए बटन पर क्लिक करें Running
  6. क्लिक करके संवाद को खारिज करें OK, और सेवा ऐप को बंद करें।

में अपनी कुंजी जोड़ें ssh-agent

  1. अपनी वरीयता का खोल खोलें (मैं इस उदाहरण में विंडोज पॉवर्सशेल का उपयोग करूंगा, पॉवर्सशेल कोर पर भी लागू होता है)
  2. इसमें अपनी SSH कुंजी जोड़ें ssh-agent: ssh-add (यदि आप डिफ़ॉल्ट से अलग हैं तो पहले तर्क के रूप में अपनी कुंजी में पथ जोड़ सकते हैं)
  3. ऐसा करने के लिए संकेत मिलने पर अपना पासफ़्रेज़ दर्ज करें।

Git + SSH आज़माएं

  1. अपना शेल खोलें (फिर, मैं पॉवर्सशेल का उपयोग कर रहा हूं) और एक रेपो क्लोन करता हूंgit clone git@github.com:octocat/Spoon-Knife
  2. यदि आपको यह संकेत दिखाई देता है, तो अगले भाग पर जारी रखें:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

अपने GIT_SSHपर्यावरण चर सेट करें

किसी भी सत्र में आप बस इस पर्यावरण चर को सेट कर सकते हैं और आपके पासफ़्रेज़ के लिए संकेत आना बंद हो जाएगा और ssh ssh-agentआपकी ओर से उपयोग करेगा । वैकल्पिक रूप से, आप अपने पासफ़्रेज़ को अपने उपयोगकर्ता के वातावरण में स्थायी रूप से सेट कर सकते हैं।

GIT_SSHकेवल वर्तमान शेल में सेट करने के लिए :

  1. अपनी प्राथमिकता का खोल खोलें। (मेरे लिए शक्तियों)
  2. पर्यावरण चर GIT_SSH को उपयुक्त पर सेट करें ssh.exe:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. Try Git + SSH ऊपर दिए गए चरणों को पुनः प्रयास करें

GIT_SSHस्थायी रूप से स्थापित करने के लिए

  1. फ़ाइल एक्सप्लोरर खोलें। प्रारंभ-> 'फाइल एक्सप्लोरर' टाइप करें और सूची में उस पर क्लिक करें।
  2. 'इस पीसी' पर राइट-क्लिक करें और 'गुण' पर क्लिक करें।
  3. 'उन्नत सिस्टम सेटिंग्स' पर क्लिक करें।
  4. 'पर्यावरण चर ...' बटन पर क्लिक करें।
  5. 'उपयोगकर्ता चर के लिए your_user_name' के अंतर्गत नया क्लिक करें ...
  6. Variable name:GIT_SSH के लिए फ़ील्ड सेट करें
  7. Variable value:फ़ील्ड को पथ-से-ssh.exe (आमतौर पर C:\Windows\System32\OpenSSH\ssh.exe) पर सेट करें ।
  8. नए उपयोगकर्ता चर संवाद को खारिज करने के लिए ठीक पर क्लिक करें।
  9. पर्यावरण चर डायलॉग को खारिज करने के लिए ठीक क्लिक करें।
  10. Try Git + SSH ऊपर दिए गए चरणों को पुनः प्रयास करें

ध्यान दें कि यह संभवतया नए चरणों / प्रक्रियाओं के साथ बदलने जा रहा है जब विंडोज 10 आगे बढ़ता है और जैसा कि मैं और अधिक सीखता हूं। मैं इसे अद्यतन रखने का प्रयास करूंगा, मैं टिप्पणियों में प्रतिक्रिया के लिए उत्सुक हूं।


3
यह कम से कम विंडोज के लिए 1/31/2020 के रूप में सबसे पूर्ण उत्तर है। PUTTY या कुछ भी स्थापित करने की कोई आवश्यकता नहीं है।
जेक

माना। ऐसा प्रतीत होता है कि अंतर्निहित समर्थन अंत में यहां है।
एरोन लॉयड

पौराणिक कथा! इससे मेरी समस्या हल हो गई। कुछ समय के लिए एक समाधान की तलाश में रहे, विभिन्न चीजों की कोशिश कर रहे हैं और यह इस समस्या के लिए सबसे पूरा awnser हाथ नीचे है
Collin

एक अच्छा जवाब देने के लिए धन्यवाद और एक जिसने मुझे कुछ समय के आसपास गड़बड़ करने की सबसे अधिक संभावना को बचाया। +1
गुस्सा 84

20

अधिक विस्तृत निर्देशों की आवश्यकता वाले किसी व्यक्ति के लिए, इस पृष्ठ को देखें: http://help.github.com/working-with-key-passphrases/


वास्तव में मुझे msysgitशेल का उपयोग करने के लिए क्या चाहिए था ।
अरथुरकाय

1
Git Bash Desktop App का उपयोग करते समय मेरे लिए काम किया। मैंने notepad ~/.profileउस लिंक से सामग्री को कॉपी और पेस्ट किया, जीआईटी बैश को फिर से शुरू किया, मेरे पासवर्ड को दर्ज किया, मुनाफाखोरी की ...
Daryn

मैंने "ऑटो-लॉन्चिंग ssh-agent for Git for Windows" सेक्शन (विन 10 पर git 2.x का उपयोग करके) किया, लेकिन इसने मुझसे हर समय पासवर्ड मांगा। स्वीकृत जवाब से पहले समाधान (पोटीन) के बाद यह मेरे लिए तय किया।
jakub.g

20

यदि आप Windows के अंतर्गत Git bash का उपयोग कर रहे हैं तो आप निम्नलिखित कार्य कर सकते हैं:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

यह दूसरी कमांड में पास वाक्यांश के लिए पूछेगा, और यह बात है। प्रत्येक अतिरिक्त कार्रवाई जो आपको करने की आवश्यकता होगी (जो एक बार पास वाक्यांश आवश्यक है) आपको पास वाक्यांश के लिए नहीं पूछेगा (नीचे स्क्रीन में एक उदाहरण देखें):

विंडोज पर Git bash में पास वाक्यांश जोड़ना


2
यह भी विंडोज 10 में उबंटू सबसिस्टम में काम करता है
meetar

1
ध्यान दें कि यदि आपकी कीपेयर कहीं और स्थित है तो आप ~ .psh / * _ rsa को *
.pem

13

एक अतिरिक्त समाधान 5 साल, 8 महीने और सवाल पोस्ट किए जाने के 6 दिन बाद एक बुरा विचार नहीं होगा इसलिए यहाँ जाता है।

नोट: मान लें कि आप एक विंडोज़ कंप्यूटर का उपयोग कर रहे हैं।

  1. Git-credential-winstore डाउनलोड करें ।
  2. चलाओ! यदि आपके पास आपके PATHपर्यावरण चर में GIT है , तो यह बस काम करना चाहिए। यदि आप नहीं दौड़ते हैं git-credential-winstore -i C:\Path\To\Git.exe

अगली बार जब आप एक भंडार के लिए प्रतिबद्ध करने का प्रयास करते हैं, तो आपको अपनी साख दर्ज करने के लिए प्रेरित किया जाएगा। यही होना चाहिए। जब तक आप अपना पासवर्ड नहीं बदलेंगे, तब तक आपसे आपकी साख नहीं पूछी जाएगी।


बस आपके ज्ञान के लिए ... आपके क्रेडेंशियल्स को विंडोज क्रेडेंशियल स्टोर में संग्रहीत किया जाता है

आप मेरी साख कहाँ जमा कर रहे हैं?

यह ऐप आपके क्रेडेंशियल्स को रखने के लिए केवल मौजूदा विंडोज क्रेडेंशियल स्टोर का उपयोग करता है। आप नियंत्रण कक्ष> उपयोगकर्ता खाते> क्रेडेंशियल प्रबंधक पर जाकर और "विंडोज क्रेडेंशियल्स" चुनकर संग्रहीत क्रेडेंशियल्स देख सकते हैं। "Git:" शुरू होने वाली प्रविष्टियां git-क्रेडेंशियल-विनस्टोर से होती हैं।


8
यह समाधान केवल HTTPS, SSH रेपो के साथ काम नहीं करता प्रतीत होता है। / गुस्से में
जेसनकोडर

8

यदि आप अपनी कुंजी फ़ाइल के लिए पासवर्ड सेट करते हैं, तो कनेक्ट करते समय आपको हमेशा उस पासवर्ड को टाइप करना होगा। यदि आप एक पासवर्ड रहित कुंजी बनाते हैं, तो आपको इसे हर बार लिखना नहीं पड़ेगा, हालाँकि, आपकी कुंजी फ़ाइल तक पहुँच रखने वाला कोई भी व्यक्ति अब आपके जीथब खाते से जुड़ सकता है।

ssh-agent भी काम कर सकता है। इसे चलाने का प्रयास करें और देखें कि क्या यह आपके पासफ़्रेज़ को याद रखेगा।


रनिंग ssh-keygen -pसे ओपी को कोई पासफ़्रेज़ सेट करने की अनुमति मिलनी चाहिए
luchosrock

फिर भी पासवर्ड के लिए संकेत देना।
छंद

7

[संपादित करें - प्रश्न को गलत समझें, यह संबंधित समस्या का उत्तर है। पोस्टरिटी के लिए रीफ़्रेश किए गए संस्करण को छोड़कर]

मेरा मामला यह था कि मैं एक रेपो को धकेलने की कोशिश कर रहा था जो हमारे एक सर्वर पर होस्ट किया गया था। जब भी मैंने एक पुश करने की कोशिश की, git मुझसे मेरा पासवर्ड (nb - पासवर्ड, न कि मेरी निजी कुंजी के पासफ़्रेज़ से पूछेगा)।

सर्वर पर अधिकृत कुंजी में अपनी सार्वजनिक कुंजी जोड़कर, मैं उस सर्वर पर पासवर्ड-मुक्त पुश प्राप्त करने में सक्षम था। और, क्योंकि कोई पासफ़्रेज़ नहीं था मेरी निजी कुंजी पर (जो कि खराब प्रैक्टिस btw है!) मुझे कुछ भी टाइप करने की ज़रूरत नहीं थी।

यहां आपकी सार्वजनिक कुंजी को सर्वर से जोड़ने की आज्ञा है। यह मानता gitहै कि उपयोगकर्ता सर्वर पर उपयोगकर्ता है।

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

आप सर्वर पर लॉग इन करके और फ़ाइल पर अपनी सार्वजनिक कुंजी को मैन्युअल रूप से जोड़कर एक ही चीज़ प्राप्त कर सकते हैं ~/.ssh/authorized_keys


क्या आप इसे किसी ऐसे व्यक्ति द्वारा उपयोग किए जा सकने वाले विवरण में बदल सकते हैं, जिसके पास शेल तक पहुंच नहीं है? उदा। हमें नोटपैड या इसी तरह का उपयोग करके अधिकृत_की में क्या रखना चाहिए?
जॉन लिटिल

4

मुझे लगता है कि यह कई वर्षों का अतिदेय है, लेकिन मैं इस सवाल को टटोल रहा हूं और इसके लिए एक समाधान खोजने की कोशिश कर रहा हूं, और मुझे कुछ ऐसा मिला, जो विशेषज्ञता के सभी स्तरों के अनुकूल है, इसलिए मैंने सोचा कि मैं साझा करूंगा।

GitHub एक बहुत ही उपयोगी इंस्टॉलर प्रदान करता है जो सब कुछ अच्छा और आसान बनाता है: https://help.github.com/articles/caching-your-github-password-in-git/


कृपया ध्यान दें कि यह आपके GitHub पासवर्ड को कैश कर रहा है , न कि GPG कुंजी पासफ़्रेज़ को।
जज 2020

4

मान लेते हैं कि आप केवल TortoiseGit या PuTTY का उपयोग किए बिना एक शुद्ध गिट बैश समाधान का उपयोग करना चाहते हैं । इसके अलावा, आप अपने पासफ़्रेज़ को स्थायी रूप से संग्रहीत नहीं करना चाहते क्योंकि यह लगभग वैसा ही है जैसे कि आपने पहली बार में बिना पासफ़्रेज़ के अपना SSH कुंजी उत्पन्न किया हो। लेकिन आप अभी भी कुछ कैशिंग का उपयोग करना चाहते हैं।

कैशिंग प्रयोजनों के लिए ssh-agentप्रक्रिया का उपयोग किया जाता है, जिसे गिट बैश वितरण के साथ शामिल किया गया है। यह प्रक्रिया डिफ़ॉल्ट रूप से शुरू नहीं हुई है, इसलिए इसे पहले लॉन्च करने की आवश्यकता है। किसी भी SSH कुंजी को कैश करने के लिए उन्हें इस प्रक्रिया में ssh-addकमांड के साथ जोड़ा जाना चाहिए जो आपको कुंजी के पासफ़्रेज़ के लिए संकेत देगा और इसे मेमोरी में स्टोर करेगा।

अन्य समाधानों की कमियां:

  • GitHub के लेख ssh-agentमें ऑटो-लॉन्चिंग शुरू से ही एक पासफ़्रेज़ के लिए कहता है, जब आप Git Bash लॉन्च करते हैं, भले ही आपको इस सत्र में अपनी SSH कुंजी का उपयोग करने की आवश्यकता हो या नहीं। यदि आप आज अपने स्थानीय रेपो के साथ काम कर रहे हैं, तो आप शायद तभी पासफ़्रेज़ प्रदान करना चाहेंगे जब वास्तव में ज़रूरत हो (जैसे कि रिमोट रेपो के साथ बातचीत करते समय)।
  • यदि आप अपने लाइकssh-agent को GitLab के लेख में लॉन्च करते हैं, eval $(ssh-agent -s)तो आप शायद हर बार टाइप करके थक जाते हैं। संभावना है, अंततः, आपने .bashrcऑटो-लॉन्च करने के लिए उन दो पंक्तियों को अपने कॉन्फ़िगरेशन में जोड़ा है । डाउनसाइड्स ऊपर वाले प्लस के समान हैं: प्रत्येक बार जब आप एक नया गिट बैश टर्मिनल लॉन्च करते हैं, तो आपको एक अतिरिक्त ssh- एजेंट प्रक्रिया मिलेगी (यदि यह प्रक्रिया पहले ही शुरू हो गई है तो GitHub की bash स्क्रिप्ट की जाँच करता है)।
  • उपरोक्त दोनों की तरह, लेकिन विशेष रूप से तब जब आपके पास अलग-अलग मेजबानों के लिए अलग-अलग SSH कुंजियाँ हों, जैसे GitHub के लिए एक और GitLab के लिए एक और एक, इसलिए उन सभी को एक बार प्रदान करना कष्टप्रद और असुविधाजनक है।

तो यह समाधान उन लोगों के लिए है जो आश्चर्यचकित करते हैं कि कैसे Git Bash बनाने के लिए केवल एक बार Windows सत्र के लिए और केवल तभी पासफ़्रेज़ के लिए कहें। यह GnuPG के साथ पासफ़्रेज़ प्रबंधन के व्यवहार से मिलता-जुलता है, जिसमें ऑटो-साइनिंग का उपयोग किया गया है default-cache-ttl

एसएसएच को कॉन्फ़िगर करना, पासफ्रीसेस के लिए एक बार पूछने के लिए, जब आवश्यक हो, केवल गिट बैश का उपयोग कर

  1. सबसे पहले, हम ssh-agentगिट बैश शेल शुरू करते समय ऑटो लॉन्च करना चाहते हैं । हम इसके लिए संशोधित GitHub की स्क्रिप्ट का उपयोग करेंगे क्योंकि यह जाँच करता है कि क्या प्रक्रिया पहले ही शुरू हो गई है, लेकिन हम इसे ssh-addअभी कुंजी के लिए नहीं चाहते हैं । यह स्क्रिप्ट को जाता है अपने ~/.bashrcया ~/.profileया ~/.bash_profile( ~है अपने उपयोगकर्ता की होम निर्देशिका की तरह C:\Users\Username- रन cd ~और फिर pwdउसे प्रिंट Git बैश के लिए):

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. अब एक ~/.ssh/configफ़ाइल को संपादित या बनाएं और AddKeysToAgentप्रत्येक होस्ट छंद के लिए एक विकल्प जोड़ें जिसे आप कैशिंग चालू करना चाहते हैं (आप सभी होस्ट घोषणाओं से पहले फ़ाइल की शुरुआत में निर्देश रखकर इसे विश्व स्तर पर चालू कर सकते हैं):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    Ssh config man पेज से : यदि यह विकल्प हां में सेट होता है और एक फाइल से एक कुंजी लोड होती है, तो कुंजी और उसके पासफ़्रेज़ को डिफ़ॉल्ट जीवनकाल के साथ एजेंट में जोड़ दिया जाता है, जैसे कि ssh-add (1) द्वारा।

डिफ़ॉल्ट अधिकतम जीवनकाल हमेशा के लिए होता है या जब तक कि ssh-agentप्रक्रिया नहीं मारी जाती है (या तो मैन्युअल रूप से कार्य प्रबंधक से या जब आपका पीसी बंद हो जाता है)। यदि आप एक परिमित समय का उपयोग करना चाहते हैं, तो आप इसे ssh-Agent के -tपैरामीटर के साथ सेट कर सकते हैं । ऊपर के पहले चरण से बैश स्क्रिप्ट में लाइन बदलें, जैसे 30 मिनट की कैश लाइफ के लिए:

(umask 077; ssh-agent -t 30m >| "$env")

अन्य समय प्रारूप क्वालिफायर के लिए यहां देखें ।


3

आप .bashrcअपने उपयोगकर्ता की होम डायरेक्टरी में एक फ़ाइल बना सकते हैं C:/Users/youruser, जैसे और वहाँ डाल सकते हैं:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

यह स्क्रिप्ट बैश रन के बाद हर बार निष्पादित होती है। तो आपको पासवर्ड केवल एक बार दर्ज करने की आवश्यकता होगी, जब git-bashशुरू किया जाता है!

बैश के कुछ संस्करणों के .bash_profileबजाय फ़ाइल की आवश्यकता होती है .bashrc, इसलिए केवल केस क्लोन में .bashrc:

copy .bashrc .bash_profile

1

जब आप -k arg जोड़ने का प्रयास कर सकते हैं;

ssh-add -k ~/.ssh/id_rsa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.