Come configuro le chiavi SSH in una configurazione multi-macchina di Vagrant?


11

Ho 4 VM nel mio Vagrantfile - 3 application server e un host di controllo Ansible.

Uso Vagrant solo per creare le macchine virtuali mentre eseguo il provisioning manuale dall'host di controllo Ansible perché sto ancora creando / modificando gli script Ansible.

Che posso fare vagrant ssh ansiblee vagrant ssh app1/2/3così via, ma quando provo a fare ansible-playbook oracle.ymlda host di controllo Ansible, SSH non riesce con

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}

Posso eseguire con successo ssh dalla VM Ansible alla VM Oracle usando il vagabondo utente e il vagabondo password.

Le parti chiave del mio Vagrantfile sono:

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

Cosa devo inserire nel Vagrantfile per consentire a Ansible VM di connettersi alle altre VM senza richiedere una password o ulteriori passaggi manuali dopo vagrant up?

Questo è solo per i test di sviluppo su una rete privata sui PC degli sviluppatori, quindi la sicurezza non è davvero un problema e viene seconda per facilità di implementazione e fluida esperienza utente.



Ho affermato chiaramente che posso usare ssh tra macchine virtuali, è solo che non è possibile perché richiede l'impostazione delle chiavi. Non può ssh. Le domande sono chiaramente diverse.
ottico

@JamesShewey: non credo che nessuna risposta a questa domanda sia pertinente. La risposta fornita si riferisce alle comunicazioni dall'ospite agli ospiti; la risposta necessaria deve essere applicata tra gli ospiti.
Torenware Networks,

Risposte:


8

Non esiste un metodo generale e potrebbe dipendere da come è boxcutter/ol67stato impacchettato.

  1. Il metodo più semplice sarebbe definire la password nel file di inventario Ansible:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
    
  2. Il secondo metodo sarebbe quello di lasciare la chiave privata non sicura configurata sulla oracle-vmmacchina e iniettare la chiave privata nella 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. Generare preventivamente la coppia di chiavi sul computer host, iniettare la chiave privata in Ansible VM, la chiave pubblica in Oracle authorized_keys.

  4. Generare la coppia di chiavi su Ansible VM, copiare la chiave pubblica su Oracle VM utilizzando il provisioning della shell e iniettare vagrantcome password per ssh-copy-id.

E l'elenco non finisce qui, dipende dalla sicurezza richiesta.


8

Sulla base del terzo suggerimento di techraf ho fatto quanto segue:

  • vagrant up ansible
  • ssh-keygen(nessuna password appena premuta Enter)
  • copiato .ssh/id_rsae .ssh/id_rsa.pubnella directory del progetto
  • vagrant destroy ansible
  • modificato Vagrantfileper copiarlo id_rsasu tutti gli host
  • modificato Vagrantfileper copiarlo id_rsa.pubin authorized_keyssu tutti gli host
  • modificato il file Vagrant per disabilitare il controllo host

Snippet di file vagabondi:

 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

Questa soluzione ha funzionato bene per me, ma ho dovuto cambiare l'host 192.168. *. * In appena *. Non so perché. Grazie!
Zacho,

0

Se si desidera avere un blocco preformattato all'interno di un elenco, rientrare di otto spazi:

  1. genera chiave pubblica / privata

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
  2. modifica Vagrantfile, aggiungi le seguenti righe: config.vm.provision "file", fonte: "id_rsa", destinazione: "/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

È solo una versione riformattata della mia risposta? In tal caso, probabilmente dovresti semplicemente modificare la mia risposta anziché aggiungerne una nuova.
ottico
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.