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


125

मेरे पास एक स्वचालित भवन सेवा है जो एक गिट निजी भंडार से डाउनलोड होती है। समस्या यह है कि जब यह रिपॉजिटरी को क्लोन करने की कोशिश करता है तो इसे पासवर्ड प्रदान करने की आवश्यकता होती है, क्योंकि यह याद नहीं है; इसलिए क्योंकि कोई मानवीय संपर्क नहीं है, यह हमेशा के लिए पासवर्ड का इंतजार करता है। मैं इसे id_rsa.pub से याद करने के लिए कैसे मजबूर कर सकता हूं?

जवाबों:


255

विंडोज उपयोगकर्ताओं के लिए, बस एक नोट यह है कि मैं इसे शुरू करने के बाद एक बार मुझे लॉग इन करने के लिए गिट बैश वातावरण कैसे सेट करता हूं। मैं अपनी ~/.bashrcफ़ाइल संपादित करता हूं :

eval `ssh-agent`
ssh-add

इसलिए जब मैं गिट बैश शुरू करता हूं, तो ऐसा लगता है:

Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

और अब मैं हर समय लॉग इन किए बिना अन्य सर्वरों के लिए ssh कर सकता हूं।


9
यदि आपके पास ~ / .bashrc फ़ाइल नहीं है, तो बस एक नई टेक्स्ट फ़ाइल (नोटपैड या कुछ अन्य संपादक) बनाएं और बताई गई दो पंक्तियों को जोड़ दें।
pbz

7
'~' आपके "होम डायरेक्टरी" को संदर्भित करता है। विंडोज में, आप एक कमांड शेल (cmd) खोलकर और "इको% USERPROFILE%" टाइप करके पा सकते हैं।
हकीकी पार्कर

14
मेरे लिए यह वाक्य रचना काम नहीं कर रही है। मुझे eval $(ssh-agent)इसके बजाय लिखना था ।
क्लैश

1
मेरा मुद्दा यह था कि मुझे ssh-add का उपयोग करने के लिए फ़ाइल निर्दिष्ट करने की आवश्यकता थी। शायद इसलिए कि मेरे पास एक से अधिक हैं और डिफ़ॉल्ट नाम का उपयोग नहीं कर रहे थे। उदाहरणssh-add ~/.ssh/myfile_rsa
सिंटेक्स एरर

1
copy > ~/.bashrcin git bash, windows में bashrc फ़ाइल बनाने के लिए, त्रुटि को अनदेखा करें
Ruben

61

यह उत्तर बताता है कि कैसे GitHub उपयोगकर्ता नाम और पासवर्ड को स्थायी रूप से संग्रहीत किया जा सकता है, SSH कुंजी पासफ़्रेज़ नहीं।

विंडोज में, बस चलाएं

$ git config --global credential.helper wincred

इसका मतलब है कि अगली बार जब आप धक्का देते हैं, तो आप हमेशा की तरह अपने उपयोगकर्ता नाम और पासवर्ड दर्ज करेंगे, लेकिन वे विंडोज क्रेडेंशियल में सहेजे जाएंगे। इसके बाद आपको उन्हें फिर से दर्ज नहीं करना पड़ेगा।

के रूप में, हर बार उपयोगकर्ता नाम और पासवर्ड दर्ज किए बिना GitHub को पुश करें (विंडोज पर Git Bash)


2
इस कमांड के बाद आपको अपना यूजर नेम और पासवर्ड टाइप करना होगा।
स्टीफन तुंग आंग

5
क्या यह SSH कुंजी, या केवल HTTPS (उपयोगकर्ता नाम और पासवर्ड) प्रमाणीकरण से संबंधित है? प्रश्न SSH कुंजी का उपयोग करने के बारे में प्रतीत होता है।
सीन

मेरे लिए पूरी तरह से काम किया, मुझे लगता है कि मैं HTTPS (उपयोगकर्ता नाम और पासवर्ड) प्रमाणीकरण का उपयोग कर रहा हूं।
जोनाथन

इसे चलाने से कोई आउटपुट नहीं मिला।
user9993

