Bagaimana cara mengkonfigurasi kunci SSH dalam pengaturan multi-mesin Vagrant?

11

Saya memiliki 4 VM di server aplikasi Vagrantfile - 3 saya dan host kontrol yang memungkinkan.

Saya hanya menggunakan Vagrant untuk membuat VM karena saya menyediakannya secara manual dari host kontrol yang memungkinkan karena saya masih membuat / mengedit skrip yang mungkin.

Saya dapat melakukan vagrant ssh ansibledan vagrant ssh app1/2/3lain - lain, tetapi ketika saya mencoba melakukannya ansible-playbook oracle.ymldari host kontrol Ansible, SSH gagal

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}

Saya berhasil ssh dari Ansible VM ke Oracle VM menggunakan pengguna gelandangan dan gelandangan kata sandi.

Bagian penting dari Vagrantfile saya adalah:

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

Apa yang perlu saya masukkan ke dalam Vagrantfile untuk memungkinkan VM yang memungkinkan untuk terhubung ke VM lain tanpa memerlukan kata sandi atau langkah manual tambahan setelahnya vagrant up?

Ini hanya untuk pengujian pengembangan pada jaringan pribadi pada pengembang PC sehingga keamanan tidak benar-benar masalah dan yang kedua untuk kemudahan implementasi dan kelancaran pengalaman pengguna.

opticyclic
sumber
Saya menyatakan dengan cukup jelas bahwa saya dapat ssh di antara VM, hanya saja tidak bisa karena memerlukan kunci yang diatur. Dia tidak bisa ssh. Pertanyaannya jelas berbeda.
opticyclic
@ JamesShewey: Saya tidak berpikir bahwa jawaban untuk pertanyaan itu relevan dengan itu. Jawaban yang diberikan mengacu pada komunikasi dari tuan rumah kepada para tamu; jawaban yang dibutuhkan perlu diterapkan di antara para tamu.
Torenware Networks

Jawaban:

8

Tidak ada metode umum dan itu mungkin tergantung pada bagaimana boxcutter/ol67itu dikemas.

  1. Metode termudah adalah dengan menentukan kata sandi di file inventaris yang dimungkinkan:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
    
  2. Metode kedua adalah membiarkan kunci privat tidak aman dikonfigurasikan pada oracle-vmmesin dan menyuntikkan kunci privat ke ansibleVM:

    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. Buat pasangan kunci sebelumnya di mesin host, masukkan kunci pribadi ke Ansible VM, kunci publik ke Oracle authorized_keys.

  4. Hasilkan pasangan kunci pada Ansible VM, salin kunci publik ke Oracle VM menggunakan shell provisioner dan masukkan vagrantsebagai kata sandi untuk ssh-copy-id.

Dan daftar tidak berakhir di sini, itu tergantung pada keamanan yang diperlukan.

techraf
sumber
7

Berdasarkan saran ke-3 techraf saya melakukan hal berikut:

  • vagrant up ansible
  • ssh-keygen(tidak ada kata sandi yang ditekan Enter)
  • disalin .ssh/id_rsadan .ssh/id_rsa.pubke direktori proyek
  • vagrant destroy ansible
  • memodifikasi Vagrantfileuntuk menyalin id_rsake semua host
  • memodifikasi Vagrantfileuntuk menyalin id_rsa.pubke authorized_keysdalam semua host
  • memodifikasi Vagrantfile untuk menonaktifkan pemeriksaan host

Cuplikan Vagrantfile:

 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
opticyclic
sumber
Solusi ini bekerja dengan baik untuk saya tetapi saya harus mengubah Host 192.168. *. * Menjadi hanya *. Tidak yakin kenapa. Terima kasih!
Zacho
0

Jika Anda ingin memiliki blok yang telah diformat dalam daftar, indentasi dengan delapan spasi:

  1. menghasilkan kunci publik / pribadi

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
    
  2. sunting Vagrantfile, tambahkan baris ikuti: config.vm.provisi "file", sumber: "id_rsa", tujuan: "/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
tar tu
sumber
Apakah ini hanya versi yang diformat dari jawaban saya? Jika demikian, Anda mungkin harus mengedit jawaban saya daripada menambahkan yang baru.
opticyclic