Vagrant 다중 머신 설정에서 SSH 키를 구성하는 방법


11

Vagrantfile에 3 개의 VM이 있으며 3 개의 응용 프로그램 서버와 Ansible 제어 호스트가 있습니다.

Ansible 스크립트를 작성 / 편집하고 있으므로 Vagrant를 사용하여 ansible 제어 호스트에서 수동으로 프로비저닝 할 때만 VM을 작성합니다.

내가 할 수있는 vagrant ssh ansiblevagrant ssh app1/2/3등등하지만 내가하려고 할 때 ansible-playbook oracle.ymlAnsible 제어 호스트에서 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}

사용자 vagrant 및 password vagrant를 사용하여 Ansible VM에서 Oracle VM으로 성공적으로 ssh 할 수 있습니다.

내 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

Ansible VM이 비밀번호 나 추가 수동 단계없이 다른 VM에 연결할 수 있도록 Vagrantfile에 무엇을 넣어야 vagrant up합니까?

이는 개발자 PC의 개인 네트워크에서 개발 테스트를위한 것이므로 보안은 실제로 문제가되지 않으며 구현의 용이성과 원활한 사용자 경험으로 이어집니다.



VM간에 ssh를 할 수 있다고 분명히 말 했으므로 키를 설정해야하기 때문에 ansible은 불가능합니다. 그는 ssh 수 없습니다. 질문은 분명히 다릅니다.
opticyclic

@ Jamesmeshewe : 그 질문에 대한 답이 그와 관련이 있다고 생각하지 않습니다. 주어진 답변은 호스트에서 손님으로의 커뮤니케이션에 관한 것입니다. 필요한 답변은 손님 사이에 적용해야합니다.
Torenware Networks

답변:


8

일반적인 방법은 없으며 boxcutter/ol67포장 방법 에 따라 달라질 수 있습니다 .

  1. 가장 쉬운 방법은 Ansible 인벤토리 파일에서 비밀번호를 정의하는 것입니다.

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
    
  2. 두 번째 방법은 안전하지 않은 개인 키를 시스템에 구성한 상태로두고 oracle-vm개인 키를 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. 호스트 시스템에서 미리 키 페어를 생성하고 개인 키를 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

이 솔루션은 저에게 효과적이지만 Host 192.168. *. *를 *로 변경해야했습니다. 이유가 확실하지 않습니다. 감사!
Zacho

0

목록 내에 미리 형식이 지정된 블록을 만들려면 여덟 칸씩 들여 쓰기하십시오.

  1. 공개 / 개인 키 생성

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
    
  2. Vagrantfile을 편집하고 다음 줄을 추가하십시오. config.vm.provision "file", 소스 : "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

이것은 내 대답의 재 형식화 된 버전입니까? 그렇다면 새로운 답변을 추가하는 대신 내 답변을 편집해야 할 것입니다.
opticyclic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.