Ich habe 4 VMs in meinem Vagrantfile - 3 Anwendungsserver und einen Ansible-Steuerungshost.
Ich verwende Vagrant nur zum Erstellen der VMs, da ich sie manuell vom ansible-Steuerungshost aus bereitstelle, da ich die ansible-Skripte noch erstelle / bearbeite.
Ich kann vagrant ssh ansible
und vagrant ssh app1/2/3
usw., aber wenn ich versuche, dies ansible-playbook oracle.yml
vom Ansible-Steuerungshost aus zu tun , schlägt SSH mit fehl
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}
Ich kann mit Hilfe von User Vagrant und Password Vagrant erfolgreich von der Ansible VM zur Oracle VM ssh.
Die wichtigsten Teile meiner Vagrant-Datei sind:
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
Was muss ich in die Vagrant-Datei einfügen, damit die Ansible-VM eine Verbindung zu den anderen VMs herstellen kann, ohne dass ein Kennwort oder zusätzliche manuelle Schritte erforderlich sind vagrant up
?
Dies ist nur für Entwicklungstests in einem privaten Netzwerk auf Entwickler-PCs gedacht, sodass Sicherheit kein wirkliches Problem darstellt und an zweiter Stelle nach einfacher Implementierung und reibungsloser Benutzererfahrung steht.
Antworten:
Es gibt keine allgemeine Methode und es kann davon abhängen, wie
boxcutter/ol67
verpackt wurde.Die einfachste Methode wäre, das Passwort in der Ansible-Inventardatei zu definieren:
Die zweite Methode besteht darin, den unsicheren privaten Schlüssel auf dem
oracle-vm
Computer zu belassen und den privaten Schlüssel in dieansible
VM einzuspeisen:Generieren Sie das Schlüsselpaar zuvor auf dem Hostcomputer, fügen Sie Ansible VM einen privaten Schlüssel und Oracle einen öffentlichen Schlüssel hinzu
authorized_keys
.Generieren Sie das Schlüsselpaar auf Ansible VM, kopieren Sie den öffentlichen Schlüssel mithilfe des Shell-Provisioners auf Oracle VM und fügen Sie ihn
vagrant
als Kennwort für einssh-copy-id
.Und die Liste endet hier nicht, sie hängt von der erforderlichen Sicherheit ab.
quelle
Basierend auf dem dritten Vorschlag von techraf habe ich Folgendes getan:
vagrant up ansible
ssh-keygen
(kein Passwort nur gedrückt Enter).ssh/id_rsa
und.ssh/id_rsa.pub
in das Projektverzeichnisvagrant destroy ansible
Vagrantfile
um dieid_rsa
auf alle Hosts zu kopierenVagrantfile
um dasid_rsa.pub
inauthorized_keys
auf allen Hosts zu kopierenVagrantfile-Snippet:
quelle
Wenn Sie einen vorformatierten Block in einer Liste haben möchten, rücken Sie ihn um acht Leerzeichen ein:
öffentlichen / privaten Schlüssel generieren
Bearbeiten Sie die Vagrant-Datei und fügen Sie die folgenden Zeilen hinzu: config.vm.provision "Datei", Quelle: "id_rsa", Ziel: "/home/vagrant/.ssh/id_rsa"
quelle