Ubuntu पर ssh-add के साथ स्थायी रूप से एक निजी कुंजी कैसे जोड़ें? [बन्द है]


474

मेरे पास एसएसएच के माध्यम से एक सर्वर तक पहुंचने के लिए पासवर्ड के साथ एक निजी कुंजी संरक्षित है।

मेरे पास 2 linux (ubuntu 10.04) मशीनें हैं और ssh-add कमांड का व्यवहार उन दोनों में अलग है।

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

दूसरे में, मुझे हर बार लॉगिन करते समय कुंजी को जोड़ना होगा।

जहां तक ​​मुझे याद है, मैंने दोनों पर एक ही काम किया था। अंतर केवल इतना है कि कुंजी उस पर बनाई गई थी जिसे स्थायी रूप से जोड़ा जाता है।

क्या किसी को पता है कि इसे स्थायी रूप से अन्य मशीन के साथ कैसे जोड़ा जाए?


1
एजेंट केवल अस्थायी होना चाहिए; लेकिन यह संभव है कि आपके पास ssh-add कमांड है ~ / .bashrc या तो दोनों मशीनों में से एक पर
mirek

जवाबों:


632

एक समाधान यह होगा कि प्रमुख फाइलों को अपनी ~/.ssh/configफाइल में जोड़कर स्थायी रूप से रखा जाए।

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

यदि आपके पास ~ / .shsh निर्देशिका में 'config' फ़ाइल नहीं है, तो आपको एक बनाना चाहिए। इसे मूल अधिकारों की आवश्यकता नहीं है, इसलिए बस:

nano ~/.ssh/config

... और अपनी आवश्यकताओं के अनुसार ऊपर की पंक्तियाँ दर्ज करें।

इस काम के लिए फ़ाइल को chmod 600 की आवश्यकता है। आप कमांड का उपयोग कर सकते हैं chmod 600 ~/.ssh/config

यदि आप चाहते हैं कि कंप्यूटर पर सभी उपयोगकर्ता इन पंक्तियों का उपयोग करें /etc/ssh/ssh_configऔर एक फ़ोल्डर में कुंजी सभी के लिए सुलभ हो।

इसके अतिरिक्त, यदि आप एक मेजबान के लिए विशिष्ट कुंजी सेट करना चाहते हैं, तो आप अपने ~ / .ssh / config में निम्न कार्य कर सकते हैं:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey

इसका फायदा तब होता है जब आपके पास कई पहचानें होती हैं जो एक सर्वर आपको अस्वीकार नहीं करता है क्योंकि आपने पहले गलत पहचान की कोशिश की थी। केवल विशिष्ट पहचान की कोशिश की जाएगी।


82
कॉन्फ़िगरेशन फ़ाइल पर अनुमतियाँ 600 होनी चाहिए।chmod 600 config
सामान्य तौर

6
मुझे हर पासवर्ड के लिए अपना पासवर्ड डालना पड़ता है, या इसके साथ क्लोन करना पड़ता है, मैं इससे कैसे बचूं?
आसफ

9
इसके बजाय का उपयोग करें ssh-add ~/.ssh/gitHubKey, यह आपके प्रमुख पासफ़्रेज़ को याद रखेगा। मैंने जो समाधान प्रस्तावित किया था, वह इसे रिबूट में स्थायी रूप से सेट करने के लिए था।
डेमनीट्रेग

28
यह उत्तर इतना अच्छा है कि ssh-add मौजूद नहीं होना चाहिए। जो एक कमांड रखना चाहता है जो "अस्थायी रूप से" एक समस्या को ठीक करता है और अनपेक्षित रूप से टूट जाता है जब आप बस एक कॉन्फ़िगर फ़ाइल को स्थायी रूप से संपादित कर सकते हैं।
रसेलस्टार्ट

2
समस्या इस तरह के कॉन्फ़िगरेशन के साथ है, यदि आप इसे किसी विशिष्ट होस्ट के लिए .ssh / config में नहीं करते हैं, तो आपको हर बार सभी सर्वर के विरुद्ध सभी कुंजी आज़माएंगे।
डेमनीट्रेग अगे

118

यह मैक ओएस एक्स शेर के तहत मेरे लिए एक ही मुद्दे का जवाब नहीं था। मैंने जोड़ा:

ssh-add ~/.ssh/id_rsa &>/dev/null

मेरे करने के लिए .zshrc (लेकिन। लाभ भी ठीक होगा), जो यह तय हो गया है लगता है।

(जैसा कि यहां बताया गया है: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )


