Làm cách nào để định cấu hình khóa SSH trong thiết lập nhiều máy Vagrant?


11

Tôi có 4 máy ảo trong Vagrantfile - 3 máy chủ ứng dụng và máy chủ điều khiển Ansible.

Tôi chỉ sử dụng Vagrant để tạo VM khi tôi cung cấp chúng theo cách thủ công từ máy chủ điều khiển ansible vì tôi vẫn đang tạo / chỉnh sửa các tập lệnh ansible.

Tôi có thể làm vagrant ssh ansiblevagrant ssh app1/2/3vv nhưng khi tôi cố gắng thực hiện ansible-playbook oracle.ymltừ máy chủ điều khiển Ansible, SSH không thành công với

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}

Tôi có thể ssh thành công từ máy ảo Ansible sang máy ảo Oracle bằng cách sử dụng mật khẩu và mật khẩu người dùng.

Các phần chính của Vagrantfile của tôi là:

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

Tôi cần đặt gì vào Vagrantfile để cho phép VM Ansible kết nối với các VM khác mà không yêu cầu mật khẩu hoặc các bước thủ công bổ sung sau vagrant up?

Đây chỉ là để thử nghiệm phát triển trên một mạng riêng trên các nhà phát triển PC nên bảo mật không thực sự là vấn đề và đứng thứ hai để dễ thực hiện và trải nghiệm người dùng trơn tru.



Tôi đã nói khá rõ ràng rằng tôi có thể ssh giữa các VM, điều đó không thể xảy ra vì nó yêu cầu các khóa được thiết lập. Anh không thể ssh. Các câu hỏi rõ ràng là khác nhau.
quang

@JamesShewey: Tôi không nghĩ rằng bất kỳ câu trả lời cho câu hỏi đó có liên quan đến điều đó. Câu trả lời được đưa ra đề cập đến thông tin liên lạc từ chủ nhà đến khách; câu trả lời cần thiết để áp dụng giữa khách.
Mạng Torenware

Câu trả lời:


8

Không có phương pháp chung và nó có thể phụ thuộc vào cách boxcutter/ol67đóng gói.

  1. Phương pháp đơn giản nhất là xác định mật khẩu trong tệp kiểm kê Ansible:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
    
  2. Phương pháp thứ hai sẽ là để khóa riêng không an toàn được cấu hình trên oracle-vmmáy và đưa khóa riêng vào ansibleVM:

    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. Tạo cặp khóa trước trên máy chủ, nhập khóa riêng vào Ansible VM, khóa chung cho Oracle authorized_keys.

  4. Tạo cặp khóa trên Ansible VM, sao chép khóa chung vào Oracle VM bằng cách sử dụng trình cung cấp shell và nhập vagrantlàm mật khẩu cho ssh-copy-id.

Và danh sách không kết thúc ở đây, nó phụ thuộc vào bảo mật bắt buộc.


7

Dựa trên đề xuất thứ 3 của techraf, tôi đã làm như sau:

  • vagrant up ansible
  • ssh-keygen(không nhấn mật khẩu Enter)
  • sao chép .ssh/id_rsa.ssh/id_rsa.pubvào thư mục dự án
  • vagrant destroy ansible
  • sửa đổi Vagrantfileđể sao chép id_rsatất cả các máy chủ
  • sửa đổi Vagrantfileđể sao chép id_rsa.pubvào authorized_keystất cả các máy chủ
  • đã sửa đổi Vagrantfile để vô hiệu hóa kiểm tra máy chủ

Đoạn trích 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

Giải pháp này hoạt động tốt với tôi nhưng tôi đã phải thay đổi Host 192.168. *. * Thành *. Không chắc chắn lý do tại sao. Cảm ơn!
Zacho

0

Nếu bạn muốn có một khối được định dạng sẵn trong danh sách, hãy thụt lề bởi tám khoảng trắng:

  1. tạo khóa công khai / riêng

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
    
  2. chỉnh sửa Vagrantfile, thêm các dòng sau: 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: <<-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

Đây có phải chỉ là một phiên bản định dạng lại câu trả lời của tôi? Nếu vậy có lẽ bạn chỉ nên chỉnh sửa câu trả lời của tôi thay vì thêm một câu hỏi mới.
quang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.