问题描述
创建了一个包含三个节点的多机器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>
替换为实际的值。
希望以上解决方案能帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助你。