6
यह मेरे द्वारा प्रस्तावित समाधान से बेहतर है, क्योंकि ssh-add एक प्रमाणीकरण एजेंट का उपयोग करता है जो एक संरक्षित निजी कुंजी के पासफ़्रेज़ को याद रख सकता है, ताकि आपको प्रमाणित करने की कोशिश करने पर हर बार इसे टाइप करने की आवश्यकता न हो। आपके द्वारा प्रस्तावित समाधान का एक और लाभ यह है कि यदि आपके पास कुंजी का एक बहुत कुछ है, तो ssh क्लाइंट उस सर्वर के लिए अप्रासंगिक होने का प्रस्ताव नहीं देगा जिसे आप कनेक्ट करने का प्रयास करते हैं, वास्तव में यह केवल उन कुंजियों को प्रदान करेगा जो इस सर्वर के लिए हैं, और जीता ' sA / config में सूचीबद्ध सभी कुंजियों को आज़माते हुए, MaxAuthTries तक पहुँचने के कारण कनेक्शन को अस्वीकार करने वाले सर्वर का नेतृत्व।
डेमनीट्रेग

1
साभार @daminetreg मेरी विशेष समस्या को अपनी निजी कुंजी को स्थानांतरित किए बिना एक विकास मशीन पर गिटोसिस तक पहुंचने की आवश्यकता थी। इस समाधान ( ForwardAgent yesमेरे साथ जोड़ने के साथ .ssh/config) ने उस मुद्दे को काल्पनिक रूप से हल किया। जैसा कि यह पता चला है, यह आपके फ़ोल्डर में पाई जाने वाली चाबियों को जोड़ने के लिए प्रकट होने ssh-add &>/dev/nullके डिफ़ॉल्ट व्यवहार के रूप में ssh-addहो सकता है .ssh
हारून

1
मेरी समझ यह है कि मैक ओएस में एक -K स्विच है: stackoverflow.com/questions/1909651/…
निकु टोफान

3
@TNick -KOS X की किचेन में कुंजी जोड़ता है, जिसे OS X GUI विदेशी सर्वर को प्रमाणित करने के लिए उपयोग करता है। उस क्यू में पोस्टर एक SSH सुरंग के माध्यम से कनेक्ट हो रहा है, लेकिन अभी भी एक दूरस्थ सर्वर से कनेक्ट हो रहा है। A - [SSH टनल] -> B मैं जिस मामले में हूं, मैं एक दूरस्थ सर्वर पर हूं, लेकिन चाहता हूं कि प्रमाणीकरण मेरे होम सिस्टम पर क्रेडेंशियल्स के खिलाफ हो। ए <- [प्रामाणिक] - बी - [कनेक्ट] -> सी तो -Kवास्तव में मदद नहीं करता है, लेकिन अन्य प्रश्न के लिए एक महान समाधान है।
हारून

112

मैंने ssh-add के लिए -K विकल्प का उपयोग करके मैक OSX (10.10) पर उस समस्या को हल किया:

ssh-add -K ~/.ssh/your_private_key

MacOS 10.12 के लिए और बाद में आपको अपने ssh config को अतिरिक्त रूप से यहाँ बताए अनुसार संपादित करने की आवश्यकता है: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain


3
यह उन लोगों के लिए एक बेहतर उत्तर है जो इसे स्थायी रूप से सेट करना चाहते हैं
पंकट्रोकॉली

12
इसलिए यह बिट: "मैक OSX (10.10)" पर ...
एंड्रयू के।

1
यह मैक ओएसएक्स पर अच्छा और काम कर रहा है, लेकिन उबंटू (मेरे परीक्षण पर 14.04) पर काम नहीं करता है।
१६

5
यह मेरे लिए काम नहीं किया (OSX 10.12.4 पर)
guptron

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

36

बस चाबी का गुच्छा जोड़ें, जैसा कि उबंटू क्विक टिप्स में संदर्भित है। https://help.ubuntu.com/community/QuickTips

क्या

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

कमांड लाइन

फ़ाइल को स्थापित करने का दूसरा तरीका टर्मिनल को खोलना है (एप्लिकेशन-> एक्सेसरीज-> टर्मिनल) और टाइप करें:

sudo apt-get install keychain

फ़ाइल संपादित करें

फिर आपको अपने $ {HOME} /। Bashrc या /etc/bash.bashrc पर निम्न पंक्तियों को जोड़ना चाहिए:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

ठीक दूसरी आज्ञा क्या करती है, जिज्ञासा से बाहर? यह सिर्फ वर्तमान उपयोगकर्ता के लिए अनुमतियाँ खोलता है?
विन्सेन्ट बसकेरलो

