एक बार लॉगिन करने के लिए SSH पर Git कॉन्फ़िगर करना


195

मैंने ssh पर अपना git रिपॉजिटरी क्लोन किया है। इसलिए, हर बार जब मैं मूल मास्टर के साथ धक्का या खींचकर संवाद करता हूं, तो मुझे अपना पासवर्ड पुनः दर्ज करना होगा। मैं git को कैसे कॉन्फ़िगर कर सकता हूं ताकि मुझे कई बार अपना पासवर्ड दर्ज करने की आवश्यकता न हो?


7
एक सुरक्षा मुद्दे की तरह लगता है, आपको सामान्य कमिट करने के लिए किसी भी पासवर्ड का उपयोग करने की आवश्यकता नहीं है, लेकिन एक धक्का एक ऐसी चीज है जिसे आप फिर से प्रमाणित करना चाहते हैं, लेकिन शायद मैं पुराने जमाने का हूं।
एलेक्स सेक्सटन

जवाबों:


104

कोशिश करें ssh-add, आपको ssh-agentअपनी निजी कुंजी चलाने और धारण करने की आवश्यकता है

(ठीक है, अद्यतन किए गए प्रश्न का उत्तर देते हुए, आप पहली बार ssh-keygenसार्वजनिक और निजी कुंजी बनाने के लिए दौड़ते हैं जैसा कि Jefromi ने समझाया है । आपने सार्वजनिक कुंजी सर्वर पर रखी है। आपको पासफ़्रेज़ का उपयोग करना चाहिए, यदि आपके पास सादे के बराबर नहीं है। अपनी निजी कुंजी में पासवर्ड डालें। लेकिन जब आप करते हैं, तो आपको ssh-agentनीचे बताए अनुसार व्यावहारिक मामले की आवश्यकता होती है ।)

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

सभी ssh-family कमांड्स 1 तब एजेंट से परामर्श करेंगे और स्वचालित रूप से आपकी निजी कुंजी का उपयोग करने में सक्षम होंगे।

OSX (इरेट ( macOS ), GNOME और KDE सिस्टम पर, ssh-agentआमतौर पर आपके लिए स्वचालित रूप से लॉन्च किया जाता है। मैं मामले में विवरण के माध्यम से जाऊंगा, मेरी तरह, आपके पास भी एक साइगविन या अन्य विंडोज़ वातावरण है जहां यह सबसे निश्चित रूप से आपके लिए नहीं किया गया है।

यहां से शुरू करें: man ssh-agent

एजेंट को स्वचालित रूप से चलाने के लिए विभिन्न तरीके हैं। जैसा कि मैन पेज बताता है, आप इसे चला सकते हैं ताकि यह आपके सभी लॉगिन सत्र की अन्य प्रक्रियाओं का एक अभिभावक हो। इस तरह, यह जो पर्यावरण चर प्रदान करता है, वह स्वचालित रूप से आपके सभी गोले में होगा। जब आप (बाद में) आह्वान करते हैं ssh-addया sshदोनों के पास एजेंट की पहुंच होगी, क्योंकि वे सभी जादू सॉकेट पाथनाम या जो भी हो, के साथ पर्यावरण चर हैं।

वैकल्पिक रूप से, आप एजेंट को एक साधारण बच्चे के रूप में चला सकते हैं, एक फाइल में पर्यावरण सेटिंग्स को बचा सकते हैं, और एक स्रोत है जो हर शेल में तब शुरू होता है।

मेरा OSX और उबंटू सिस्टम स्वचालित रूप से एजेंट लॉन्च सेटअप करते हैं, इसलिए मुझे केवल ssh-addएक बार चलना होगा । दौड़ने की कोशिश करें ssh-addऔर देखें कि क्या यह काम करता है, यदि ऐसा है, तो आपको बस एक बार रिबूट करने की आवश्यकता है।

मेरे Cygwin प्रणाली यह मैन्युअल रूप से किया, इसलिए मैं अपने में ऐसा किया जरूरत .profileऔर मैं .bashrcस्रोत .profile:

. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
        ssh-agent > .agent
        . .agent > /dev/null
}

