![多個 Vagrant VM 之間的 SSH](https://rvso.com/image/1558053/%E5%A4%9A%E5%80%8B%20Vagrant%20VM%20%E4%B9%8B%E9%96%93%E7%9A%84%20SSH.png)
我正在嘗試安裝 HP Vertica 的本地 3 節點叢集。當從任一節點觸發時,Vertica 安裝使用 SSH 將資料庫伺服器軟體安裝到每個節點上。
我收到一條錯誤訊息「權限被拒絕(公鑰)」。
# -*- 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 個虛擬機器全部啟動。我可以透過 SSH 從主機連接到每個來賓。當有客人時,我可以 ping 其他客人。
如果我嘗試從一位訪客透過 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