1
यह .एक उपनाम हैsource
ब्रैड सोलोमन

18

मैंने @ हारून के समाधान की कोशिश की और यह मेरे लिए बहुत काम नहीं आया, क्योंकि यह हर बार जब मैं अपने टर्मिनल में एक नया टैब खोलता था, तो यह मेरी चाबी को फिर से जोड़ देता था। इसलिए मैंने इसे थोड़ा संशोधित किया (ध्यान दें कि मेरी अधिकांश कुंजियाँ पासवर्ड से सुरक्षित हैं, इसलिए मैं सिर्फ आउटपुट को / dev / dull पर नहीं भेज सकता):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

यह क्या करता है कि यह ssh-add -lएक विशिष्ट कुंजी के लिए (जो सभी कुंजियों को सूचीबद्ध करता है) के आउटपुट की जांच करता है और यदि यह नहीं मिलता है, तो इसे इसके साथ जोड़ता है ssh-add

अब पहली बार जब मैंने अपना टर्मिनल खोला तो मुझसे मेरी निजी चाबियों के पासवर्ड मांगे गए हैं और जब तक मैं अपने कंप्यूटर को रिबूट (या लॉगआउट - मैंने जाँच नहीं किया है) तब तक दोबारा नहीं पूछा जाता।

चूँकि मेरे पास कुंजियों का एक गुच्छा है, मैं ssh-add -lप्रदर्शन को बेहतर बनाने के लिए चर के आउटपुट को संग्रहीत करता हूं (कम से कम मुझे लगता है कि इससे प्रदर्शन में सुधार होता है :))

पुनश्च: मैं linux पर हूँ और यह कोड मेरी ~/.bashrcफाइल पर गया है - यदि आप Mac OS X पर हैं, तो मुझे लगता है कि आपको इसे जोड़ना चाहिए .zshrcया.profile

संपादित करें: जैसा कि टिप्पणियों में @Aaron द्वारा बताया गया है, .zshrcफ़ाइल zshशेल से उपयोग की जाती है - इसलिए यदि आप इसका उपयोग नहीं कर रहे हैं (यदि आपको यकीन नहीं है, तो सबसे अधिक संभावना है, आप bashइसके बजाय उपयोग कर रहे हैं ), इस कोड को चाहिए अपनी .bashrcफ़ाइल पर जाएं।


3
.zshrcके लिए है zshखोल, जो मैं के बजाय का उपयोग करें bash। यदि आप bashMac OS X (डिफ़ॉल्ट) पर उपयोग कर रहे हैं , तो यह .bashrcवहाँ भी होगा।
आरोन

1
ssh-add -lरिटर्न कोड के बाद echo $?यह तय करने के लिए इस्तेमाल किया जा सकता है कि कुंजी जोड़ना है या नहीं। बैश के साथ मेरी linux मशीन im, ssh-add -lकुंजी फ़ाइल नाम आउटपुट नहीं होगा। रिटर्न कोड हमेशा काम करता है।
भरत जी

12

मेरे मामले में समाधान था:

कॉन्फ़िगरेशन फ़ाइल पर अनुमतियाँ 600 होनी चाहिए। chmod 600 config

जैसा कि ऊपर सामान्य टिप्पणियों में उल्लेख किया गया है

कॉन्फ़िगरेशन फ़ाइल सामग्री को छूने की आवश्यकता नहीं है।


लिनक्स मिंट 17.1 पर मेरे लिए पर्याप्त नहीं था।
बनारस

मुझे नहीं लगता कि 600 समझ में आता है। आदमी ssh हमें बताता है कि ~/.ssh/configफ़ाइल उपयोगकर्ता के लिए पढ़ / लिखती है, और दूसरों द्वारा लिखित नहीं।
डॉनसॉन्ग

600 केवल उपयोगकर्ता के लिए पढ़ा और लिखा जा रहा है
उत्साह

6

मेरे पास उबंटू 16.04 पर एक ही मुद्दा था: कुछ कुंजियों को स्थायी रूप से जोड़ा गया था, दूसरों के लिए मुझे ssh-addहर सत्र पर अमल करना था । मुझे पता चला कि जिन चाबियों को स्थायी रूप से जोड़ा गया था, उनमें निजी और सार्वजनिक दोनों तरह ~/.sshकी चाबियां थीं और हर सत्र में जिन चाबियों को भुला दिया गया था, उनमें केवल निजी चाबियां थीं ~/.ssh। इसलिए समाधान सरल है: आपको निष्पादित करने से पहले निजी और सार्वजनिक दोनों कुंजी को कॉपी करना चाहिए ।~/.sshssh-add

