with provisioner password language ssh vagrant vagrantfile

provisioner - vagrant ssh password



No se puede enviar ssh a VM vagas utilizando la clave privada insegura(vagabundo 1.7.2) (5)

Añadiendo config.ssh.insert_key = false al Vagrantfile y eliminando la nueva clave privada de vm .vagrant/machines/default/virtualbox/private_key actualiza automáticamente vagrant ssh-config con la clave privada correcta ~/.vagrant.d/insecure_private_key . Lo último que tuve que hacer fue introducir ssh en la vm y actualizar el archivo de claves autorizadas en la vm. curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys

Tengo un clúster de 3 máquinas virtuales. Aquí está el archivo Vagrant:

# -*- mode: ruby -*- # vi: set ft=ruby : hosts = { "host0" => "192.168.33.10", "host1" => "192.168.33.11", "host2" => "192.168.33.12" } Vagrant.configure("2") do |config| config.vm.box = "precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box" config.ssh.private_key_path = File.expand_path(''~/.vagrant.d/insecure_private_key'') hosts.each do |name, ip| config.vm.define name do |machine| machine.vm.hostname = "%s.example.org" % name machine.vm.network :private_network, ip: ip machine.vm.provider "virtualbox" do |v| v.name = name # #v.customize ["modifyvm", :id, "--memory", 200] end end end end

Esto solía funcionar hasta que actualicé recientemente:

ssh -i ~/.vagrant.d/insecure_private_key [email protected]

En cambio, el vagabundo pide una contraseña.

Parece que las versiones recientes de vagabundo (estoy en 1.7.2) crean una clave privada segura para cada máquina. Lo descubrí corriendo

vagrant ssh-config

El resultado muestra diferentes claves para cada host. Comprobé que las claves son diferentes difiriéndolas.

Intenté forzar la clave insegura configurando en Vagrantfile el config.ssh.private_key_path, pero no funciona.

La razón por la que deseo utilizar la clave insegura para todas las máquinas es que deseo aprovisionarlas desde afuera usando ansible. No quiero utilizar el aprovisionador de Ansible, sino tratar las máquinas virtuales como servidores remotos. Por lo tanto, Vagrantfile solo se utiliza para especificar las máquinas en el clúster y luego el aprovisionamiento se realizará de forma externa.

La documentación aún dice que por defecto las máquinas usarán la clave privada no segura.

¿Cómo puedo hacer que mis máquinas virtuales utilicen la clave privada no segura?


Cuando Vagrant crea una nueva clave ssh, se guarda con la configuración predeterminada debajo del directorio Vagrantfile en .vagrant / machines / default / virtualbox / private_key .

Usando la clave autogenerada puede iniciar sesión con eso desde el mismo directorio que el archivo Vagrant de esta manera:

ssh -i .vagrant/machines/default/virtualbox/private_key -p 2222 vagrant@localhost

Para conocer todos los detalles sobre la configuración real de ssh de una caja vagabunda, use el comando vagrant ssh-config .

# vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/babo/src/centos/.vagrant/machines/default/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL


Si está utilizando específicamente Ansible (no el proveedor de Vagrant Ansible), le recomendamos que considere usar el script de inventario dinámico vago del repo de Ansible:

Alternativamente, podría crear su propia secuencia de comandos y construir dinámicamente su propio archivo de inventario vagabundo:

SYSTEMS=$(vagrant status | grep running | cut -d '' '' -f1) echo ''[vagrant_systems]'' > vagrant.ini for SYSTEM in ${SYSTEMS}; do SSHCONFIG=$(vagrant ssh-config ${SYSTEM}) IDENTITY_FILE=$(echo "${SSHCONFIG}" | grep -o "//.*${SYSTEM}.*") PORT=$(echo "${SSHCONFIG}" | grep -oE ''[0-9]{4,5}'') echo "${SYSTEM} ansible_ssh_host=127.0.0.1 ansible_ssh_port=${PORT} ansible_ssh_private_key_file=${IDENTITY_FILE}" >> vagrant.ini done

Luego usa ansible-playbook -i=vagrant.ini

Si intenta utilizar ~/.ssh/config , tendrá que crear o editar dinámicamente las entradas existentes, ya que los puertos ssh pueden cambiar (debido a la detección de colisiones en Vagrant).


Vagrant cambió el comportamiento entre las versiones 1.6 y 1.7 y ahora insertará la clave insegura generada automáticamente en lugar de la predeterminada.

Puede cancelar este comportamiento configurando config.ssh.insert_key = false en su Vagrantfile.

Vagrant no debería reemplazar la clave insegura si especifica private_key_path como lo hizo, sin embargo, la lógica interna verifica si private_key_path apunta a la predeterminada insecure_private_key , y si lo hace, Vagrant la reemplazará.

Más información se puede encontrar here .


tldr;

ssh [email protected] -p2222 -i/~/www/vw/vw-environment/.vagrant/machines/default/virtualbox/private_key

No pude hacer que esto funcionara, así que al final agregué lo siguiente al script de ruby /opt/vagrant/embedded/gems/gems/vagrant-1.7.1//lib/vagrant/util/ssh.rb ( /opt/vagrant/embedded/gems/gems/vagrant-1.7.1//lib/vagrant/util/ssh.rb )

print(*command_options)

justo antes de esta línea que ejecuta la llamada ssh

SafeExec.exec("ssh", *command_options)

De modo que imprime todas las opciones de comando pasadas a la llamada ssh, a partir de ahí puede encontrar algo que funcione para usted según lo que vagabundo calcule como los parámetros ssh correctos.