Windows पर Git Bash शुरू करते समय SSH एजेंट चलाना


152

मैं git bash का उपयोग कर रहा हूं। मुझे इस्तेमाल करना है

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

हर बार जब मैं एक नया git बैश शुरू करता हूं।

क्या ssh एजेंट को स्थायी रूप से सेट करने का कोई तरीका है? या क्या विंडोज़ के पास ssh कीज़ को मैनेज करने का अच्छा तरीका है?

मैं एक नया आदमी हूँ, कृपया मुझे विस्तृत ट्यूटोरियल दें, धन्यवाद!


3
है /my/ssh/location/की तरह कुछ करने के लिए equalivent /c/Users/Foobar/.ssh/?
निक

इसी तरह की समस्या सुपरसर्वर . com / q / 1238486 / 478378 पर पोस्ट की गई है जो अब हल हो गई है। निम्नलिखित gist में सभी विवरण शामिल हैंgist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402d । धन्यवाद।
जिग्नेश गोहेल

जवाबों:


138

गिट बेस सत्र में, आप स्वचालित रूप से लॉन्च करने के लिए उक्त सत्र के लिए एक स्क्रिप्ट जोड़ सकते हैं ( ~/.profileया आमतौर पर सेट होने के साथ ) । यदि फ़ाइल मौजूद नहीं है, तो इसे बनाएं।~/.bashrc~%USERPROFILE%ssh-agent

गीथहब ने " एसएसएच कुंजी पासफ्रेज़ के साथ काम करना " में इसका वर्णन किया है ।

" ऑटो-लॉन्चिंग ssh-Agent on Git for Windows " उस लेख के अनुभाग में एक मजबूत स्क्रिप्ट है जो यह जांचती है कि एजेंट चल रहा है या नहीं। नीचे सिर्फ एक स्निपेट है, पूर्ण समाधान के लिए गिटहब लेख देखें।

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

अन्य संसाधन:

" विंडोज़ कमांड शेल से गिट रन के साथ काम करने के लिए ssh- एजेंट प्राप्त करना " एक समान स्क्रिप्ट है, लेकिन मैं मुख्य रूप से ऊपर GitHub लेख को संदर्भित करूंगा, जो कि अधिक मजबूत और अद्यतित है।


एक छोटी सी झुंझलाहट मुझे थी अगर मुझे पता था कि मैं git का उपयोग नहीं करने जा रहा हूं तो मैं ssh कुंजी पासफ़्रेज़ में प्रवेश नहीं करूंगा, फिर मैंने खोले गए प्रत्येक खोल को फिर से मांगा। यह राज्य 1, एजेंट w / o कुंजी चलाने वाला है, इसलिए आप ssh-add को इस अनुभाग से हटा सकते हैं, यदि आप अपना पासफ़्रेज़ पहली बार दर्ज नहीं करते हैं, तो आपसे तब तक दोबारा नहीं पूछा जाएगा, जब तक कि आप मैन्युअल रूप से ssh-add नहीं चलाते।
एंडी २१११

@Gordon उस मदद का कौन सा हिस्सा है। Github.com/articles/working-with-ssh-key-passphrases GitHub लिंक बदल गया है? इसकी सामग्री अभी भी है, और अभी भी इस उत्तर के लिए प्रासंगिक लगती है।
VonC

1
@ Andy2K11 यदि आप पहली बार पासफ़्रेज़ में प्रवेश करना चाहते हैं, और नहीं, तो शेल खोलते समय, मेरे लिए सबसे साफ तरीका .bash_profile से ssh-add को हटा रहा है, जैसा कि आपने उल्लेख किया है, और "AddKeysToAgent हां" जोड़ रहा है। आपकी .ssh / config फ़ाइल (यह उत्तर देखें: superuser.com/a/1114257/523133 )। इस तरह आपको ssh-add चलाना भी याद नहीं है।
11

30

