Tengo 4 máquinas virtuales en mi Vagrantfile: 3 servidores de aplicaciones y un host de control Ansible.
Solo uso Vagrant para crear las máquinas virtuales, ya que las aprovisiono manualmente desde el host de control ansible porque todavía estoy creando / editando los scripts ansibles.
Puedo hacer vagrant ssh ansibley vagrant ssh app1/2/3etc., pero cuando intento hacerlo ansible-playbook oracle.ymldesde el host de control Ansible, SSH falla 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}
Puedo realizar ssh con éxito desde la VM de Ansible a la VM de Oracle utilizando el vagabundo de usuario y el vagabundo de contraseña.
Las partes clave de mi Vagrantfile son:
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
¿Qué necesito poner en el Vagrantfile para permitir que la VM Ansible se conecte a las otras VM sin requerir una contraseña o pasos manuales adicionales después vagrant up?
Esto es solo para las pruebas de desarrollo en una red privada en las PC de los desarrolladores, por lo que la seguridad no es realmente un problema y ocupa el segundo lugar para facilitar la implementación y la experiencia del usuario sin problemas.

Respuestas:
No existe un método general y puede depender de cómo
boxcutter/ol67se empaquetó.El método más sencillo sería definir la contraseña en el archivo de inventario Ansible:
El segundo método sería dejar la clave privada insegura configurada en la
oracle-vmmáquina e inyectar la clave privada en laansibleVM:Genere el par de claves de antemano en la máquina host, inyecte la clave privada a Ansible VM, la clave pública a Oracle
authorized_keys.Genere el par de claves en Ansible VM, copie la clave pública en Oracle VM usando el aprovisionador de shell e inyecte
vagrantcomo contraseña parassh-copy-id.Y la lista no termina aquí, depende de la seguridad requerida.
fuente
Basado en la tercera sugerencia de techraf, hice lo siguiente:
vagrant up ansiblessh-keygen(sin contraseña solo presionada Enter).ssh/id_rsay.ssh/id_rsa.pubal directorio del proyectovagrant destroy ansibleVagrantfilepara copiarid_rsaa todos los hostsVagrantfilepara copiarid_rsa.pubenauthorized_keystodos los hostsFragmento de Vagrantfile:
fuente
Si desea tener un bloque preformateado dentro de una lista, sangría por ocho espacios:
generar clave pública / privada
edite Vagrantfile, agregue las siguientes líneas: config.vm.provision "file", fuente: "id_rsa", destino: "/home/vagrant/.ssh/id_rsa"
fuente