2011-08-26 9 views
14

मुझे वीरम का उपयोग करके एक वीएम चल रहा है, और मैं इसे शेफ के साथ प्रावधान कर रहा हूं। चरणों में से एक में एक गिट रेपो क्लोनिंग शामिल है, लेकिन मेरी एसएस-कुंजी (मेरी मेजबान मशीन पर) पर एक पासफ्रेज है।एक योनि पर पासफ्रेज़ के साथ एसएसएच कुंजी का उपयोग करें + शेफ सेटअप

जब मैं vagrant up चलाने के लिए, प्रक्रिया निम्न त्रुटि के साथ Git क्लोन कदम पर विफल रहता है:
Permission denied (publickey). fatal: The remote end hung up unexpectedly
(कुंजी पासफ़्रेज़ से होस्ट मशीन पर जोड़ दिया गया है,)

मैंने कोशिश की VagrantFile
जोड़ा गया Defaults env_keep = "SSH_AUTH_SOCKकरने के लिए
जोड़ा गया config.ssh.forward_agent = true: निम्न करके ssh एजेंट अग्रेषण के साथ इस को हल करने केवीएम

अब, vagrant up तब भी विफल हो जाता है जब यह गिट क्लोन भाग में आता है, लेकिन यदि मैं vagrant provision चलाता हूं, तो यह गुजरता है। मुझे लगता है कि यह इसलिए है क्योंकि एसएम कॉन्फ़िगरेशन स्थापित किया गया है जब वीएम लाया जाता है और उसे पुनः लोड नहीं किया जाता है

मैंने उन दो सेटिंग्स को समायोजित करने के बाद एसएसएच पुनः लोड करने का प्रयास किया है, लेकिन इससे मदद नहीं मिली है।

कोई विचार यह कैसे हल करें?

धन्यवाद।

उत्तर

10

जैसा कि आपने देखा है, प्रारंभिक दौड़ के दौरान सूडोर्स को अद्यतन करना बहुत देर हो गया है क्योंकि उस बिंदु से शेफ पहले से ही सूडो के तहत चल रहा है।

इसके बजाय मैंने एक हैकी रेसिपी लिखी जो उचित एसएसएच सॉकेट को एसएसएच_एयूथ_SOCK पर्यावरण का उपयोग करने और अद्यतन करने के लिए पाता है। यह सख्त मेजबान कुंजी जांच को भी अक्षम करता है ताकि प्रारंभिक आउटबाउंड कनेक्शन स्वचालित रूप से अनुमोदित हो।

सहेजें एक नुस्खा है कि किसी भी समय पहले ssh कनेक्शन करने से पहले मार डाला है के रूप में (उबंटू के साथ परीक्षण किया, लेकिन अन्य वितरण के साथ काम करना चाहिए) इस:

Directory "/root/.ssh" do 
    action :create 
    mode 0700 
end 

File "/root/.ssh/config" do 
    action :create 
    content "Host *\nStrictHostKeyChecking no" 
    mode 0600 
end 

ruby_block "Give root access to the forwarded ssh agent" do 
    block do 
    # find a parent process' ssh agent socket 
    agents = {} 
    ppid = Process.ppid 
    Dir.glob('/tmp/ssh*/agent*').each do |fn| 
     agents[fn.match(/agent\.(\d+)$/)[1]] = fn 
    end 
    while ppid != '1' 
     if (agent = agents[ppid]) 
     ENV['SSH_AUTH_SOCK'] = agent 
     break 
     end 
     File.open("/proc/#{ppid}/status", "r") do |file| 
     ppid = file.read().match(/PPid:\s+(\d+)/)[1] 
     end 
    end 
    # Uncomment to require that an ssh-agent be available 
    # fail "Could not find running ssh agent - Is config.ssh.forward_agent enabled in Vagrantfile?" unless ENV['SSH_AUTH_SOCK'] 
    end 
    action :create 
end 

वैकल्पिक रूप से यह और आधार में पहले से ही sudoers अद्यतन के साथ एक बॉक्स बनाने उसमें से आपके भविष्य के वीएम।

+0

धन्यवाद यह मेरे लिए काम करता है! – Anentropic

+0

बहुत बढ़िया, काम करता है !!! –

+2

उन लोगों के लिए जो बैश में एक ही चीज़ करना चाहते हैं: https://gist.github.com/bendavis78/5464209। अपने Vagrantfile में इसे जोड़ने के तरीके पर यहां देखें: http://docs-v1.vagrantup.com/v1/docs/provisioners/shell.html –

3

यह वह उत्तर नहीं हो सकता है जिसे आप ढूंढ रहे हैं, लेकिन इसके लिए एक आसान फिक्स पासफ्रेज़ के बिना समर्पित तैनाती एसएसएच कुंजी उत्पन्न करना होगा। मैं एकाधिक अनुप्रयोगों के लिए एक कुंजी की बजाय अलग और समर्पित तैनाती कुंजी पसंद करता हूं।

2

आप वग्रेंट (उसी प्रकार के भी) के साथ कई प्रावधान चला सकते हैं, प्रत्येक प्रावधानकर्ता को अपने स्वयं के एसएसएच कनेक्शन पर निष्पादित किया जाता है। मैं आमतौर पर शेल प्रावधानकर्ता का उपयोग कर इस समस्या को हल करता हूं जो Added Defaults env_keep = "SSH_AUTH_SOCK"/etc/sudoers को vm पर जोड़ता है।

यहाँ बैश स्क्रिप्ट मैं तो बस यही काम करने के लिए उपयोग:

#!/usr/bin/env bash 

# Ensure that SSH_AUTH_SOCK is kept 
if [ -n "$SSH_AUTH_SOCK" ]; then 
    echo "SSH_AUTH_SOCK is present" 
else 
    echo "SSH_AUTH_SOCK is not present, adding as env_keep to /etc/sudoers" 
    echo "Defaults env_keep+=\"SSH_AUTH_SOCK\"" >> "/etc/sudoers" 
fi 

मैं केवल अतिरिक्त शैल provisioners साथ बावर्ची प्रावधानकर्ता के साथ इस परीक्षण नहीं किया, ... लेकिन मैं क्या समझ से इस काम करना चाहिए आपके उपयोग के मामले के लिए भी वही।

0

अधिकांश बेस बॉक्स डिफ़ॉल्ट/असुरक्षित एसएसएच कुंजी के साथ आते हैं, passwordless ssh auth for vagrant को सक्षम करना आसान है, लेकिन केवल परीक्षण के लिए उपयोग किया जाना चाहिए।

संबंधित मुद्दे