पुनश्च: ये निर्देश विंडोज 10 लिनक्स सबसिस्टम में खोले गए एक बैश शेल के संदर्भ में हैं और विंडोज पर उबंटू पर बैश के साथ विंडोज में उत्पन्न सिम-लिंकिंग एसएसएच कुंजी के बारे में उल्लेख नहीं करता है।

1) इसमें निम्नलिखित जोड़कर अपने .bashrc को अपडेट करें

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

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

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) फिर $ source ~/.bashrcअपने कॉन्फिगरेशन को रीलोड करने के लिए रन करें।

उपरोक्त चरण https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch से लिए गए हैं

3) यदि मौजूद नहीं है तो एक SSH कॉन्फिग फ़ाइल बनाएँ। नया बनाने के लिए निम्नलिखित कमांड का उपयोग करें:.ssh$ touch config

4) निम्नलिखित में जोड़ें ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) कमांड का उपयोग करके SSH एजेंट में अपनी कुंजी जोड़ें $ ssh-add ~/.ssh/id_work_gmailऔर फिर आपको ssh का उपयोग करके अपने github खाते या दूरस्थ होस्ट से कनेक्ट करने में सक्षम होना चाहिए। उपरोक्त कोड उदाहरणों के संदर्भ में उदाहरण के लिए:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

या

$ ssh <USER>@csexperimental.abc.com

SSH एजेंट में कुंजी जोड़ने के लिए केवल एक बार प्रदर्शन किया जाना चाहिए।

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

ध्यान दें:

धन्यवाद।


1
डब्ल्यूएसएल का उपयोग करते हुए दिलचस्प विकल्प। +1
VONC

@JigneshGohel धन्यवाद, यह स्क्रिप्ट एकदम सही और स्पष्ट है। मुझे आश्चर्य है कि हालांकि, आपके पास क्यों है >> "${SSH_ENV}"? यह सिर्फ नहीं होना चाहिए > "${SSH_ENV}"? तुम्हारा काम करता है, ज़ाहिर है, लेकिन यह धीरे-धीरे लंबी और लंबी ~/.ssh/environmentफ़ाइल के साथ समाप्त होता है , क्योंकि (जैसा कि मैं वर्तमान में सोचता हूं !?) कोई कारण नहीं ... बहुत, बहुत धन्यवाद हालांकि! मुझे लगता है कि इस स्क्रिप्ट को सिर्फ .bashrcडब्ल्यूएसएल उबंटू के लिए डिफ़ॉल्ट में शामिल किया जाना चाहिए , यह इतना उपयोगी है!
माइकबेटन

5

मुझे यह प्राप्त करने का सबसे आसान तरीका मिला, जो पेजेंट का उपयोग एसएसएच एजेंट और पलक के रूप में कर रहा था।

होस्टनाम जो आपके रिमोट में उपयोग किया जाता है उसके लिए आपको एक पोटीन सत्र कॉन्फ़िगर करना होगा।

आपको plink.exe की भी आवश्यकता होगी जिसे उसी साइट से पोटीन के रूप में डाउनलोड किया जा सकता है।

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

जब आप गिट-स्कैम स्थापित करते हैं तो आप इसे ओपनएसएसएच के बजाय कछुआ / पलक का उपयोग करने के लिए निर्दिष्ट कर सकते हैं।

शुद्ध प्रभाव यह है कि जब भी आप चाहें तो गिट-बैश खोल सकते हैं और पासफ़्रेज़ के लिए चुनौती दिए बिना धक्का / खींच सकते हैं।

जब पैगेंट को आपकी कुंजी लोड की जाती है, तो पोटीन और WinSCP सत्रों के साथ लागू होता है। यह जीवन को बहुत आसान (और सुरक्षित) का नरक बना देता है।


2

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

