web-dev-qa-db-fra.com

Impossible de ssh aux ordinateurs virtuels vagabonds à l'aide de la clé privée non sécurisée (vagrant 1.7.2)

J'ai un cluster de 3 VM. Voici le Vagrantfile:

 # -*- 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

Cela fonctionnait jusqu'à ce que je mette à jour récemment:

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

Vagrant demande plutôt un mot de passe.

Il semble que les versions récentes de vagrant (version 1.7.2) créent une clé privée sécurisée pour chaque machine. Je l'ai découvert en courant

vagrant ssh-config

La sortie affiche des clés différentes pour chaque hôte. J'ai vérifié que les clés sont différentes en les différenciant.

J'ai essayé de forcer la clé non sécurisée en définissant dans Vagrantfile le chemin config.ssh.private_key_path, mais cela ne fonctionne pas.

La raison pour laquelle je veux utiliser la clé non sécurisée pour toutes les machines est que je veux les approvisionner de l'extérieur en utilisant ansible. Je ne souhaite pas utiliser le fournisseur Ansible, mais considère les ordinateurs virtuels comme des serveurs distants. Ainsi, le fichier Vagrant est simplement utilisé pour spécifier les machines du cluster, puis le provisioning sera effectué en externe.

La documentation indique toujours que, par défaut, les machines utiliseront la clé privée non sécurisée.

Comment faire en sorte que mes ordinateurs virtuels utilisent la clé privée non sécurisée?

34
Pyramid Newbie

Vagrant a changé le comportement entre les versions 1.6 et 1.7 et insère désormais une clé non sécurisée générée automatiquement au lieu de la clé par défaut.

Vous pouvez annuler ce comportement en définissant config.ssh.insert_key = false dans votre Vagrantfile.

Vagrant ne devrait pas remplacer la clé non sécurisée si vous spécifiez private_key_path comme vous l’avez fait, cependant, la logique interne vérifie si le private_key_path pointe sur la valeur par défaut insecure_private_key, et si c'est le cas, Vagrant le remplacera.

Plus d'informations peuvent être trouvées ici .

44
m1keil

Lorsque Vagrant crée une nouvelle clé ssh, elle est enregistrée avec la configuration par défaut sous le répertoire Vagrantfile à l'emplacement . Vagrant/machines/default/virtualbox/private_key.

En utilisant la clé générée automatiquement, vous pouvez vous connecter avec celui-ci à partir du même répertoire que le fichier Vagrant comme ceci:

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

Pour en savoir plus sur tous les détails de la configuration ssh d'une boîte vagrant, utilisez la commande 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
21
ababo

Ajouter config.ssh.insert_key = false vers le fichier Vagrant et suppression de la nouvelle clé privée vm .vagrant/machines/default/virtualbox/private_key _ vagrant met automatiquement à jour vagrant ssh-config avec la clé privée correcte ~/.vagrant.d/insecure_private_key. La dernière chose que je devais faire était de ssh dans la machine virtuelle et de mettre à jour le fichier de clés autorisées sur la machine virtuelle. curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys

13
Andy

tldr;

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

Je n’arrivais pas à obtenir que cela fonctionne, j’ai donc ajouté ce qui suit au script ssh.rb Ruby (/opt/vagrant/embedded/gems/gems/vagrant-1.7.1//lib/vagrant/util/ssh.rb)

print(*command_options)

juste avant cette ligne qui exécute l'appel ssh

SafeExec.exec("ssh", *command_options)

Ainsi, toutes les options de commande transmises à l'appel ssh sont imprimées. À partir de là, vous pouvez trouver quelque chose qui fonctionne pour vous en fonction de ce que vagrant calcule comme étant les paramètres ssh corrects.

3
chim

Si vous utilisez spécifiquement Ansible (et non le provisioner vagabond Ansible), vous pouvez envisager d'utiliser le script d'inventaire dynamique errant du référentiel d'Ansible:

Vous pouvez également créer votre propre script et créer dynamiquement votre propre fichier d'inventaire vagabond:

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

Ensuite, utilisez ansible-playbook -i=vagrant.ini

Si vous essayez d'utiliser le ~/.ssh/config, vous devrez créer ou modifier dynamiquement des entrées existantes, car les ports ssh peuvent changer (en raison de la détection de collision dans Vagrant).

0
Joaquin Menchaca