हर बार जब मैं Bitbucket को धक्का देता हूं, तो पासफ़्रेज़ से बचने से कैसे बचें


217

मैंने इस गाइड की मदद से अपना ssh सामान सेट किया , और यह अच्छी तरह से काम करता था (मैं hg pushपासफ़्रेज़ के लिए पूछे बिना चला सकता था )। तब और अब के बीच क्या हो सकता है, यह देखते हुए कि मैं अभी भी उसी होम डायरेक्टरी का उपयोग कर रहा हूं।

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

जवाबों:


337

आपको ssh एजेंट का उपयोग करने की आवश्यकता है। संक्षिप्त उत्तर: प्रयास करें

$ ssh-add

धक्का देने से पहले। पूछे जाने पर अपने पासफ़्रेज़ की आपूर्ति करें।

यदि आप पहले से ही ssh एजेंट नहीं चला रहे हैं, तो आपको निम्न संदेश मिलेगा:

Could not open a connection to your authentication agent.

उस स्थिति में, आप एक शुरुआत कर सकते हैं और अपने वातावरण को इस प्रकार सेट कर सकते हैं

eval $(ssh-agent)

फिर ssh-addकमांड दोहराएं ।

यह ssh एजेंट मैनपेज पर एक नज़र डालने लायक है ।


2
क्या evalआप केवल टाइप कर सकते हैं ssh-agent?
जेम्स मैकमोहन

4
यह कुछ आदेशों को प्रदर्शित करता है जो आपको इसका उपयोग करने की अनुमति देते हैं, और उन्हें आपके लिए निष्पादित नहीं करते हैं; evalबहाना करता है।
tshepang

मूल प्रश्न से संबंधित नहीं है, लेकिन यदि आप इन मुद्दों को GitHub, Bitbucket आदि पर रखते हैं, तो सुनिश्चित करें कि आप git / ssh URL का उपयोग कर रहे हैं, http नहीं, जो उपयोगकर्ता नाम + पासवर्ड मांगता रहेगा।
Czechnology

और यदि आपके पास डिफ़ॉल्ट कुंजी नहीं है, या गुणकों को जोड़ना चाहते हैं,ssh-add /path/to/key
hoosierEE

46

इसे हल करने का एक तरीका यह है ssh-agentऔर ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

इसके बाद पासफ़्रेज़ को वर्तमान सत्र के लिए सहेजा जाता है। और फिर से नहीं पूछा जाएगा।


7
अधिकांश लोग अपने पास के वाक्यांशों के लिए बिल्कुल भी कमज़ोर नहीं होना चाहते हैं।
कोन्नेक्सो

26

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

apt-get install keychain

यहाँ डेबियन कीचेन पैकेज पेज है । जैसा कि आप देख सकते हैं, परियोजना बहुत सक्रिय नहीं है, लेकिन मेरे लिए काम करती है। मैंने यहाँ एक अन्य उत्तर में इस बारे में थोड़ी टिप्पणी की


2
//, यह मेरे लिए काम किया। यह ssh- एजेंट की तुलना में बेहतर है, क्योंकि मुझे हर बार टर्मिनल खोलते समय अपने ssh कुंजी पासवर्ड को दर्ज करने की आवश्यकता नहीं होती है ।
नाथन बसानी

@NathanBasane क्या आप कह रहे हैं कि किचेन का उपयोग करने से आपको टर्मिनल खोलते समय हर बार ssh कुंजी पासवर्ड दर्ज करने की आवश्यकता नहीं है? आप उसे कैसे कॉन्फ़िगर करते हैं? क्योंकि चाबी का गुच्छा हर बार जब मैं टर्मिनल खोलता हूं तो पासवर्ड मांगता रहता है, केवल पहली बार जब मैंने इसे बूट करने के बाद खोला, लेकिन तब भी। मैं हर बार पासफ़्रेज़ में प्रवेश नहीं करना चाहता।
m4l490n

@ m4l490n नहीं, यदि आप किचेन का उपयोग कर रहे हैं, तो आपको टर्मिनल खोलने पर हर बार ssh कुंजी पासवर्ड दर्ज करने की आवश्यकता नहीं होनी चाहिए। लेकिन आपको बूट करने के बाद इसे एक बार दर्ज करना होगा। पासफ़्रेज़ डिस्क में सहेजा नहीं गया है - जो असुरक्षित होगा।
फहीम मीठा

मेरे लिए, यह हर बार पूछता है कि मैं लॉग इन करता हूं (मेरे पास रिमोट सर्वर में एक git रिपॉजिटरी + ssh कीज़ है और हर बार जब मैं "git pull" करता हूं तो मुझे पासफ़्रेज़ दर्ज करने की आवश्यकता होती है)
मार्टिन थोम

@MartinThoma जो गलत लगता है। जाँचें कि आपने सही ढंग से .ssh कॉन्फ़िगर किया है। विशेष रूप से, क्या आपका शेल सही तरीके से कॉन्फ़िगर किया गया है? यदि यह अभी भी आपके लिए काम नहीं कर रहा है और आप इसका पता नहीं लगा सकते हैं, तो आप एक प्रश्न पूछ सकते हैं।
फहीम मीठा

13

निम्न ~ / .ssh / config फ़ाइल बनाएँ (या मौजूद होने पर संपादित करें):

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

लेकिन मैं हर सेवा के लिए चाबियों का एक अलग जोड़ी का उपयोग कर रहा हूँ ...
connexo