.agentफ़ाइल स्क्रिप्ट के द्वारा स्वचालित रूप से बनाया जाता है; इसमें पर्यावरण चर परिभाषाएँ और निर्यात शामिल हैं। उपरोक्त .agent फ़ाइल को स्रोत करने का प्रयास करता है, और फिर ps(1)एजेंट को आज़माता है । यदि यह काम नहीं करता है तो यह एक एजेंट शुरू करता है और एक नई एजेंट फ़ाइल बनाता है। आप बस चला भी सकते हैं ssh-addऔर अगर यह विफल रहता है तो एजेंट शुरू करें।


1. और यहां तक sudoकि सही पैम एक्सटेंशन के साथ स्थानीय और दूरस्थ ।


1
इसके उत्पादन से सोर्सिंग के बजाय ssh-agentशायद इसका उपयोग करने के लिए neater है:eval `ssh-agent`
स्कैट्ससम

287

GitHub के साथ एक समान समस्या थी क्योंकि मैं HTTPS प्रोटोकॉल का उपयोग कर रहा था। यह जांचने के लिए कि आप किस प्रोटोकॉल का उपयोग कर रहे हैं

git config -l

और लाइन को शुरू करने के साथ देखें remote.origin.url। अपने प्रोटोकॉल को बदलने के लिए

git config remote.origin.url git@github.com:your_username/your_project.git

13
मुझे लगता है कि यह आधिकारिक उत्तर होना चाहिए, ^ 5 @Muein!
फेर मार्टिन

14
यह तब काम नहीं करता जब रेपो निजी है और आप मालिक नहीं हैं। मुझे सिर्फ एक Permission deniedत्रुटि का सामना करना पड़ा ।
15

7
यह केवल एक रेपो के लिए है, मैं इसे विश्व स्तर पर कैसे बना सकता हूं?
onmyway133

2
@ogzd GitHub (या जो भी सेवा आप उपयोग कर रहे हैं) को काम करने से पहले आपकी सार्वजनिक SSH कुंजी की आवश्यकता होगी, लेकिन यह अभी भी सही समाधान है।
मैट

एक विकल्प हैgit remote set-url origin git@github.com:your_username/your_project.git
icosamuel

24

यह ssh को कॉन्फ़िगर करने के बारे में है, न कि गिट को। यदि आपने पहले से नहीं किया है, तो आपको ssh-keygenएक प्रमुख जोड़ी बनाने के लिए (रिक्त पासफ़्रेज़ के साथ) का उपयोग करना चाहिए । उसके बाद, आप सार्वजनिक कुंजी को दूरस्थ गंतव्य के साथ कॉपी करते हैं ssh-copy-id। जब तक आपको कई कुंजियों की आवश्यकता नहीं होती है (जैसे अन्य उद्देश्यों के लिए पासफ़्रेज़ के साथ अधिक सुरक्षित) या आपके पास वास्तव में कुछ अजीब कई-पहचान वाले सामान हैं, तो यह बहुत आसान है:

ssh-keygen   # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host

संपादित करें: आपको वास्तव में सिर्फ DigitalRoss के उत्तर को पढ़ना चाहिए, लेकिन: यदि आप पासफ़्रेज़ के साथ कुंजियों का उपयोग करते हैं, तो आपको ssh-add <key-file>उन्हें जोड़ने के लिए उपयोग करना होगा ssh-agent(और जाहिर है ssh-agentकि यदि आपका वितरण पहले से ही आपके लिए नहीं चल रहा है तो शुरू करें)।


2
मुझे यकीन नहीं है कि यह सवाल का जवाब देता है, वह पहले ही कर चुका होगा या वह साइट तक नहीं पहुंच पाएगा। उन्हें जो जवाब चाहिए वह है: ssh-agentजैसे-जैसे वह एंटर-द-पासफ़्रेज़-हर-टाइम समस्या को बायपास करना चाहते हैं। डाउनवोटिंग नहीं, लेकिन मुझे लगता है कि आपको इस उत्तर को सुधारने की आवश्यकता है, जब तक कि मैं गलत नहीं हूं ...
DigitalRoss

2
@DigitalRoss: आह, मुझे इस सवाल को पढ़ने से यकीन नहीं था कि क्या वास्तव में ओपी के पास चाबियाँ थीं। आप शायद सही हैं, और मैं जानबूझकर पासफ़्रेज़ का उपयोग नहीं करने का सुझाव देने की कोशिश कर रहा था। हालाँकि, आप निश्चित रूप से सही हैं ssh-agent। आप को +1!
कास्कैबेल