@ user9993 यह नहीं होगा। यह एक कॉन्फ़िगरेशन परिवर्तन है, इसलिए जब कोई आउटपुट नहीं बनाया gitजाएगा , तो कॉन्फ़िगरेशन निर्देश सेट के अनुसार इसका व्यवहार बदल जाएगा।
स्टारबिम्रेनबोलाब्स

9

नए टर्मिनल खोलते समय मुझे अपने SSH पासफ़्रेज़ को टाइप करने की ज़रूरत नहीं है; दुर्भाग्य से स्टॉर्मोनीक के समाधान के लिए पासवर्ड को हर सत्र के लिए टाइप करना पड़ता है। इसके बजाय, मेरी .bash_profileफ़ाइल में यह है :

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.

env=~/.ssh/agent.env

# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
}

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

if ! agent_is_running; then
    agent_load_env
fi

# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

unset env

यह नए टर्मिनल सत्रों के लिए मेरा पासफ़्रेज़ भी याद रखेगा; मुझे केवल एक बार इसे टाइप करना है जब मैं बूट करने के बाद अपना पहला टर्मिनल खोलता हूं।

मुझे इसका श्रेय चाहिए जहां मुझे यह मिला; यह किसी और के काम का एक संशोधन है, लेकिन मुझे याद नहीं है कि यह कहां से आया है। धन्यवाद अनाम लेखक!

अपडेट 2019-07-01: मुझे नहीं लगता कि यह सब आवश्यक है। अब मुझे लगातार यह सुनिश्चित करना है कि मेरी .bash_profileफ़ाइल ssh-agent चलाए:

eval $(ssh-agent)

फिर मैंने एक sshकॉन्फ़िगरेशन फ़ाइल इस तरह सेट की :

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config

मुझे अब भी हर बार अपना पासफ़्रेज़ मांगा जाता है।
रयान

1
@Ryan को उम्मीद है कि मैंने अभी जो अपडेट जोड़ा है वह आपकी समस्या का समाधान करेगा। मैं जानकारी अप टू डेट पर एक ब्लॉग पोस्ट में रखने conan.is/blogging/clojure-on-windows.html पर, और मैं एक ही प्रश्न पूछा अपने आप stackoverflow.com/questions/52423626/...
कॉनन

धन्यवाद, मैं इसकी जाँच करूँगा।
रयान

@Canan प्रति बैश सत्र में अद्यतन समाधान कार्य। अपने रनिंग बैश सत्र को बंद करने और एक नया खोलने के बाद, मुझे फिर से पासवर्ड डालने के लिए कहा गया।
तुषार राज

5

यदि मैं प्रश्न को सही ढंग से समझता हूं, तो आप पहले से ही निर्मित सेवा में अधिकृत SSH कुंजी का उपयोग कर रहे हैं, लेकिन आप हर क्लोन के लिए पासफ़्रेज़ टाइप करने से बचना चाहते हैं?

मैं ऐसा करने के दो तरीकों के बारे में सोच सकता हूं:

  1. यदि आपकी बिल्ड सेवा अंतःक्रियात्मक रूप से प्रारंभ की जा रही है: इससे पहले कि आप बिल्ड सेवा प्रारंभ करें, ssh-agentपर्याप्त रूप से लंबे समय के लिए प्रारंभ करें ( -tविकल्प)। फिर ssh-addअपनी बिल्ड सेवा शुरू करने से पहले आपको उन सभी निजी कुंजियों को जोड़ने के लिए (msysGit का उपयोग करना चाहिए) शामिल हैं। आपको अभी भी सभी पासफ़्रेज़ को टाइप करना होगा, लेकिन केवल एक बार सेवा शुरू होने के बाद।

  2. यदि आप पासफ़्रेज़ टाइप करने से बचना चाहते हैं, तो आप हमेशा SSH कुंजी से पासफ़्रेज़ निकाल सकते हैं, जैसा कि /server/50775/how-do-i-change-my- में वर्णित है निजी-कुंजी-पासफ़्रेज़ , खाली नया पासफ़्रेज़ सेट करके। यह पूरी तरह से पासवर्ड प्रॉम्प्ट के साथ दूर करना चाहिए, लेकिन यह पिछले विकल्प की तुलना में कम सुरक्षित है।


