Як налаштувати SSH-ключі у програмі Vagrant для кількох машин?


11

У мене в серфірі Vagrantfile - 4 VM - 3 сервери додатків та хост управління Ansible.

Я використовую Vagrant лише для створення віртуальних машин, оскільки я надаю їх вручну від вузла управління ansible, тому що я все ще створюю / редагую 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}

Я можу успішно переходити з Vs Ansible до Oracle VM, використовуючи блукання користувача та блукання паролів.

Основними частинами мого 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, щоб дозволити VM-програмі Ansible підключитися до інших віртуальних машин, не вимагаючи пароля чи додаткових кроків вручну після цього vagrant up?

Це лише для тестування розробок у приватній мережі на комп'ютерах розробників, тому безпека насправді не є проблемою і посідає друге місце для простоти впровадження та безперебійного користування.



Я досить чітко заявив, що я можу знаходитись між віртуальними машинами, це просто не можна, тому що для цього потрібні налаштування ключів. Він не може ssh. Питання явно різні.
оптициклічний

@JamesShewey: Я не думаю, що будь-яка відповідь на це питання має відношення до цього. Надана відповідь стосується спілкування господаря з гостями; необхідну відповідь потрібно застосувати між гостями.
Torenware Networks

Відповіді:


8

Не існує загального методу, і це може залежати від того, як boxcutter/ol67було упаковано.

  1. Найпростішим методом було б визначити пароль у файлі інвентаризації Ansible:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
  2. Другим методом було б залишити незахищений приватний ключ, налаштований на oracle-vmмашині, та ввести приватний ключ у ansibleВМ:

    config.vm.provision "shell" do |s|
      ssh_insecure_key = File.readlines("#{Dir.home}/.vagrant.d/insecure_private_key").first.strip
      s.inline = <<-SHELL
        echo #{ssh_insecure_key} >> /home/vagrant/.ssh/id_rsa
        chown vagrant /home/vagrant/.ssh/id_rsa
        chmod 400 /home/vagrant/.ssh/id_rsa
      SHELL
    end
  3. Заздалегідь створіть пару ключів на хост-машині, введіть приватний ключ до Ansible VM, відкритий ключ для Oracle authorized_keys.

  4. Створіть пару ключів на Ansible VM, скопіюйте відкритий ключ у Oracle VM за допомогою провідника оболонки та введіть vagrantяк пароль для ssh-copy-id.

І тут список не закінчується, це залежить від необхідної безпеки.


8

На основі третьої пропозиції techraf я зробив наступне:

  • vagrant up ansible
  • ssh-keygen (пароля не було натиснуто Enter )
  • скопійовано .ssh/id_rsaта .ssh/id_rsa.pubдо каталогу проектів
  • vagrant destroy ansible
  • модифікували Vagrantfile щоб скопіювати id_rsaвсі хости
  • змінив Vagrantfileкопіюватиid_rsa.pub в authorized_keysна всіх хостах
  • змінив Vagrantfile, щоб відключити перевірку хоста

Фрагмент Vagrantfile:

 config.vm.provision "file", source: "id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
 public_key = File.read("id_rsa.pub")
 config.vm.provision :shell, :inline =>"
     echo 'Copying ansible-vm public SSH Keys to the VM'
     mkdir -p /home/vagrant/.ssh
     chmod 700 /home/vagrant/.ssh
     echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
     chmod -R 600 /home/vagrant/.ssh/authorized_keys
     echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
     echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
     echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
     chmod -R 600 /home/vagrant/.ssh/config
     ", privileged: false

Це рішення добре працювало для мене, але мені довелося змінити хост 192.168. *. * На *. Не знаю чому. Дякую!
Зачо

0

Якщо ви хочете мати попередньо відформатований блок у списку, відступ на вісім пробілів:

  1. генерувати відкритий / приватний ключ

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
  2. редагуйте Vagrantfile, додайте наступні рядки: config.vm.provision "файл", джерело: "id_rsa", пункт призначення: "/home/vagrant/.ssh/id_rsa"

        public_key = File.read("id_rsa.pub")
        config.vm.provision "shell", inline: <<-SCRIPT
            chmod 600 /home/vagrant/.ssh/is_rsa
            echo 'Copying ansible-vm public SSH Keys to the VM'
            #mkdir -p /home/vagrant/.ssh
            chmod 700 /home/vagrant/.ssh
            echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
            chmod -R 600 /home/vagrant/.ssh/authorized_keys
            echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
            echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
            echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
            chmod -R 600 /home/vagrant/.ssh/config
            SCRIPT
  3.         vagrant up // or vagrant reload --provision

Це лише переформатована версія моєї відповіді? Якщо так, то, ймовірно, слід просто відредагувати мою відповідь, а не додавати нову.
оптициклічний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.