जब मैं दूरस्थ होस्ट पर ssh ऑपरेशन कर रहा हूं, तो "कुंजी के लिए पासफ़्रेज़ दर्ज करें" से कैसे बचें?


43

मैं एक दूरस्थ होस्ट (linux, फेडोरा) में ssh हूं और मैं वहां ssh ऑपरेशन (बिटबकेट के साथ गिट) करना चाहता हूं। उस मशीन पर ssh-agent चल रहा है,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

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

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

नोट: यदि मैं स्थानीय रूप से उस मशीन पर काम करता हूं, तो यह मुझे पासफ़्रेज़ दर्ज करने के लिए नहीं कहेगा


1
मैंने इसका उपयोग नहीं किया है, लेकिन एक कमांड ssh-add है जो मुझे लगता है कि उस तरह की चीज के लिए उपयोग किया जाता है
बार्लोप

जवाबों:


80

मेरी राय में ssh का उपयोग करने का सबसे अच्छा तरीका है

Git का उपयोग करने से पहले ssh-agent में अपनी कुंजी जोड़ें

प्रारंभ ssh- एजेंट शुरू नहीं तो

$ eval `ssh-agent -s`

Ssh-add का उपयोग करके अपनी निजी कुंजी जोड़ें

$ ssh-add ~ / .ssh / id_rsa_key /home/user/.ssh/id_rsa_key के
लिए पासफ़्रेज़ दर्ज करें:
पहचान जोड़ी गई: /home/user/.ssh/id_rsa_key (/home/user/.ssh/id_rsa_key
)

जांचें कि क्या कुंजी जोड़ी गई है (पैरामीटर लोअरकेस एल है):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: 49: 1a: e5: 4c: 94: 6f
/home/user.ssh/id_rsa_key (RSA)

अपने Git सर्वर से कनेक्ट करने का प्रयास करें:

$ ssh git.example.com

अब आप अतिरिक्त पासफ़्रेज़ संकेतों के बिना Git का उपयोग कर सकते हैं।

दूसरा तरीका

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


लेकिन मैंने sit-agent में आपकी कुंजी जोड़ने के लिए Git का उपयोग किया है, फिर कैसे करें? धन्यवाद
लिली

@ लिली क्षमा करें, मुझे आपका प्रश्न समझ में नहीं आया।
रोमन

1
यह वह उपाय है जो मेरे लिए काम करता है।
स्कैटॉक्स

2
मैं इसे कैसे बनाऊं? सीधे शब्दों में कहें .bashrc?
oarfish

1
FYI करें, की evalजरूरत है क्योंकि यह आदेश देता है कि SSH_AUTH_SOCK जैसे पर्यावरण चर निर्यात करें जिनकी जरूरत है। unix.stackexchange.com/questions/351725/…
wisbucky

21

यदि आपके पास पहले से ssh-agentचल रहा है तो आप कुंजी जोड़ सकते हैं, और आपको एक बार पासफ़्रेज़ दर्ज करना होगा, और केवल एक बार उस सत्र के लिए।

ssh-add ~/.ssh/id_rsa

आप यह नहीं कहते कि आप किस OS का उपयोग कर रहे हैं, लेकिन यदि यह Linux और Gnome होता है तो "Passwords and Keys" एप्लिकेशन (CLI नाम:) seahorseइनका प्रबंधन कर सकता है, इसलिए जब आप लॉग इन करते हैं, तो वे अनलॉक हो जाते हैं (कोई पासफ़्रेज़ आवश्यक नहीं) । अन्य लिनक्स डेस्कटॉप वातावरण के अपने स्वयं के प्रबंधक हैं। मुझे यकीन नहीं है कि अन्य ओएस यहां क्या करते हैं।


3

पासफ़्रेज़ पूछने का मुख्य कारण यह है कि आपकी कुंजी एन्क्रिप्ट की गई है, इन दोनों की तुलना करें:

  • एन्क्रिप्ट नहीं किया गया

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • को गोपित

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

