यह सुरक्षा और सुविधा के बीच व्यापार बंद का एक विशिष्ट उदाहरण है। सौभाग्य से कई विकल्प हैं। सबसे उपयुक्त समाधान उपयोग परिदृश्य और वांछित स्तर की सुरक्षा पर निर्भर करता है।
ssh-key with passphrase, नहीं ssh-agent
अब प्रमाणीकरण के लिए कुंजी का उपयोग करने के लिए हर बार पासफ़्रेज़ दर्ज करना होगा। जबकि सुरक्षा दृष्टिकोण से यह सबसे अच्छा विकल्प है, यह सबसे खराब प्रयोज्य प्रदान करता है। यह एक कमजोर पासफ़्रेज़ को बार-बार प्रवेश करने के बोझ को कम करने के लिए चुना जा सकता है।
ssh-key पासफ़्रेज़ के साथ, साथ ssh-agent
निम्नलिखित को जोड़ना ~/.bash_profile
स्वचालित रूप से शुरू होगा ssh-agent
और लॉगिन पर ssh-key (s) लोड करेगा:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
अब हर लॉगिन पर पासफ़्रेज़ दर्ज किया जाना चाहिए। प्रयोज्यता के दृष्टिकोण से थोड़ा बेहतर है, लेकिन इसमें यह दोष है कि ssh-agent
लॉगिन सत्र के दौरान कुंजी का उपयोग किया जाना है या नहीं, इसकी परवाह किए बिना पासफ़्रेज़ के लिए संकेत देता है। प्रत्येक नया लॉगिन एक अलग ssh-agent
उदाहरण भी देता है जो लॉगआउट के बाद भी मेमोरी में जोड़े गए कुंजी के साथ चल रहा है, जब तक कि स्पष्ट रूप से मार नहीं दिया जाता है।
ssh_agent
लॉगआउट पर मारने के लिए, निम्न को जोड़ें~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
या निम्नलिखित को ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
कोलिन एंडरसन के जवाब केssh-agent
रूप में फ़ाइल सिस्टम में एक निश्चित स्थान पर एजेंट को लगातार संचार सॉकेट बनाने से कई उदाहरणों से बचा जा सकता है । यह कई एजेंटों के उदाहरणों को पैदा करने पर एक सुधार है, हालांकि, जब तक कि डिक्रिप्ट की गई कुंजी को स्पष्ट रूप से मार नहीं दिया जाता है तब भी लॉगआउट के बाद स्मृति में रहता है।
डेस्कटॉप पर, डेस्कटॉप वातावरण के साथ शामिल ssh- एजेंट, जैसे गनोम कीरिंग SSH एजेंट , एक बेहतर दृष्टिकोण हो सकता है क्योंकि वे आमतौर पर पासफ़्रेज़ के लिए संकेत देने के लिए बनाए जा सकते हैं जब पहली बार ssh-key का उपयोग लॉगिन सत्र के दौरान किया जाता है और सत्र के अंत तक मेमोरी में डिक्रिप्टेड निजी कुंजी संग्रहीत करें।
ssh-key पासफ़्रेज़ के साथ, साथ ssh-ident
ssh-ident
एक उपयोगिता है जो ssh-agent
आपकी ओर से प्रबंधन कर सकती है और आवश्यक के रूप में पहचान को लोड कर सकती है। यह केवल एक बार ही कुंजी जोड़ता है, जब तक कि कितने टर्मिनलों, ssh या लॉगिन सत्रों की आवश्यकता होती है, एक की पहुँच की आवश्यकता होती है ssh-agent
। यह होस्ट से जुड़े होने के आधार पर एक अलग एजेंट और कुंजियों के विभिन्न सेट को जोड़ और उपयोग कर सकता है, या निर्देशिका ssh से आमंत्रित किया गया है। यह विभिन्न होस्ट के साथ एजेंट अग्रेषण का उपयोग करते समय कुंजी को अलग करने की अनुमति देता है। यह GitHub जैसी साइटों पर कई खातों का उपयोग करने की अनुमति देता है।
सक्षम करने के लिए ssh-ident
, इसे स्थापित करें और निम्नलिखित उपनाम को अपने में जोड़ें ~/bash_profile
:
alias ssh='/path/to/ssh-ident'
ssh-key पासफ़्रेज़ के साथ, साथ keychain
keychain
एक छोटी सी उपयोगिता है जो ssh-agent
आपकी ओर से प्रबंधित करती है और ssh-agent
लॉगिन सत्र समाप्त होने पर चालू रहने की अनुमति देती है। बाद के लॉगिन पर, keychain
मौजूदा ssh-agent
उदाहरण से जुड़ेगा। व्यवहार में, इसका मतलब है कि पासफ़्रेज़ को केवल रिबूट के बाद पहले लॉगिन के दौरान दर्ज किया जाना चाहिए। बाद के लॉगिन पर, मौजूदा ssh-agent
उदाहरण से अनएन्क्रिप्टेड कुंजी का उपयोग किया जाता है। cron
पासवर्डविहीन ssh- कीज़ के बिना नौकरियों में पासवर्ड रहित RSA / DSA प्रमाणीकरण की अनुमति देने के लिए भी यह उपयोगी हो सकता है ।
सक्षम करने के लिए keychain
, इसे स्थापित करें और निम्नलिखित में कुछ इस तरह जोड़ें ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
सुरक्षा के दृष्टिकोण से, ssh-ident
और एक विशेष सत्र के जीवनकाल तक सीमित उदाहरणों keychain
से भी बदतर हैं ssh-agent
, लेकिन वे उच्च स्तर की सुविधा प्रदान करते हैं। की सुरक्षा में सुधार करने के लिए keychain
, कुछ लोग --clear
अपने ~/.bash_profile
किचेन इनवोकेशन में विकल्प जोड़ते हैं । इस पासफ्रेज़ को ऊपर के रूप में लॉगिन पर फिर से दर्ज किया जाना चाहिए, लेकिन cron
उपयोगकर्ता लॉग आउट होने के बाद भी नौकरियों को अनएन्क्रिप्टेड कुंजी तक पहुंच प्राप्त होगी। keychain
विकि पृष्ठ अधिक जानकारी और उदाहरण है।
ssh- कुंजी बिना पासफ़्रेज़ के
सुरक्षा के दृष्टिकोण से, यह सबसे खराब विकल्प है क्योंकि निजी कुंजी पूरी तरह से असुरक्षित है जब यह उजागर होता है। हालांकि, यह सुनिश्चित करने का एकमात्र तरीका है कि रिबूट के बाद पासफ़्रेज़ को फिर से दर्ज करने की आवश्यकता नहीं है।
ssh-key पासफ़्रेज़ के साथ ssh-agent
, स्क्रिप्ट से पासफ़्रेज़ पास करने के साथssh-add
जबकि यह ssh-add
एक स्क्रिप्ट से पासफ़्रेज़ को पास करने के लिए एक सीधा विचार की तरह लग सकता है , उदाहरण के लिए echo "passphrase\n" | ssh-add
, यह उतना कठिन नहीं है जितना कि ऐसा लगता है ssh-add
कि पासफ़्रेज़ को नहीं पढ़ा है stdin
, लेकिन /dev/tty
सीधे पढ़ने के लिए खुलता है ।
इसके साथ काम किया जा सकता है expect
, इंटरैक्टिव अनुप्रयोगों को स्वचालित करने के लिए एक उपकरण। नीचे एक स्क्रिप्ट का उदाहरण दिया गया है जो स्क्रिप्ट में संग्रहीत पासफ़्रेज़ का उपयोग करके ssh-key जोड़ता है:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
ध्यान दें कि पासफ़्रेज़ को सुरक्षा परिप्रेक्ष्य से स्क्रिप्ट में प्लेनटेक्स्ट में संग्रहीत किया जाता है, यह पासवर्डलेस ssh-key होने से बेहतर है। यदि इस दृष्टिकोण का उपयोग किया जाना है, तो यह सुनिश्चित करना महत्वपूर्ण है कि expect
पासफ़्रेज़ वाली स्क्रिप्ट के पास उचित अनुमतियाँ हैं, जो कि मुख्य स्वामी द्वारा केवल पढ़ने योग्य, लिखने योग्य और चलाने योग्य हैं।