मुझे उलझन है कि मुझे ssh-keygen या ssh-add का उपयोग करने की आवश्यकता है या नहीं। मेरे ~ / .ssh / निर्देशिका में मेरे पास केवल दो फाइलें हैं: config और ज्ञात_होस्ट। ऐसा लगता है कि ssh-add के लिए एक और फ़ाइल ~ / .ssh / id_rsa की आवश्यकता है। क्या मुझे उस फ़ाइल को पहले ssh-keygen का उपयोग करके बनाना चाहिए जैसा कि @ जेफ्रोमी ने समझाया?
रेप्रोग्राममर

हां, आपको दूरस्थ सर्वर पर कॉपी करने से पहले कुंजी बनाने की आवश्यकता है। मुझे लगता है कि शायद हम "पासफ़्रेज़" शब्द के आपके उपयोग से भ्रमित थे - कि ssh-*कुंजी का उपयोग करने के लिए आवश्यक पासफ़्रेज़ को क्या कहते हैं - जहां आपको वास्तव में रिमोट पर अपने वास्तविक उपयोगकर्ता पासवर्ड का मतलब था?
कास्केबेल

हाँ, मुझे पासफ़्रेज़ के बजाय पासवर्ड कहना चाहिए था।
reprogrammer

23

सुनिश्चित करें कि जब आपने रिपॉजिटरी को क्लोन किया था, तो आपने SSH URL के साथ ऐसा किया था न कि HTTPS के साथ; रेपो के क्लोन URL बॉक्स में, URL कॉपी करने से पहले SSH प्रोटोकॉल चुनें। नीचे चित्र देखें:

यहां छवि विवरण दर्ज करें


23

यदि आपने HTTPS (अनुशंसित) का उपयोग करके क्लोन किया है : -

git config --global credential.helper cache

और फिर

git config --global credential.helper 'cache --timeout=2592000'
  • टाइमआउट = 2592000 (सेकंड में 30 दिन) 30 दिनों के लिए कैशिंग सक्षम करने के लिए (या जो भी आप सूट करता है)।

  • अब एक साधारण git कमांड चलाएं जिसके लिए आपके उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है।

  • एक बार अपने क्रेडेंशियल दर्ज करें और अब 30 दिनों के लिए कैशिंग सक्षम है।

  • किसी भी git कमांड के साथ फिर से प्रयास करें और अब आपको किसी भी क्रेडेंशियल की आवश्यकता नहीं है।

  • अधिक जानकारी के लिए: - GitHub पासवर्ड को Git में कैशिंग करें

नोट : क्रेडेंशियल हेल्पर का उपयोग करने के लिए आपको 1.7.10 या नए की आवश्यकता होगी। सिस्टम रीस्टार्ट होने पर, हमें फिर से पासवर्ड डालना होगा।


1
आप एक उद्धारक हैं, हर बार उपयोगकर्ता नाम पासवर्ड टाइप करते समय थक गए थे। धन्यवाद :)
डेव रंजन

कृपया निर्दिष्ट करें कि यह केवल या केवल विंडोज या दोनों के लिए है।
joedotnot

सभी ओएस के लिए @joedotnot। आप उल्लिखित लिंक भी ब्राउज़ कर सकते हैं और वहां आपको शीर्षक के ठीक नीचे OS विकल्प मिलेगा।
निशांत थपलियाल

यह! हर मामले में काम करता है।
एकैस्तेफ 7

@Charles हाय, मैं बस एक ही परीक्षण किया है और यह उम्मीद के मुताबिक काम कर रहा है।
निशांत थपलियाल

8

उन लोगों के लिए मुईन के विचारों का विस्तार करना जो सीधे गिट-बैश या टर्मिनल में चल रहे आदेशों पर फ़ाइलों को संपादित करना पसंद करते हैं।

अपनी परियोजना की .git निर्देशिका पर जाएं (अपने स्थानीय मशीन पर प्रोजेक्ट रूट) और 'कॉन्फ़िगरेशन' फ़ाइल खोलें। फिर [दूरस्थ "मूल"] देखें और निम्न प्रकार से url कॉन्फ़िगर सेट करें:

[remote "origin"]
    #the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
    url = git@github.com:<username>/<projectname>.git

1
इससे वाकई मदद मिली। समस्या को ठीक करने का सुरक्षित और स्वच्छ तरीका। मुझे लगता है कि किसी को इस के साथ मुइन के जवाब में सुधार करना चाहिए।
लुइस ओर्टेगा अरानेडा