तो आपको निम्न में से एक करना होगा:

  1. यदि यह एन्क्रिप्ट किया गया है तो आप एन्क्रिप्शन को हटाने का प्रयास कर सकते हैं ।
  2. आप गलत कुंजी का उपयोग कर रहे हैं। यदि आप विभिन्न कुंजी का उपयोग करना चाहते हैं, तो अन्य फ़ाइल निर्दिष्ट करें या अपना संपादन करें~/.ssh/config और अलग-अलग पहचान फ़ाइल निर्दिष्ट करें ( IdentityFile)।
  3. ssh-add -lअपनी सभी पहचानों को सूचीबद्ध करने के लिए चलाएँ (तब अपने स्थानीय से तुलना करें) और यदि आप सही कुंजियों का उपयोग कर रहे हैं तो वे स्लैश के साथ दोबारा जांच करें (वे स्लैश कॉन्फ़िगरेशन पर मौजूद हैं)।
  4. यदि आप पासफ़्रेज़ जानते हैं और आप इसे स्वचालित करना चाहते हैं, तो निम्न समाधान आज़माएँ:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

समस्या निवारण:

  1. आपके SSH एजेंट की डबल चेकिंग चल रही है (eval "$(ssh-agent -s)" ) ।
  2. आपके आदेश को फिर से डिबग करने के लिए : ( GIT_TRACE=1 git pullया GIT_SSH_COMMAND="ssh -vv"2.3.0+ के साथ) के माध्यम से git को फिर से चलाएँ।
  3. आप पासफ़्रेज़ (जो इसे पुनर्निर्देशित करेंगे true) के लिए पूछकर बाईपास करने की कोशिश कर सकते हैं , लेकिन मुझे नहीं लगता कि यह मदद करेगा। यदि यह इसके लिए पूछता है, तो इसके लिए एक कारण है और यह मूल रूप से आवश्यक है।

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

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

यहाँ कुछ संबंधित प्रश्न दिए गए हैं:

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

  • शुरू होता है ssh-agent
  • शुरू होता है ssh-add
  • अपनी चाबी जोड़ता है
  • आप चाहते हैं कि आदेश चलाता है।

कमजोर बिंदु दूसरा चरण है: आपको अभी भी पासफ़्रेज़ के लिए संकेत मिलेगा, जब तक कि आप किसी कुंजी का उपयोग करके अपनी सुरक्षा को कमज़ोर न कर दें, जिसमें पासफ़्रेज़ नहीं है । कुछ लोग ऐसा करते हैं, ज्यादातर लोग इसके खिलाफ सलाह देते हैं।


ssh-addएजेंट शुरू नहीं करता है। यह पहले से चल रहे एजेंट से जुड़ता है।
एम्स

धन्यवाद - मैं अलग स्क्रिप्ट में ये करने के लिए उपयोग किया जाता हूं, और लापता भाग को अनदेखा करता हूं।
थॉमस डिके

0

आप निम्न कमांड का उपयोग करके आसानी से अपनी कुंजी का पासफ़्रेज़ हटा सकते हैं

ssh-keygen -p

पहले प्रॉम्प्ट पर, फ़ाइल पथ दर्ज करें (या डिफ़ॉल्ट बदलने के लिए Enter दबाएं) दूसरा प्रॉम्प्ट, पुराना पासफ़्रेज़ दर्ज करें अगला प्रॉम्प्ट, पासफ़्रेज़ को परेशान करने के लिए बस एंटर दबाएं

ऐसा लगता है कि यह सबसे आसान तरीका है!


0

आपको तब भी निजी कुंजी को डिक्रिप्ट करने के लिए पासवर्ड प्रॉम्प्ट मिलेगा, भले ही वहssh-agent एसएसएच सार्वजनिक कुंजी को रिमोट में जोड़े जाने तक लोड हो~/.ssh/authorized_keys

प्रजनन करना:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

काफी उलझन में है। रिमोट SSH लॉगिन पासवर्ड इस मामले में पर्याप्त होगा।

मैं अनुमान लगा सकता हूं कि यह आपकी निजी कुंजी (जिसे एन्क्रिप्ट की गई निजी कुंजी से जोड़ा गया है) को बिना संबंधित निजी कुंजी के एन्क्रिप्शन पासवर्ड को जाने से रोकता है। यह वैसे भी एक बार-प्रति-दूरस्थ-लॉगिन प्रक्रिया है।

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