मैं वैग्रंट मल्टी-मशीन सेटअप में SSH कुंजियों को कैसे कॉन्फ़िगर करूं?


11

मेरे Vagrantfile में 4 VMs हैं - 3 एप्लिकेशन सर्वर और एक Ansible कंट्रोल होस्ट।

मैं केवल वीएएसटी बनाने के लिए वैग्रंट का उपयोग करता हूं क्योंकि मैं उन्हें मैन्युअल रूप से एंसिबल कंट्रोल होस्ट से प्रावधान करता हूं क्योंकि मैं अभी भी एसिबल स्क्रिप्ट का निर्माण / संपादन कर रहा हूं।

मैं कर सकता हूं vagrant ssh ansibleऔर vagrant ssh app1/2/3इत्यादि, लेकिन जब मैं ansible-playbook oracle.ymlAnsible control host से करने की कोशिश करता हूं , तो SSH असफल हो जाता है

fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true}

मैं उपयोगकर्ता वीआरएन और पासवर्ड योनि का उपयोग करके वीएमएल वीएम से ओरेकल वीएम से सफलतापूर्वक एसएचएस कर सकता हूं।

मेरे Vagrantfile के प्रमुख भाग हैं:

config.ssh.insert_key = false

config.vm.define "db" do |db|
    db.vm.box = "boxcutter/ol67"
    db.vm.hostname = "oracle-vm"
    db.vm.network "forwarded_port", guest: 22, host: 2201, id: "ssh", auto_correct: false
    db.vm.network "forwarded_port", guest: 1521, host: 1521
    db.vm.network "private_network", ip: "192.168.60.10"
    db.vm.provider "virtualbox" do |v|
        v.name = "oracle-vm"
        v.linked_clone = true
        v.memory = 2048
        v.cpus = 2
    end
end

#Optional ansible control machine for Windows users
config.vm.define "ansible", autostart: false do |ansible|
    ansible.vm.box = "williamyeh/ansible"
    ansible.vm.hostname = "ansible-vm"
    ansible.vm.network "forwarded_port", guest: 22, host: 2204, id: "ssh", auto_correct: false
    ansible.vm.network "private_network", ip: "192.168.60.50"
    ansible.vm.provider "virtualbox" do |v|
        v.linked_clone = true
    end
    #Mount the project directory on the guest so we can run the playbooks from there
    ansible.vm.synced_folder ".", "/data/ansible", create: true
end

पासवर्ड या अतिरिक्त मैनुअल स्टेप्स की आवश्यकता के बिना ऐसिमिबल वीएम को दूसरे वीएम से कनेक्ट करने की अनुमति देने के लिए मुझे वग्रांटफाइल में क्या डालने की आवश्यकता है vagrant up?

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



मैंने स्पष्ट रूप से कहा कि मैं VMs के बीच ssh कर सकता हूं यह सिर्फ इसलिए है कि ansible नहीं कर सकता क्योंकि इसके लिए कुंजी सेट की आवश्यकता होती है। वह ssh नहीं कर सकता। प्रश्न स्पष्ट रूप से अलग हैं।
ऑप्टिक

@JamesShewey: मुझे नहीं लगता कि उस प्रश्न का कोई भी उत्तर उस के लिए प्रासंगिक है। दिए गए उत्तर मेजबान से मेहमानों के लिए संचार को संदर्भित करता है; आवश्यक जवाब मेहमानों के बीच लागू करने की जरूरत है।
टॉरेनवेयर नेटवर्क

जवाबों:


8

