无法在多机器vagrant环境中进行ssh连接

48次阅读
没有评论

问题描述

创建了一个包含三个节点的多机器vagrant环境,并且在一个vagrant虚拟机中无法ssh到另一个虚拟机。用户可以在任意两个虚拟机之间进行ping通,但无法进行ssh连接。典型的错误信息是(从node1到master):

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

SSH服务正在运行且端口是开放的。防火墙也没有运行。用户确定这与ssh密钥有关,但他不确定自己做错了什么。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1,以下是一个解决这个问题的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

在上面的示例中,我们定义了三个虚拟机,分别是master、node1和node2。每个虚拟机都有一个私有网络,并分配了一个主机名。你可以根据自己的需求修改这些配置。

方案2

根据回答2,你可以使用vagrant ssh命令来连接到虚拟机。如果只有一个虚拟机,可以使用vagrant ssh命令。如果有多个虚拟机,可以使用vagrant ssh <虚拟机名称>命令,例如vagrant ssh node1

如果你想在虚拟机之间进行ssh连接,你可以创建一个ssh密钥,并将私钥分发到每个虚拟机,并将公钥添加到authorized_keys文件中。你可以使用Vagrant的文件传输功能来实现这一点。以下是一个示例:

Vagrant.configure("2") do |config|
  # 其他配置...

  config.vm.provision "file", source: "~/.ssh/id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
  config.vm.provision "shell", inline: "chmod 600 /home/vagrant/.ssh/id_rsa"
  config.vm.provision "shell", inline: "chown vagrant:vagrant /home/vagrant/.ssh/id_rsa"
end

在上面的示例中,我们将本地的私钥文件~/.ssh/id_rsa传输到虚拟机的/home/vagrant/.ssh/id_rsa路径,并设置了正确的权限和所有者。

请注意,这只是一个示例,你需要根据自己的环境和需求进行适当的修改。

方案3

根据回答3,你可以尝试使用以下命令连接到虚拟机:

ssh -i <私钥路径> <vagrant用户名>@<虚拟机IP>

或者,如果你没有禁用基于密码的身份验证,你可以尝试以下命令:

ssh -o PreferredAuthentications=password <用户名>@<服务器IP>

请注意,你需要将上述命令中的<私钥路径><vagrant用户名><虚拟机IP><用户名><服务器IP>替换为实际的值。

希望以上解决方案能帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助你。

正文完