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.