@connexo आप वाइल्डकार्ड तारांकन को अपने व्यक्तिगत होस्ट नाम और 'id_rsa' के साथ अपनी संबंधित निजी कुंजी
नेस-ईई

1
मुझे IgnoreUnknown AddKeysToAgent,UseKeychainबस ऊपर जोड़ने की जरूरत थी UseKeychain yes
वाणिज्य दूतावास

1
मुझे यह त्रुटि मिल रही है: "UseKeychain Yes" लाइन पर "खराब कॉन्फ़िगरेशन विकल्प: यूजेसचेन"।
m4l490n 15

@ m4l490n: ऐसा लगता है कि UseKeychainOpenSSH 7.1p2 (2016-02-28) में विकल्प जोड़ा गया था। हो सकता है कि आपके पास पिछले संस्करण हो। openssh.com/txt/release-7.2
Chus

6

सुविधा के लिए, इष्टतम विधि jmtd और फहीम के उत्तरों का एक संयोजन है ।

ssh-agentअकेले उपयोग करने का मतलब है कि ssh-agentआपके द्वारा खोले जाने वाले हर नए टर्मिनल के लिए एक नया उदाहरण बनाया जाना चाहिए। keychainजब आरंभीकृत निजी कुंजी (ओं) के लिए पासफ़्रेज़ के लिए पूछेगा और इसे संग्रहीत करेगा। इस तरह आपकी निजी कुंजी पासवर्ड से सुरक्षित है लेकिन आपको बार-बार अपना पासवर्ड दर्ज नहीं करना पड़ेगा।

आर्क विकि से कीचेन आरंभ की सिफारिश की /etc/profile.d/तरह के रूप में या अपने खोल प्रोफ़ाइल, .bash_profileया .bashrc। इसका एक नुकसान यह है कि जैसे ही आप एक टर्मिनल खोलते हैं, यह आपके किचेन को ठीक कर देता है।

एक अधिक लचीला दृष्टिकोण keychainएक विशिष्ट tmuxसत्र के साथ संयोजन करना है । तो, इसमें .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... और फिर यह tmuxआवश्यक सत्र शुरू करने का एक मामला है जब और जब आवश्यक हो (एक कीबाइंड से लॉन्च किया जाता है):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

जब आप उस विशिष्ट tmuxसत्र को शुरू करते हैं, तो आपके किचेन को केवल एक बार इनिशियलाइज़ किया जाएगा । जब तक वह सत्र जारी रहेगा, आप उन sshकुंजियों तक पहुँचने और अपने दूरस्थ रिपॉजिटरी पर धकेलने में सक्षम होंगे ।


रिमोट मशीन पर काम करने के लिए मुझे यह कैसे मिलेगा? मैंने $ SSH_CLIENT की जांच करने के लिए दूसरी स्क्रिप्ट को संशोधित किया और यदि यह मौजूद है तो urxvtc निष्पादित नहीं करता है, बस tmux। यह काम करता है, लेकिन समस्या .bash_profile भाग है। जब मैं पहली बार बॉक्स में प्रवेश करता हूं तो यह कहता है "सर्वर नहीं मिला: कनेक्शन ने इनकार कर दिया" जो "tmux ls" का आउटपुट है। फिर, जब मैं दूसरी स्क्रिप्ट निष्पादित करता हूं, तो tmux या तो एक नया सत्र शुरू करता है या किसी मौजूदा को संलग्न करता है, लेकिन कोई किचेन प्रॉम्प्ट नहीं है। फिर, जब मैं सत्र से बाहर निकलता हूं, तो किचेन प्रांप्ट प्रतीक्षा में होता है।
jonyamo

अगर कोई सत्र नहीं है तो मैंने tmux आउटपुट को चुप कराने के लिए उत्तर दिया है।
जसोनव्रीयन

धन्यवाद, लेकिन यह अभी भी चाबी का गुच्छा के साथ मुद्दे को हल नहीं किया था। tmux नया सत्र बनाता है, लेकिन किसी भी खाली प्रॉम्प्ट पर सीधे जाता है। केवल जब मैं tmux सत्र से बाहर निकलता हूं, तो मुझे किचेन प्रॉम्प्ट अपने पासफ़्रेज़ के लिए कहता है।
jonyamo

मुझे लगता है कि मुझे किचेन कहना बंद कर देना चाहिए, क्योंकि चाबी का गुच्छा केवल .bash_profile में निष्पादित होता है। मुद्दा ssh-add निष्पादित करने से है। हालाँकि, अगर मैं tmux सेशन बनाने के बाद मैन्युअल रूप से ssh-add चलाता हूं, तो यह काम करता है।
योनामो

1
दूसरी स्क्रिप्ट छोड़ें और अपना सुरक्षित tmux सेशन शुरू करें .profile- इस तरह आप लॉगिन करते ही कुंजियों का संकेत प्राप्त कर लेंगे।
जसोंवरी

0

आप उपयोग कर सकते हैं sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

आपको बस sshpass -p yourpassphraseअपनी सामान्य sshकमांड को जोड़ने से पहले जोड़ना होगा ।


2
यह वास्तव में एक मूर्ख विचार जैसा लगता है। क्या यह आपके पासवर्ड को आपके शेल इतिहास में स्पष्ट पाठ में प्रदर्शित नहीं करेगा?
कोन्नेक्सो

ठीक है, लेकिन क्या आप पासवर्ड के साथ अपने सत्र की सुरक्षा करने वाले नहीं हैं?
बेल्का

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