पुनश्च: जहाँ तक मैं ग्नोम विकी से समझता हूँ मेरी विधि सूक्ति-कीरिंग उपकरण के लिए धन्यवाद काम करती है जो गनोम डेस्कटॉप पर्यावरण का हिस्सा है। इसलिए मेरा तरीका शायद तभी काम करना चाहिए जब आप Gnome या Gnome- आधारित DE का उपयोग करते हैं।


1
अधूरा जवाब। इसने दो घंटे की खोज के बाद अतिरिक्त स्क्रिप्ट या पैकेज की आवश्यकता के बिना मेरी समस्या को हल किया।
एतेगेनक्लो

फ्लार्किन शानदार! महान जासूसी का काम। मुझे नहीं लगता कि मुझे यह पता लगा होगा।
निकरेलियस

4

"~ / .Bashrc" में निम्नलिखित पंक्तियों को जोड़ने से मेरे लिए समस्या हल हो गई। मैं Ubuntu 14.04 डेस्कटॉप का उपयोग कर रहा हूं।

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"

3

Ubuntu 14.04 पर (शायद पहले भी, शायद अभी भी) आपको कंसोल की आवश्यकता नहीं है:

  • seahorseउस चीज़ को शुरू या लॉन्च करें जिसे आप "कुंजी" के लिए खोज रहे हैं
  • वहां SSH कुंजी बनाएं (या आयात करें)
    • पासफ़्रेज़ को खाली छोड़ने की आवश्यकता नहीं है
    • यह आपको सर्वर (या अधिक) के लिए सार्वजनिक कुंजी को पुश करने की पेशकश भी करता है
  • आप एक ssh- एजेंट के साथ चलेंगे और यह कुंजी लोड होगी, लेकिन लॉक होगी
  • sshएजेंट के माध्यम से पहचान (यानी कुंजी) का उपयोग करेगा
  • सत्र के दौरान पहले उपयोग पर, पासफ़्रेज़ की जाँच की जाएगी
    • और आपके पास लॉगिन पर कुंजी को स्वचालित रूप से अनलॉक करने का विकल्प है
    • इसका अर्थ है कि कुंजी के पासफ़्रेज़ को लपेटने के लिए लॉगिन ऑर्थर का उपयोग किया जाएगा
  • ध्यान दें: यदि आप अपनी पहचान (यानी एजेंट-अग्रेषण) को अग्रेषित करना चाहते हैं, तो अपने sshसाथ निवेश करें -Aया इसे डिफ़ॉल्ट बनाएं
    • अन्यथा आप उस मशीन से उस कुंजी से प्रमाणित नहीं कर सकते हैं जिसे आप बाद में तीसरी मशीन में लॉगिन करते हैं

3

मैं दो id_rsa की का उपयोग करके Ubuntu चलाता हूं। (एक व्यक्तिगत काम के लिए)। ssh-add एक कुंजी (व्यक्तिगत एक) को याद रखेगा और कंपनी को हर बार भूल जाएगा।

दोनों के बीच के अंतर को देखकर मैंने देखा कि मेरी व्यक्तिगत कुंजी में 400 अधिकार थे जबकि कंपनी के पास 600 अधिकार थे। (u + w था)। कंपनी की कुंजी (uw या 400 पर सेट) से उपयोगकर्ता लिखना ठीक करने से मेरी समस्या ठीक हो गई। ssh-add अब दोनों कुंजियों को याद करता है।



1

बहुत सरल ^ _ ^ दो कदम

1. आप स्थापित चाबी का गुच्छा है

2.bd_profile के नीचे 2.add कोड

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh

12
उबंटू के पास चुपचाप yum नहीं है;)
Adam F

1

उन लोगों के लिए जो फिश शेल का उपयोग करते हैं, आप निम्नलिखित फ़ंक्शन का उपयोग कर सकते हैं, फिर इसे ~/.config/fish/config.fishएक अलग कॉन्फ़िगरेशन फ़ाइल में या कॉल कर सकते हैं ~/.config/fish/conf.d/loadsshkeys.fish। यह id_rsa से शुरू होने वाली सभी कुंजियों को लोड करेगा ssh-agent

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

यदि आप ssh-agentएक टर्मिनल खोलना चाहते हैं, तो ऐसा करने के लिए आप tuvistavie / fish-ssh-agent का उपयोग कर सकते हैं ।

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