首页 > 解决方案 > Vagrant 设置 ssh 主机名以匹配私有 IP 失败

问题描述

我正在尝试通过单个 Vagrantfile 调出 2 个 Vagrant VM。当我尝试将 ssh 主机名与该 VM 的私有 IP 匹配时,我收到以下错误:

Progress: 90%
==> controller: Matching MAC address for NAT networking...
==> controller: Checking if box 'fedora/32-cloud-base' version '32.20200422.0' is up to date...
==> controller: Setting the name of the VM: pki_controller_1597975375714_9403
==> controller: Clearing any previously set network interfaces...
==> controller: Preparing network interfaces based on configuration...
    controller: Adapter 1: nat
    controller: Adapter 2: hostonly
==> controller: Forwarding ports...
    controller: 22 (guest) => 2222 (host) (adapter 1)
==> controller: Running 'pre-boot' VM customizations...
==> controller: Booting VM...
==> controller: Waiting for machine to boot. This may take a few minutes...
    controller: SSH address: 192.168.33.10:22
    controller: SSH username: root
    controller: SSH auth method: private key
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...
    controller: Warning: Host appears down. Retrying...

虽然它一直在重试,但我尝试 ping192.168.33.10并收到以下响应:

$ ping 192.168.33.10
PING 192.168.33.10 (192.168.33.10) 56(84) bytes of data.
From 192.168.33.1 icmp_seq=1 Destination Host Unreachable   #   <-- NOTE THIS!
From 192.168.33.1 icmp_seq=2 Destination Host Unreachable
From 192.168.33.1 icmp_seq=3 Destination Host Unreachable

$ ifconfig
vboxnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.1  netmask 255.255.255.0  broadcast 192.168.33.255
        inet6 fe80::800:27ff:fe00:1  prefixlen 64  scopeid 0x20<link>
        ether 0a:00:27:00:00:01  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1094  bytes 78483 (76.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ traceroute 192.168.33.10
traceroute to 192.168.33.10 (192.168.33.10), 30 hops max, 60 byte packets
 1  localhost.localdomain (192.168.33.1)  1010.646 ms !H  1010.583 ms !H  1010.538 ms !H

以下是我的内容Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.ssh.username = "root"
  config.vm.box = "fedora/32-cloud-base"
  config.vm.synced_folder "./", "/vagrant"
  config.ssh.port = 22                       # ENABLE ONLY IF ssh.host is specified  

  config.vm.provider :virtualbox do |domain, override|
    # Defaults for masters and clone
    # WARNING: Do not overcommit CPUs, it causes issues during
    # provisioning, when RPMs are installed
    domain.cpus = 1
    domain.memory = 2750

  end

  config.vm.define "controller" , primary: true do |controller|
    config.vm.provider :virtualbox do |domain, override|
      # Less resources needed for controller
      domain.memory = 950
    end
    controller.vm.provision "shell", inline: "pip3 install pyyaml && pip3 install -r /vagrant/path/to/requirements.txt"
    controller.vm.provision :ansible do |ansible|
      # Disable default limit to connect to all the machines
      ansible.limit = "all"
      ansible.playbook = "path/to/playbook.yml"
      ansible.groups = {
        "localhost" => ["controller"],
        "master" => ["master"]
      }
    end

    controller.vm.network :private_network, ip: "192.168.33.10"
    controller.ssh.host = "192.168.33.10"                       # DOES NOT WORK
  end


  config.vm.define "master"  do |master|
    master.vm.network :private_network, ip: "192.168.33.20"
    master.ssh.host = "192.168.33.20"                # DOES NOT WORK
  end

end

如果我评论*.ssh.host并尝试ssh root@<ip> -i <path to private key>,它会起作用。我确信我犯了一个非常小的错误。但是,我无法确定它。

标签: sshvagrant

解决方案


推荐阅读