कोई सामान्य तरीका नहीं है और यह इस बात पर निर्भर हो सकता है कि कैसे boxcutter/ol67पैक किया गया था।

  1. सबसे आसान तरीका यह होगा कि आप पासवर्ड को आंसरेबल इन्वेंट्री फाइल में परिभाषित करें:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
    
  2. दूसरी विधि oracle-vmमशीन पर कॉन्फ़िगर की गई असुरक्षित निजी कुंजी को छोड़ना और ansibleवीएम को निजी कुंजी को इंजेक्ट करना होगा :

    config.vm.provision "shell" do |s|
      ssh_insecure_key = File.readlines("#{Dir.home}/.vagrant.d/insecure_private_key").first.strip
      s.inline = <<-SHELL
        echo #{ssh_insecure_key} >> /home/vagrant/.ssh/id_rsa
        chown vagrant /home/vagrant/.ssh/id_rsa
        chmod 400 /home/vagrant/.ssh/id_rsa
      SHELL
    end
    
  3. होस्ट मशीन पर पहले से कुंजी जोड़ी बनाएं, निजी कुंजी को अन्सिबल वीएम पर इंजेक्ट करें, ओरेकल के लिए सार्वजनिक कुंजी authorized_keys

  4. Ansible VM पर मुख्य जोड़ी उत्पन्न करें, शेल प्रोमेकर का उपयोग करके Oracle VM के लिए सार्वजनिक कुंजी की प्रतिलिपि बनाएँ और vagrantपासवर्ड के रूप में इंजेक्ट करें ssh-copy-id

और सूची यहां समाप्त नहीं होती है, यह आवश्यक सुरक्षा पर निर्भर करती है।


8

Techraf के 3 सुझाव के आधार पर मैंने निम्नलिखित किया:

  • vagrant up ansible
  • ssh-keygen(कोई पासवर्ड नहीं दबाया गया Enter)
  • कॉपी .ssh/id_rsaऔर .ssh/id_rsa.pubपरियोजना निर्देशिका के लिए
  • vagrant destroy ansible
  • सभी होस्ट Vagrantfileको कॉपी करने के लिए संशोधितid_rsa
  • संशोधित Vagrantfileकॉपी करने के लिए id_rsa.pubमें authorized_keysसभी मेजबानों पर
  • होस्ट चेकिंग को अक्षम करने के लिए वैग्रांटफाइल को संशोधित किया

वगरंटफाइल स्निपेट:

 config.vm.provision "file", source: "id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
 public_key = File.read("id_rsa.pub")
 config.vm.provision :shell, :inline =>"
     echo 'Copying ansible-vm public SSH Keys to the VM'
     mkdir -p /home/vagrant/.ssh
     chmod 700 /home/vagrant/.ssh
     echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
     chmod -R 600 /home/vagrant/.ssh/authorized_keys
     echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
     echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
     echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
     chmod -R 600 /home/vagrant/.ssh/config
     ", privileged: false

इस समाधान ने मेरे लिए अच्छा काम किया लेकिन मुझे होस्ट 192.168 को बदलना पड़ा। *। *। यकीन नहीं है कि क्यों। धन्यवाद!
जैचो

0

यदि आप किसी सूची के भीतर एक पूर्वनिर्मित ब्लॉक रखना चाहते हैं, तो आठ स्थानों पर इंडेंट करें:

  1. सार्वजनिक / निजी कुंजी उत्पन्न करें

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
    
  2. Vagrantfile को संपादित करें, निम्न पंक्तियों को जोड़ें: config.vm.provision "फ़ाइल", स्रोत: "id_rsa", गंतव्य: "/home/vagrant/.ssh/id_rsa"

        public_key = File.read("id_rsa.pub")
        config.vm.provision "shell", inline: <<-SCRIPT
            chmod 600 /home/vagrant/.ssh/is_rsa
            echo 'Copying ansible-vm public SSH Keys to the VM'
            #mkdir -p /home/vagrant/.ssh
            chmod 700 /home/vagrant/.ssh
            echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
            chmod -R 600 /home/vagrant/.ssh/authorized_keys
            echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
            echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
            echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
            chmod -R 600 /home/vagrant/.ssh/config
            SCRIPT
    
  3.         vagrant up // or vagrant reload --provision

क्या यह मेरे उत्तर का केवल एक सुधारित संस्करण है? यदि ऐसा है तो आपको शायद नया जोड़ने के बजाय केवल मेरे उत्तर को संपादित करना चाहिए।
ऑप्टिक 14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.