Ssh- एजेंट बाद में उपयोग के लिए मेरी अनएन्क्रिप्टेड कुंजी को क्यों नहीं बचाएगा?


12

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

क्या आपको पता है कि ऐसा क्यों हो सकता है? यह ssh-agentवर्तमान में नहीं चल रहा है या कुछ के रूप में सरल रूप में कुछ हो सकता है।

मेरे Ubuntu Gnome डेस्कटॉप पर एक ही कुंजी ठीक काम कर रही है। सर्वर और डेस्कटॉप दोनों Ubuntu 10.10 चल रहे हैं।

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent

1
सबसे पहले, जैसा कि आपने कहा था, जांचें कि क्या ssh-agentचल रहा है:ps -ef | grep '[s]sh-agent'
स्कॉट सेवेरेंस

@mssever हां यह प्रतीत होता है। अद्यतन प्रश्न देखें।
ट्रेफिनॉन

जवाबों:


10

भले ही एजेंट ऊपर है, अगर कुछ निश्चित वातावरण चर सेट नहीं हैं, तो आपके पास एजेंट का कोई संदर्भ नहीं है। इसके अलावा, भले ही यह सब ठीक है, एजेंट और चर, पहचान को स्वचालित रूप से एजेंट को नहीं भेजा जाता है: यह ssh-askpassकेवल एक्स सत्र में काम करने के लिए एक कार्य है ।

यदि आप बैश का उपयोग कर रहे हैं, तो ~/.bash_profileइस सामग्री के साथ फाइल बनाएं :

# File: ~/.bash_profile

# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
  . ~/.profile
fi

# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
  echo "Starting ssh agent"
  eval $(ssh-agent -s)
  agent_started=1
fi

# ssh become a function, adding identity to agent when needed
ssh() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/ssh "$@"
}
export -f ssh

# another example: git
git() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/git "$@"
}
export -f git

~/.ssh/id_dsaअपनी आवश्यकताओं के बाद फ़ाइल नाम को संशोधित करें , और इस लाइन को इसमें जोड़ें~/.bash_logout

# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
  echo "Killing ssh agent"
  ssh-agent -k
fi

एक अंतिम नोट: यह एक सूक्ति सत्र में हस्तक्षेप नहीं करता है, क्योंकि उस स्थिति में केवल ~/.profileखट्टा होता है, और आप ssh-askpassग्राफ़िकल इंटरफ़ेस से लाभ उठा सकते हैं जो पासफ़्रेज़ के लिए पूछते हैं और इसे भेजते हैं ssh-agent


धन्यवाद @enzotib sshअन्य मशीनों में आईएनजी के लिए महान काम करता है । लेकिन यह तब नहीं होता है जब gitकिसी पब्लिक रिपॉजिटरी पर पुश या पुल का इस्तेमाल किया जाता है। क्या आपके पास कोई विचार है कि मैं इसे कैसे हल कर सकता हूं?
ट्रेफिनॉन

एक समान फ़ंक्शन जोड़ें ssh(), इसे कॉल करें git()और अंतिम पंक्ति को से बदल /usr/bin/sshदें /usr/bin/git। इसके अलावा, एक अंतिम पंक्ति के साथ जोड़ें export -f git
enzotib

@enzotib मैंने वह कोशिश की, लेकिन अब जब मैं आपके द्वारा सेटअप के ऊपर बनाई गई फ़ाइल के sshसाथ मशीन में हूं bash_profileतो यह मुझसे कुंजी के पासवर्ड के लिए पूछता है। किसी कारण के लिए अब हर बार जब मैं इसमें भाग लेता हूं, तो इससे पहले कि मैं फांसी दे चुका हूं sshया नहीं git। जब मैं आक्रामक मशीन में प्रवेश करता हूं, तो मुझे वापस मिलने के लिए gist.github.com/942082 देखें ।
ट्रेफिनॉन

@ ट्रेफिनॉन: ​​मुझे नहीं पता कि वास्तव में कैसे gitबातचीत की जाती है ssh, और मैं इसका उपयोग नहीं करता gitताकि मैं कोशिश न कर सकूं । मैंने ऊपर उल्लेखित फ़ंक्शन ~/.bash_profileको शामिल करने के लिए संशोधित git()किया, यह सुनिश्चित करने के लिए कि मेरा पिछला स्पष्टीकरण स्पष्ट था। इसके अलावा, यह उस आउटपुट से लगता है जो आप दिखाते हैं कि आपने सर्वर मशीन को संशोधित किया है, लेकिन मेरी सभी सलाह केवल क्लाइंट मशीन को निर्देशित की गईं।
enzotib

@enzotib यह सही है। जब मैं gitएक केंद्रीय फोर्ज / रिपॉजिटरी में धकेलता हूं तो सर्वर मेरा क्लाइंट बन जाता है, इसलिए फाइल सही जगह पर होती है। मुझे लगता है कि आपने सिर्फ मुझे संकेत दिए हैं / मेरे विचारों को जॉगिंग किया है। मेरे पास एक विशेष बैश प्रॉम्प्ट है जो की git शाखा को प्रदर्शित करता है pwd। मैं शर्त लगाता हूं कि क्या bash लॉगिन पर पासवर्ड के अनुरोध को ट्रिगर किया जा रहा है क्योंकि यह bash प्रॉम्प्ट को रेंडर करने से पहले स्टेट को git करने का प्रयास करता है!
ट्रेफिनॉन

2

मैंने हाल ही में ssh-identity का उपयोग शुरू किया:

https://github.com/ccontavalli/ssh-ident

आपको बस इतना करना है:

alias ssh="/path/to/ssh-ident"

अपने में .bashrc। वैकल्पिक रूप से, आप कर सकते हैं ln -s /path/to/ssh-ident ~/bin/sshया पहले अपने पथ में कुछ अन्य निर्देशिका /binऔर /usr/bin


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