मान्यताओं :

  • पथ में ssh- एजेंट
  • gh स्थापित करते समय पथ में (दोनों "RED" विकल्प चुनकर) जोड़ें
  • निजी कुंजी% USERPROFILE% / ssh फ़ोल्डर में हैं
  • निजी कुंजी नाम आईडी से शुरू होते हैं (जैसे id_rsa)

अच्छा! +1। मैं हमेशा ओपनश (नहीं पोटीन) के साथ काम करता हूं, इसलिए यह पासफ़्रेज़ के साथ निजी कुंजी के लिए एक दिलचस्प समाधान है।
VonC

जैसा कि आप पहले से ही गितुब पर हैं, तो क्यों न केवल स्रोत को गिट रिपॉजिटरी बनाया जाए?
थोरबजोरन राव एंडरसन

बस रास्ते से / रिलीज हटा दें। ;-)
इरेज़ ए। कोर्न

1

मुझे यह सबसे अच्छा जवाब के आधार पर काम करने के लिए नहीं मिला, शायद इसलिए कि मैं इस तरह का एक पीसी नॉब हूं और कुछ स्पष्ट याद कर रहा हूं। लेकिन सिर्फ FYI के मामले में यह किसी को मेरे लिए चुनौती के रूप में मदद करता है, आखिरकार जो काम किया है वह यहां एक लिंक के माध्यम से था (उत्तर में संदर्भित)। इसमें केवल मेरे साथ निम्नलिखित चिपकाना शामिल था .bash_profile:

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

मेरे पास शायद कुछ अजीब तरह से कॉन्फ़िगर किया गया है, लेकिन सफल नहीं था जब मैंने इसे अपने से जोड़ा .profileया.bashrc । दूसरी वास्तविक चुनौती जो मैंने चलाई है, वह यह है कि मैं इस कंप्यूटर पर कोई व्यवस्थापक नहीं हूं और इसे आईटी द्वारा अनुमोदित किए बिना पर्यावरण चर नहीं बदल सकता है, इसलिए यह उन लोगों के लिए एक समाधान है जो उस तक नहीं पहुंच सकते हैं।

आपको पता है कि अगर आप git bash खोलते हैं तो यह आपके ssh पासवर्ड के लिए प्रेरित होता है। हेलेलुजाह ने आखिरकार कुछ काम किया।


1

इसे अपने ~ / .bashrc (या उस स्रोत से प्राप्त होने वाली फ़ाइल) में रखें, जो इसे अनावश्यक रूप से प्रति शेल में कई बार चलाने से रोक देगा:

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

और फिर ~ / .ssh / config में "AddKeysToAgent हां" जोड़ें:

Host *
    AddKeysToAgent yes

सामान्य रूप से आपके सर्वर (या गिट पुल) पर ssh और आपको प्रति सत्र केवल एक बार पासवर्ड / पासफ़्रेज़ के लिए कहा जाएगा।


0

अपनी ~ निर्देशिका में एक नई .bashrc फ़ाइल बनाएँ ।

वहां आप अपने आदेश डाल सकते हैं कि आप हर बार जब आप बैश शुरू करते हैं, तो आप निष्पादित करना चाहते हैं


यह काम करना है। ऐसी .bashrcफ़ाइल के लिए कुछ सरल रखने की कोशिश करें (जैसे echo testचेक करें और लोड होने पर इसे चेक करें जब आप गिट बैश को अंजाम देते हैं।
डेविड फेरेंस्की रागोजान

यह भी ध्यान दें कि ~ PowerShell में Git Bash / Cygwin में ~ से भिन्न होने की संभावना है कि कौन सा संस्करण इंस्टॉल किया गया है और उपयोगकर्ता के निर्दिष्ट विकल्प के आधार पर।
ड्रैगन 788

@ यार विंडोज पर, .bashrcअपने यूजर फोल्डर में जैसे C:\Users\john
मार्टिन वैन ड्रेल

0

इस उत्तर से सरल दो स्ट्रिंग समाधान :

के लिए , बैश , आदि:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

के लिए csh , tcsh , आदि:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.