Eu tenho 4 VMs em meus servidores de aplicativos Vagrantfile - 3 e um host de controle Ansible.
Eu só uso o Vagrant para criar as VMs enquanto as provisiono manualmente a partir do host de controle ansible, porque ainda estou criando / editando os scripts ansible.
Eu posso fazer vagrant ssh ansible
e vagrant ssh app1/2/3
etc., mas quando tento fazer a ansible-playbook oracle.yml
partir do host de controle Ansible, o SSH falha com
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}
Posso ssh com êxito da VM Ansible para a Oracle VM usando usuário vagrant e senha vagrant.
As partes principais do meu arquivo Vagrant são:
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
O que preciso colocar no Vagrantfile para permitir que a VM Ansible se conecte às outras VMs sem exigir uma senha ou etapas manuais extras depois vagrant up
?
Isso é apenas para testes de desenvolvimento em uma rede privada em PCs de desenvolvedores, para que a segurança não seja realmente um problema e fique em segundo para facilitar a implementação e facilitar a experiência do usuário.
Respostas:
Não existe um método geral e pode depender de como
boxcutter/ol67
foi embalado.O método mais fácil seria definir a senha no arquivo de inventário Ansible:
O segundo método seria deixar a chave privada insegura configurada na
oracle-vm
máquina e injetar a chave privada naansible
VM:Gere o par de chaves antecipadamente na máquina host, injete a chave privada na VM Ansible, a chave pública na da Oracle
authorized_keys
.Gere o par de chaves na VM Ansible, copie a chave pública para a Oracle VM usando o provisionador de shell e injete
vagrant
como senha parassh-copy-id
.E a lista não termina aqui, depende da segurança necessária.
fonte
Com base na 3ª sugestão do techraf, fiz o seguinte:
vagrant up ansible
ssh-keygen
(nenhuma senha foi pressionada Enter).ssh/id_rsa
e.ssh/id_rsa.pub
para o diretório do projetovagrant destroy ansible
Vagrantfile
para copiar oid_rsa
para todos os hostsVagrantfile
para copiar oid_rsa.pub
paraauthorized_keys
em todos os hostsFragmento de arquivo Vagrant:
fonte
Se você deseja ter um bloco pré-formatado dentro de uma lista, recue oito espaços:
gerar chave pública / privada
edite o arquivo Vagrant, adicione as seguintes linhas: config.vm.provision "file", fonte: "id_rsa", destino: "/home/vagrant/.ssh/id_rsa"
fonte