【问题标题】:Accessing Vagrant VM (Vitualbox running Centos/7) from inside cluster从集群内部访问 Vagrant VM(运行 Centos/7 的虚拟机)
【发布时间】:2019-05-26 13:11:19
【问题描述】:

我目前正在尝试使用 ansible,对于该用例,我使用 VirtualBox 和 Vagrant 设置了一个由 3 个 VM 组成的集群。现在我的 VM-Setup 看起来像这样

流浪文件

$inline_m1 = <<SCRIPT
yum -y update

yum install -y git
yum install -y ansible

SCRIPT

$inline_n1_n2 = <<SCRIPT
yum -y update

yum install -y git

SCRIPT

Vagrant.configure(2) do |config|
 config.vm.define "master1" do |conf|
    # conf.vm.box = "peru/my_centos-7-x86_64"
    # conf.vm.box_version = "20181211.01"
    conf.vm.box = "centos/7"

    conf.vm.hostname = 'master1.vg'
    conf.vm.network "private_network", ip: "192.168.255.100"
    conf.vm.provider "virtualbox" do |v|
        v.memory = 6144
        v.cpus = 2
    end
    conf.vm.provision "shell", inline: $inline_m1
    conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc/hosts"
    conf.vm.provision "file", source: "./master1/etc.ansible.hosts", destination: "~/etc/ansible.hosts"
 end

 config.vm.define "node1" do |conf|
    conf.vm.box = "centos/7"
    conf.vm.hostname = 'node1.vg'
    conf.vm.network "private_network", ip: "192.168.255.101"
    conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc/hosts"
    conf.vm.provision "shell", inline: $inline_n1_n2
 end

 config.vm.define "node2" do |conf|
    conf.vm.box = "centos/7"
    conf.vm.hostname = 'node2.vg'
    conf.vm.network "private_network", ip: "192.168.255.102"
    conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc/hosts"
    conf.vm.provision "shell", inline: $inline_n1_n2

 end
end

所以它是 1 个主节点和 2 个节点。 master 应该安装了 ansible 并通过 ssh 访问节点。所以所有机器都启动并运行,我可以使用连接到我的主人

vagrant ssh master1

我也有我修改过的 etc/hosts,所以我可以访问 master1.vg、node1.vg 等。

但是有一个问题。我应该通过 ssh 从主机内部连接到节点。但是

ssh node1.vg

将无法工作,因为在要求输入密码后权限被拒绝。根据文档,默认密码应为“vagrant”,但此处并非如此。 (我猜因为访问方法已经设置为带有密钥的 ssh)。我已经搜索了很多,因为我认为这将是一个常见问题,但没有找到令人满意的答案。您知道如何通过 ssh 从 master1 vm 连接到其中一个节点 vm?

我还将配置上传到了一个 repo (https://github.com/relief-melone/vagrant-ansibletestingsetup)

【问题讨论】:

  • 只是为了澄清,如果您尝试例如ssh vagrant@127.0.0.1 -p {port your vagrant machine is on},您是否仍然收到被拒绝的权限?
  • 是的,如果我在 master 上,我会通过“ssh vagrant@127.0.0.1 -p ..”和“ssh vagrant@192.168.255.101”-p ...当我只使用“ssh 192.168.255.101”时,我会得到“无法建立身份验证 ECDSA 密钥指纹是......你确定要继续......我点击是并得到一个”权限被拒绝(公钥,gssapi -keyex.gss-with-mic)。
  • 好问题,我也很困惑。尝试连接时使用ssh -vvv 跟踪连接被拒绝的错误。
  • 我将把它放在不同的评论中,所以我现在能够从 vm 外部做的是在不使用 vagrant 的情况下进行连接。为此我做了“vagrant ssh-config node1”,我注意到[Port],[User]和[IdentityFile],之后会起作用的是“ssh -i [IdentityFile] -l [User] -p [Port] localhost”但只有使用 localhost 127.0.0.1 或 192.168.255.101 才会因连接被拒绝而失败。而且使用 localhost 我会收到无法建立主机真实性的消息,我必须确认我仍然想连接

标签: ssh login vagrant centos7


【解决方案1】:

好的,我现在解决了。现在 Vagrant 将生成您的私钥,您需要将该密钥以正确的权限放入您的主 VM。您还需要设置网络正确性。所以让我们首先解决网络点。

您的 /etc/hosts 必须进行设置。在我的设置中,它看起来像这样

/etc/hosts

192.168.255.100 master1.me.vg
192.168.255.101 node1.me.vg
192.168.255.102 node2.me.vg

您的私钥将存储在 ./.vagrant/machines/nodeX/virtualbox/private_key 中。您将需要您想要从您的主节点访问的所有节点,所以这给我们留下了以下内容

流浪文件

Vagrant.configure(2) do |config|

   config.vm.define "node1" do |conf|
      conf.vm.box = "centos/7"
      conf.vm.hostname = 'node1.me.vg'
      conf.vm.network "private_network", ip: "192.168.255.101"

      conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc.hosts"

      conf.vm.provision "shell", path: "./node/shell.sh"

   end

   config.vm.define "node2" do |conf|
      conf.vm.box = "centos/7"
      conf.vm.hostname = 'node2.me.vg'
      conf.vm.network "private_network", ip: "192.168.255.102"

      conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc.hosts"

      conf.vm.provision "shell", path: "./node/shell.sh"

   end
   config.vm.define "master1" do |conf|
      conf.vm.box = "centos/7"

      conf.vm.hostname = 'master1.me.vg'
      conf.vm.network "private_network", ip: "192.168.255.100"

      conf.vm.provider "virtualbox" do |v|
          v.memory = 6144
          v.cpus = 2
      end
      conf.vm.provision "file", source: "./etc.hosts", destination: "~/etc.hosts"
      conf.vm.provision "file", source: "./master1/etc.ansible.hosts", destination: "~/etc.ansible.hosts"
      conf.vm.provision "file", source: "./.vagrant/machines/node1/virtualbox/private_key", destination: "~/keys/node1"
      conf.vm.provision "file", source: "./.vagrant/machines/node2/virtualbox/private_key", destination: "~/keys/node2"

      conf.vm.provision "shell", path: "./master1/shell.sh"
   end

end

最后你将不得不设置私钥的权限,因为太开放的权限集将在稍后在 ssh 上被拒绝。我的 shell 文件是这样的

./master1/shell.sh

yum 

-y update

yum install -y git
yum install -y ansible

cp /home/vagrant/etc.hosts /etc/hosts
cp /home/vagrant/etc.ansible.hosts /etc/ansible/hosts

chmod 600 /home/vagrant/keys/*

./node/shell.sh

yum -y update

yum install -y git

cp /home/vagrant/etc.hosts /etc/hosts

一切都结束了

流浪

应该运行顺利,您可以使用

转到您的主虚拟机

vagrant ssh master1

您现在可以在该主服务器中连接到例如node2机器使用

ssh -i ~/keys/node2

因为这是一个包含大量文件的集合,所以我也将它放入了一个可以在这里找到的 repo 中

https://github.com/relief-melone/vagrant-ansibletestingsetup/tree/working-no-comments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2013-06-15
    • 1970-01-01
    • 2016-10-02
    • 2016-07-23
    相关资源
    最近更新 更多