1
पहली बार कोशिश कर रहे "अपनी परियोजना के
.IT

यह त्रुटि "घातक: मैं प्रोटोकॉल को नहीं संभालता 'git@github.com: <उपयोगकर्ता नाम> / https'"
शिवम भारद्वाज

@ शिवम भारद्वाज ने एक त्वरित खोज में इस सूत्र का खुलासा किया है stackoverflow.com/questions/30474447/… । क्या कोई संभावना है कि आप किसी वेबसाइट से git क्लोन कमांड को कॉपी कर रहे हैं और इस मुद्दे पर चल रहे हैं? यदि हाँ, तो इसके बजाय पूरा कमांड टाइप करने का प्रयास करें।
uchamp

6

मुझे लगता है कि यहां दो अलग चीजें हैं। पहला यह है कि सामान्य SSH प्रमाणीकरण के लिए उपयोगकर्ता को खाते का पासवर्ड डालने की आवश्यकता होती है (जहाँ sshd कॉन्फ़िगरेशन के आधार पर खाते के पासवर्ड को अलग-अलग तरीकों से प्रमाणित किया जाएगा)।

आप प्रमाण पत्र का उपयोग करके उस पासवर्ड को डालने से बच सकते हैं। प्रमाणपत्रों के साथ आपको अभी भी एक पासवर्ड डालना है, लेकिन यह समय आपकी निजी कुंजी का पासवर्ड है (यह खाते के पासवर्ड से स्वतंत्र है)।

ऐसा करने के लिए आप steveth45 द्वारा बताए गए निर्देशों का पालन कर सकते हैं:

साथ सार्वजनिक कुंजी प्रमाणीकरण

यदि आप हर बार प्रमाणपत्र का पासवर्ड डालने से बचना चाहते हैं, तो आप ssh- एजेंट का उपयोग कर सकते हैं, जैसा कि DigitalRoss द्वारा बताया गया है

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

यहां से शुरू करें: आदमी ssh- एजेंट

Ssh-Agent की एकमात्र समस्या यह है कि, कम से कम * nix पर, आपको हर नए शेल पर सर्टिफिकेट पासवर्ड डालना होगा। और फिर प्रमाण पत्र "लोड" है और आप इसका उपयोग किसी भी तरह का पासवर्ड डाले बिना किसी ssh सर्वर के खिलाफ प्रमाणित करने के लिए कर सकते हैं। लेकिन यह उस विशेष शेल पर है।

साथ कीचेन आप ssh-एजेंट लेकिन "पूरे सिस्टम में" के रूप में एक ही बात कर सकते हैं। एक बार जब आप अपने कंप्यूटर को चालू करते हैं, तो आप एक खोल खोलते हैं और प्रमाण पत्र का पासवर्ड डालते हैं। और फिर, हर दूसरा शेल उस "लोडेड" प्रमाण पत्र का उपयोग करेगा और आपके पासवर्ड को फिर से तब तक नहीं पूछा जाएगा जब तक आप अपने पीसी को पुनरारंभ नहीं करते।

Gnome के पास एक समान एप्लिकेशन है, जिसे Gnome Keyring कहा जाता है जो आपके प्रमाणपत्र के पासवर्ड को पहली बार उपयोग करने के लिए कहता है और फिर इसे सुरक्षित रूप से संग्रहीत करता है ताकि आपसे दोबारा नहीं पूछा जाएगा।


मैं खुद किचेन का उपयोग करता हूं: बहुत उपयोगी है।
जकुब नारबस्की

AddKeysToAgent yes.ssh / config में लिखकर एक और तरीका है । तब इसकी मेमोरी में लोड हो जाता है जब तक आप कंप्यूटर बंद नहीं करते हैं
infoclogged

4

यदि आप गितुब का उपयोग कर रहे हैं, तो उनके पास एक बहुत अच्छा ट्यूटोरियल है जो इसे और अधिक स्पष्ट रूप से बताता है (कम से कम मेरे लिए)।

http://help.github.com/set-up-git-redirect/


4
ssh-keygen -t rsa

पासफ़्रेज़ के लिए पूछे जाने पर, इसे खाली छोड़ दें यानी बस एंटर करें। इतना सरल है!!


