删除的 .vagrant 目录阻止我使用 SSH

Deleted .vagrant directory prevents me from SSH

我在 运行 4 个虚拟机上使用 Vagrant。我的 Vagrantfile 看起来像这样:

Vagrant.configure(2) do |config|
  config.vm.box = "bento/centos-7.2"
  config.vm.synced_folder "data", "/vagrant"

  # Master1
  config.vm.define :master1 do |m1|
    m1.vm.hostname = "master1.mycluster"
    m1.vm.network :private_network, ip: "192.168.0.12"
    m1.vm.provider :virtualbox do |vb|
      vb.memory = "8192"
    end
    m1.vm.network "forwarded_port", guest: 50070, host: 50070
  end

  # Other machines are defined in the same way
end

一切正常,直到我不小心从我的项目目录中删除了 .vagrant 文件夹。

首先,我尝试将我的虚拟机 ID 放回 .vagrant/machines/${name}/virtualbox/id。 运行 vagrant status 确实看到我的 VM 已启动并 运行ning,但我无法再通过 SSH 连接。

我寻找解决方案,但找不到,所以我决定销毁并重新启动我的 VM。遗憾的是,vagrant up(或 vagrant up --provision)命令在尝试通过 SSH 连接到 127.0.0.1:2222 时卡住了。它不应该尝试连接到 192.168.0.12:2222 吗?这是命令输出:

Bringing machine 'master1' up with 'virtualbox' provider...
==> master1: Importing base box 'bento/centos-7.2'...
==> master1: Matching MAC address for NAT networking...
==> master1: Checking if box 'bento/centos-7.2' is up to date...
==> master1: Setting the name of the VM: vagrant_master1_1493974030138_66977
==> master1: Clearing any previously set network interfaces...
==> master1: Preparing network interfaces based on configuration...
    master1: Adapter 1: nat
    master1: Adapter 2: hostonly
==> master1: Forwarding ports...
    master1: 50070 (guest) => 50070 (host) (adapter 1)
    master1: 61888 (guest) => 61888 (host) (adapter 1)
    master1: 18080 (guest) => 18080 (host) (adapter 1)
    master1: 9995 (guest) => 9959 (host) (adapter 1)
    master1: 8787 (guest) => 8787 (host) (adapter 1)
    master1: 8088 (guest) => 8088 (host) (adapter 1)
    master1: 22 (guest) => 2222 (host) (adapter 1)
==> master1: Running 'pre-boot' VM customizations...
==> master1: Booting VM...
==> master1: Waiting for machine to boot. This may take a few minutes...
    master1: SSH address: 127.0.0.1:2222
    master1: SSH username: vagrant
    master1: SSH auth method: private key
    master1: Warning: Remote connection disconnect. Retrying...
    master1: Warning: Authentication failure. Retrying...

不过,我可以通过 ssh -p 2222 vagrant@127.0.0.1 连接到我的 VM,而且 SSH 文件夹似乎没有权限问题。

[vagrant@localhost ~]$ ls -la /home/vagrant/.ssh/
total 4
drwx------. 2 vagrant root     28  1 déc.  15:56 .
drwx------. 3 vagrant vagrant  90  1 déc.  15:57 ..
-rw-------. 1 vagrant root    409  1 déc.  15:56 authorized_keys

我该怎么做才能再次使用 Vagrant 运行 虚拟机?

TL;DR: 不要修改 ~/.vagrant.d/insecure_private_key

在尝试解决第一个问题时(在 .vagrant 中放回 VM id 后无法连接到 VM),我发现 post 某处告诉我这是文件 vagrant insecure 的问题私钥,位于~/.vagrant.d/insecure_private_key.

我试图在那里放一个自定义私钥,这就是为什么后来使用 vagrant up 它不起作用的原因。

解决方案是在此处找到默认的 Vagrant 不安全私钥:https://github.com/mitchellh/vagrant/tree/master/keys,并将其放回 ~/.vagrant.d/insecure_private_key