我创建了一个三节点多机无业游民的环境,并且遇到了从一个无业游民的虚拟机切换到另一个无人值守的虚拟机的问题。

这是Vagrantfile:

 Vagrant.configure("2") do |config| 
  config.vm.box = "centos/7"

  config.vm.define "master" do |master|
    master.vm.hostname = "master.local" 
    master.vm.network "private_network", type: "dhcp"
  end 

  config.vm.define "node1" do |node1|
     node1.vm.hostname = "node1.local" 
     node1.vm.network "private_network", type: "dhcp" 
  end 

  config.vm.define "node2" do |node2|
    node2.vm.hostname = "node2.local" 
    node2.vm.network "private_network", type: "dhcp" 
  end  
end 
 


主机文件(在每个节点上相同):

 $ cat /etc/hosts
172.28.128.3    master.local    master
172.28.128.4    node1.local     node1
172.28.128.5    node2.local     node2
 


我可以整天来回ping任何机器到另一个,但我不能从一个无所事事的vm切换到另一个。典型的错误消息是(从node1到master):

 [vagrant@node1.local] $ ssh vagrant@172.28.128.3
Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 
 


SSH正在运行,并且端口是开放的。

防火墙未运行。

我确定这与ssh键有关。我承认我不是专家。
我在这里做错什么呢?

评论

更新。是的,在一个无所事事的环境中,从一个虚拟机迁移到另一个虚拟机。从哪个虚拟机迁移到另一个虚拟机都没有关系,这是不正确的。

您需要在计算机中使用流浪者的私钥,不记得它在流浪者主机中的存储位置,但是流浪者用户配置为仅允许基于密钥的访问。 (显然,建议不要在测试中使用默认密钥)

@Tensibai一个人也可以不用ssh vagrant @ host键登录,也可以使用vagrant作为密码。

请在问题中添加所有框的ip a的输出,并检查当框关闭时IP地址(172.28.128.3-5)是否可用。

@ 030根据问题中的消息,与Ubuntu相比,centos框没有设置无用的密码,仅允许密钥验证

#1 楼

跟随流浪者文件解决了这个问题。

您可以在https://github.com/malyabee/IaaC/tree/master/ansible_lab

$commonscript = <<-SCRIPT
sudo yum update -y
sudo yum install python2 epel-release -y
sudo yum install -y ansible
sudo echo "192.168.22.10    ansiblecontroller.example.com ansiblecontroller" >> /etc/hosts
sudo echo "192.168.22.11   node01.example.com   node01" >> /etc/hosts
sudo echo "192.168.22.12   node02.example.com      node02" >> /etc/hosts
SCRIPT

$nodescript = <<-SCRIPT
cat /vagrant/ansible_lab.pub >> /home/vagrant/.ssh/authorized_keys
SCRIPT

$ansiblescript = <<-SCRIPT
sudo yum install ansible -y
sudo cp -r /vagrant/ansible_lab /home/vagrant/.ssh/id_rsa
sudo chmod 400  /home/vagrant/.ssh/id_rsa
sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "ansiblecontroller" do |ansiblecontroller|
    ansiblecontroller.vm.box = "centos/7"
    ansiblecontroller.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    ansiblecontroller.vm.network "private_network", ip: "192.168.22.10", virtualbox__intnet: "mynetwork01"
    ansiblecontroller.vm.hostname = "ansiblecontroller.example.com"
    # Installing required packages for ansible controller node
    ansiblecontroller.vm.provision "shell", inline: $commonscript
    ansiblecontroller.vm.provision "shell", inline: $ansiblescript
  end

  config.vm.define "node01" do |node01|
    node01.vm.box = "centos/7"
    node01.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node01.vm.network "private_network", ip: "192.168.22.11", virtualbox__intnet: "mynetwork01"
    node01.vm.hostname = "node01.example.com"
    # Installing required packages for  node01
    node01.vm.provision "shell", inline: $commonscript
    node01.vm.provision "shell", inline: $nodescript
  end
  config.vm.define "node02" do |node02|
    node02.vm.box = "centos/7"
    node02.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node02.vm.network "private_network", ip: "192.168.22.12", virtualbox__intnet: "mynetwork01"
    node02.vm.hostname = "node02.example.com"
    # Installing required packages for  node01
    node02.vm.provision "shell", inline: $commonscript
    node02.vm.provision "shell", inline: $nodescript
  end
end


评论


这是一个功能齐全的答案,谢谢!

– moztemur
19年7月24日在5:12

将代码存储库移至github.com/malyabee/vagrant_ansible_lab

– MalyaBee
19-09-20在8:55

#2 楼

根据文档,应使用:

vagrant ssh [name|id]


如果有单个节点,请使用vagrant ssh,如果是多节点,请定义VM的名称或ID,例如vagrant ssh box1

如果要在各个框之间进行ssh交换,则可以创建一个ssh密钥并将私钥提供给每个框,然后将公钥添加到authorized_keys文件中。

https ://www.vagrantup.com/docs/provisioning/file.html


Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end



评论


您将如何在框中使用无业游民的ssh名称?问题是关于通过ssh从node1.local到master.local的连接,这两个机器都是由无业游民推动的。

–滕西拜
17-10-3在15:55

这已经是您在下面删除的答案下所说的内容...

–滕西拜
17-10-3在15:55

我将更新答案

– 030
17-10-3在16:19



#3 楼

试试这个链接。您需要执行以下任一操作:


ssh -i <pathto/private_key> <vagrant>@<ip>

ssh -o PreferredAuthentications=password user@server-ip(如果您尚未禁用基于密码的身份验证)