4
इस बात से अवगत रहें कि यदि आप ऐसा करते हैं, तो जिस किसी के पास भी आपके विकास ग्राहक की पहुंच है, उसके पास पासवर्ड की आवश्यकता के बिना रिपॉजिटरी सर्वर तक पहुंच है। Ssh-Agent / ssh-add कॉम्बो ज्यादा बेहतर सुरक्षा देता है।
पीटर वी। मॉरच

3

आप जिस बॉक्स से धक्का दे रहे हैं, उससे यह कोशिश करें

    ssh git@github.com

फिर आपको जीथब से एक स्वागत योग्य प्रतिक्रिया मिलनी चाहिए और फिर धक्का देना ठीक रहेगा।


2
यह मेरे लिए काम कर रहा है Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.लेकिन किसी भी तरह से मुझे तब भी पासवर्ड के लिए पूछना
पड़ता है

2

मुझे एक सर्वर से एक git रेपो को क्लोन करना था जो लॉगिन vie ssh कुंजी की अनुमति नहीं देता था, लेकिन केवल एक उपयोगकर्ता / पासवर्ड के साथ। मुझे एक सरल उपयोगकर्ता / पासवर्ड संयोजन का उपयोग करने के लिए Git Plugin को कॉन्फ़िगर करने का कोई तरीका नहीं मिला, इसलिए मैंने निम्नलिखित शेल कमांड को linux build machine पर प्री-बिल्ड स्टेप के रूप में जोड़ा, जो कि टूल उम्मीद (apt-get install उम्मीद) पर निर्भर करता है:

यह आपके पास के रूप में हल करने का एक अच्छा तरीका नहीं है, जब आप इस जॉइन और जॉब के लॉग में स्पष्ट पाठ के रूप में दिखाई देते हैं! अगर यह आरएसए-कुंजी प्रमाणीकरण या अन्य संधि स्थिति के लिए कोई रास्ता नहीं है, तो केवल इसका उपयोग करें!

rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'

1

AddKeysToAgent yes.Ssh / config फ़ाइल के शीर्ष पर एक एकल पंक्ति जोड़ें । संभोग ssh- एजेंट पहले से चल रहा होना चाहिए। यदि इसकी नहीं चल रही (चेक द्वारा prep ssh-agent), तो बस इसे चलाएंeval $(ssh-agent)

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

समाधान का स्रोत /ubuntu/362280/enter-ssh-passphrase-once/853578#853578 है


0

मैं हर समय पासफ़्रेज़ टाइप करने से बचने की कोशिश कर रहा हूँ क्योंकि मैं विंडोज़ पर ssh का उपयोग कर रहा हूँ। मैंने जो किया वह मेरी .profile फ़ाइल को संशोधित करना था, ताकि मैं किसी विशेष सत्र में अपना पासफ़्रेज़ दर्ज कर सकूं। तो यह कोड का टुकड़ा है:

    SSH_ENV="$HOME/.ssh/environment"

    # start the ssh-agent
    function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
        echo succeeded
        chmod 600 "$SSH_ENV"
        . "$SSH_ENV" > /dev/null
        ssh-add
    }

    # test for identities
    function test_identities {
        # test whether standard identities have been added to the agent already
        ssh-add -l | grep "The agent has no identities" > /dev/null
        if [ $? -eq 0 ]; then
            ssh-add
            # $SSH_AUTH_SOCK broken so we start a new proper agent
            if [ $? -eq 2 ];then
                start_agent
            fi
        fi
    }

    # check for running ssh-agent with proper $SSH_AGENT_PID
    if [ -n "$SSH_AGENT_PID" ]; then
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
      test_identities
        fi
    # if $SSH_AGENT_PID is not properly set, we might be able to load one from
    # $SSH_ENV
    else
        if [ -f "$SSH_ENV" ]; then
      . "$SSH_ENV" > /dev/null
        fi
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
            test_identities
        else
            start_agent
        fi
    fi

तो इसके साथ मैं एक सत्र में एक बार अपना पासफ़्रेज़ टाइप करता हूँ।


-1

मैंने इन सभी सुझावों और अधिक की कोशिश की, ताकि मैं अपने AWS उदाहरण से क्लोन तैयार कर सकूं। कुछ भी काम नहीं किया। अंत में मैंने हताशा से बाहर धोखा दिया: मैंने अपने स्थानीय मशीन पर id_rsa.pub की सामग्री की प्रतिलिपि बनाई और इसे अपने AWS उदाहरण पर ~ / .ssh / ज्ञात_होस्ट में जोड़ा।


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