无法在多机器无所事事的环境中使用ssh


9

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

这是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,但是我不能从一个无所事事的虚拟机切换到另一台。典型的错误消息是(从node1到master):

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

SSH正在运行,并且端口已打开。

防火墙未运行。

我敢肯定这与ssh键有关。我欣然承认我不是专家。
我在这里做错什么了?


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

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

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

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

1
@ 030根据问题中的消息,与Ubuntu相比,centos盒不设置
无用的

Answers:


3

以下Vagrant文​​件解决了此问题。

您可以在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


2

根据文档,应该使用:

vagrant ssh [name|id]

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

如果要在各个框之间切换,则可以创建一个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

您将如何vagrant ssh name在盒子内使用?问题是关于通过ssh从node1.local到master.local的连接,这两个机器都是由流浪汉启动的。
Tensibai '17

这已经是您在下面删除的答案下所说的内容了
Tensibai '17

我将更新答案
030

0

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

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (如果您尚未禁用基于密码的身份验证)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.