В моем Vagrantfile 4 виртуальных машины - 3 сервера приложений и управляющий хост Ansible.
Я использую Vagrant только для создания виртуальных машин, поскольку я предоставляю их вручную с хоста ansible control, потому что я все еще создаю / редактирую ansible скрипты.
Я могу сделать vagrant ssh ansible
и vagrant ssh app1/2/3
т. Д., Но когда я пытаюсь сделать ansible-playbook oracle.yml
с хоста управления Ansible, SSH не удается с
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}
Я могу успешно выполнить SSH с Ansible VM на Oracle VM, используя vagrant пользователя и vagrant пароля.
Ключевые части моего Vagrantfile:
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
Что мне нужно добавить в Vagrantfile, чтобы позволить виртуальной машине Ansible подключаться к другим виртуальным машинам без пароля или дополнительных ручных действий после vagrant up
?
Это только для тестирования разработки в частной сети на компьютерах разработчиков, поэтому безопасность на самом деле не является проблемой и занимает второе место после простоты реализации и удобства работы пользователей.
Ответы:
Там нет общего метода, и это может зависеть от того, как
boxcutter/ol67
был упакован.Самый простой способ - определить пароль в файле инвентаризации Ansible:
Второй способ - оставить незащищенный закрытый ключ, настроенный на
oracle-vm
машине, и внедрить закрытый ключ вansible
виртуальную машину :Заранее сгенерируйте пару ключей на хост-машине, введите закрытый ключ для Ansible VM, открытый ключ для Oracle
authorized_keys
.Сгенерируйте пару ключей на Ansible VM, скопируйте открытый ключ в Oracle VM с помощью поставщика оболочки и введите
vagrant
пароль дляssh-copy-id
.И этот список не заканчивается, это зависит от требуемой безопасности.
источник
Основываясь на третьем предложении techraf, я сделал следующее:
vagrant up ansible
ssh-keygen
(пароль не нажимается Enter).ssh/id_rsa
и.ssh/id_rsa.pub
в каталог проектаvagrant destroy ansible
Vagrantfile
для копирования наid_rsa
все хостыVagrantfile
чтобы скопироватьid_rsa.pub
INTOauthorized_keys
на все хостыФрагмент Vagrantfile:
источник
Если вы хотите иметь предварительно отформатированный блок в списке, сделайте отступ на восемь пробелов:
генерировать открытый / закрытый ключ
отредактируйте Vagrantfile, добавьте следующие строки: config.vm.provision "file", источник: "id_rsa", место назначения: "/home/vagrant/.ssh/id_rsa"
источник