दूसरे विकल्प के लिए धन्यवाद, मुझे इसकी आवश्यकता थी।
स्टैनिस्लाव वेरजिकोव्स्की

1

जब मैंने अपना कोड धकेलने का प्रयास किया, तो मुझे नीचे त्रुटि मिली:

$ git push origin dev

remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403

कुछ घंटों के शोध के बाद, मैंने पाया कि मुझे नीचे दिए गए आदेश का उपयोग करने की आवश्यकता है:

$ git config --global credential.helper cache

उपरोक्त कमांड निष्पादित करने के बाद, मुझे अपना GitHub उपयोगकर्ता नाम और पासवर्ड दर्ज करने का संकेत मिला। सही साख प्रदान करने के बाद, मैं अपने कोड को आगे बढ़ाने में सक्षम हूं।


यह सिर्फ "git: 'क्रेडेंशियल-कैश' एक git कमांड नहीं है।" हालांकि "git config --global क्रेडेंशियल.हेलपर स्टोर" ने काम किया - यह सबसे अच्छा नहीं हो सकता है, लेकिन मैं अपने पसंदीदा SSH के बजाय HTTPS का उपयोग करने के लिए मजबूर हूं और बस यह काम करना चाहता हूं।
टेरी ब्राउन

0

सही समाधान है:

  1. Windows डिफ़ॉल्ट टर्मिनल - cmd चलाएं और अपने मास्टर प्रोफ़ाइल की निर्देशिका प्राप्त करें

    echo %USERPROFILE%
    
  2. ऊपर दी गई डायरेक्टरी में Git Bash चलाएं और .bashrcकमांड के साथ फाइल बनाएं

    echo "" > .bashrc
    
  3. .bashrcअपने पसंदीदा पाठ संपादक के साथ फ़ाइल खोलें और उस फ़ाइल में GitHub सहायता से कोड पेस्ट करें :

    env=~/.ssh/agent.env
    ...
    COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
    
  4. Git Bash को पुनरारंभ करें और यह आपसे आपका पासवर्ड (केवल पहली बार) और किया गया है। कोई पासवर्ड फिर से परेशान।


-1

आपको उस उपयोगकर्ता authorized_keysके .sshफ़ोल्डर में फ़ाइल बनाने की आवश्यकता है जिसके तहत आप रिपॉजिटरी सर्वर से कनेक्ट करने जा रहे हैं। उदाहरण के लिए, यह सोचते हैं आप उपयोगकर्ता नाम का उपयोग buildserviceपर repo.serverआप चला सकते हैं:

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys

फिर आपको निम्नलिखित चीजों की जांच करनी होगी:

  1. इसी id_rsaनिजी कुंजी को प्रस्तुत किया गया है builservice@build.server:~/.shh/id_rsa

  2. buildservice@build.server:~/.ssh/known_hostsफ़ाइल में repo.server का वह फ़िंगरप्रिंट संग्रहीत किया जाता है। आमतौर पर जो sshकनेक्ट करने के पहले प्रयास के बाद किया जाएगा repo.server


मैं कहना भूल गया। विंडोज के तहत आप होम डायरेक्टरी शायद C: \ Users \ Username
beduin

5
हम्म .. गिट बैश में यह सब है, सवाल का अधिक ध्यान से शीर्षक पढ़ें। इसके अलावा सवाल से मुझे लगा कि कुंजी-जोड़ी पहले से ही उत्पन्न हो गई है (क्योंकि यह पूछा गया था कि id_rsa.pub को याद करने के लिए रेपो सर्वर को कैसे मजबूर किया जाए।) प्रारूपण के बारे में क्षमा करें।
बेडूइन

1
ठीक है, पहले कभी 'गिट बैश' के बारे में नहीं सुना। क्षमा करें 'बाउट कि
सेह

मैं मान रहा हूँ कि यह msysgit का उपयोग कर रहा है। मैं टैग जोड़ रहा हूं।
एडम डाइमिट्रुक

3
चेतावनी! उपयोग करने cat id_rsa.pub > .ssh/authorized_keysसे किसी भी मौजूदा अधिकृत कुंजी को अधिलेखित कर दिया जाएगा। >>ओवरराइट के बजाय जोड़ने के लिए उपयोग करें ।
डेविड पेर्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.