J'ai 4 machines virtuelles dans mon Vagrantfile - 3 serveurs d'applications et un hôte de contrôle Ansible.
J'utilise uniquement Vagrant pour créer les machines virtuelles car je les provisionne manuellement à partir de l'hôte de contrôle ansible car je suis toujours en train de créer / éditer les scripts ansible.
Je peux le faire vagrant ssh ansible
, vagrant ssh app1/2/3
etc., mais lorsque j'essaie de le faire à ansible-playbook oracle.yml
partir de l'hôte de contrôle Ansible, SSH échoue avec
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}
Je peux réussir ssh de la machine virtuelle Ansible à la machine virtuelle Oracle en utilisant vagrant utilisateur et mot de passe vagabond.
Les éléments clés de mon Vagrantfile sont:
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
Que dois-je mettre dans le Vagrantfile pour permettre à la machine virtuelle Ansible de se connecter aux autres machines virtuelles sans nécessiter de mot de passe ou des étapes manuelles supplémentaires par la suite vagrant up
?
C'est juste pour les tests de développement sur un réseau privé sur les PC des développeurs, donc la sécurité n'est pas vraiment un problème et vient en second lieu pour la facilité de mise en œuvre et l'expérience utilisateur fluide.
Réponses:
Il n'y a pas de méthode générale et cela peut dépendre de la façon dont a
boxcutter/ol67
été emballé.La méthode la plus simple serait de définir le mot de passe dans le fichier d'inventaire Ansible:
La deuxième méthode consisterait à laisser la clé privée non sécurisée configurée sur la
oracle-vm
machine et à injecter la clé privée dans laansible
machine virtuelle:Générez au préalable la paire de clés sur la machine hôte, injectez la clé privée à Ansible VM, la clé publique à Oracle
authorized_keys
.Générez la paire de clés sur Ansible VM, copiez la clé publique sur Oracle VM à l'aide du shell provisioner et injectez
vagrant
comme mot de passe pourssh-copy-id
.Et la liste ne s'arrête pas là, cela dépend de la sécurité requise.
la source
Sur la base de la troisième suggestion de techraf, j'ai fait ce qui suit:
vagrant up ansible
ssh-keygen
(pas de mot de passe juste pressé Enter).ssh/id_rsa
et.ssh/id_rsa.pub
dans le répertoire du projetvagrant destroy ansible
Vagrantfile
pour copier leid_rsa
sur tous les hôtesVagrantfile
pour copier leid_rsa.pub
dansauthorized_keys
tous les hôtesExtrait de Vagrantfile:
la source
Si vous souhaitez avoir un bloc préformaté dans une liste, indenter de huit espaces:
générer une clé publique / privée
éditez Vagrantfile, ajoutez les lignes suivantes: config.vm.provision "file", source: "id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
la source