여러 Vagrant VM 간의 SSH

여러 Vagrant VM 간의 SSH

HP Vertica의 로컬 3노드 클러스터를 설치하려고 합니다. Vertica 설치는 SSH를 사용하여 노드 중 하나에서 트리거될 때 각 노드에 DB 서버 소프트웨어를 설치합니다.

"권한이 거부되었습니다(공개 키).라는 오류가 발생합니다. 다양한 StackOverflow 게시물을 검토하여 다음과 같이 VagrantFile을 만들었습니다.-

# -*- mode: ruby -*-
# vi: set ft=ruby :

BOX_IMAGE = "ubuntu/xenial64"
NODE_COUNT = 3

Vagrant.configure("2") do |config|
    (1..NODE_COUNT).each do|i|
      config.vm.define "vertica_node#{i}" do |subconfig|
        subconfig.vm.box = BOX_IMAGE
        subconfig.vm.hostname="verticaNode#{i}"

        if i == 1
          subconfig.vm.network "forwarded_port", guest: 5433, host: 5433, id: "Vertica DBEngine"
          subconfig.vm.network "forwarded_port", guest: 5450, host: 5450, id: "Vertica MC"
          subconfig.vm.network "forwarded_port", guest: 1527, host: 1527, id: "Vertica MCDatabase"
        end
        subconfig.vm.network "private_network", ip: "192.168.33.#{i + 10}"

        subconfig.vm.synced_folder "./data", "/vagrant/data", create: true

        subconfig.vm.provider "virtualbox" do |vb|
          vb.name = "VerticaUbuntu_Node#{i}"
          vb.memory = "2048"
        end

      end
    end
  config.ssh.forward_agent = true
  config.ssh.insert_key    = false
  config.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key","~/.ssh/id_rsa"]
  config.vm.provision "shell", path: "bootstrap.sh"
  config.vm.provision "shell", privileged: false do |s|
    ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
    s.inline = <<-SHELL
    echo #{ssh_pub_key} >> /home/$USER/.ssh/authorized_keys
    sudo bash -c "echo #{ssh_pub_key} >> /root/.ssh/authorized_keys"
    SHELL
  end
end

3개의 VM이 모두 나타납니다. 호스트에서 각 게스트로 SSH를 통해 연결할 수 있습니다. 게스트에 있는 동안 다른 게스트에게 핑을 보낼 수 있습니다.

게스트에서 다른 게스트 중 한 명에게 SSH를 시도하면 메시지가 나타납니다.

The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established.
ECDSA key fingerprint is SHA256:kEdfmMkISpmDMKGGOw77zCLakujVWZYRQomCMYTWZ0E.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.33.11' (ECDSA) to the list of known hosts.
Permission denied (publickey).

이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.

답변1

나는 사용한다방랑 트리거한 머신에서 다른 머신으로 SSH를 통해 접속하려면:

Vagrant.configure("2") do |config|
  config.vm.define "master", primary: true do |master|
    # something
  end

  config.vm.define "node" do |node|
    # something else
    node.trigger.after :up do |trigger|
      trigger.run = { inline: 
        "vagrant ssh master -- cp /vagrant/.vagrant/machines/node/virtualbox/private_key ~/.ssh/id_rsa"
      }
    end
  end
end

관련 정보