VirtualBox 6.0.8、Vagrant 2.2.4 在 SSH 身份验证方法:私钥上挂起

VirtualBox 6.0.8, Vagrant 2.2.4 Hangs on SSH auth method: private key

我是 Vagrant 的新手。我正在尝试获得合适的开发环境以创建一个 symfony 项目,但出于某种原因,我似乎无法正常工作。无论我制造什么机器,我总是卡在 "SSH auth method: private key" 行。

这两天我看了很多书,这个问题似乎是由于各种原因而发生的。我在 satck overflow 上尝试了所有方法,但似乎无法确定导致我的设置失败的原因。

我的笔记本电脑上有 windows 10。我有 VirtualBox 6.0.8 和 Vagrant 2.2.4。

我尝试了 4 个不同的盒子,包括一个我使用 Chef 构建的盒子和一个更通用的盒子,应该可以正常工作 (hashicorp/precise64)

所以我确信问题出在 vagrantfile 中的其他地方。

我的 BIOS 中启用了虚拟化...检查了两次。

我尝试使用 git 控制台、具有和不具有管理员权限的 windows cmd 以及 powershell(以防万一)并得到相同的结果。

ssh-config 表示如下:

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile "C:/Users/Utilisateur 1/.vagrant.d/insecure_private_key"
  IdentitiesOnly yes
  LogLevel FATAL

我在配置部分的 VirtualBox gui 内部进行了检查,电缆盒被选中,端口似乎被转发 2200 到访客 22 或转发 2222 到访客 22,具体取决于我正在尝试的盒子。远方总是匹配 ssh-config

还尝试在 vagrant 文件中添加 cableconnected1,即使在 gui 配置中选中了该框...

config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end

我检查了 insecure_private_key 是否存在于正确的位置并且确实存在 C:/Users/Utilisateur 1/.vagrant.d/insecure_private_key

我尝试使用密码验证而不是 ssh 密钥,但它也冻结了,所以我将其转回使用 ssk 密钥。

我也尝试删除 .ssh 文件夹中的 knowhost 文件,但它什么也没做

每次我尝试我用过的新东西 vagrant destroy 然后 vagrant up --provision

我尝试在盒子停止时通过 SSH 进入盒子 ssh vagrant@127.0.0.1 -p 2200 -i ~/.vagrant.d/insecure_private_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o IdentitiesOnly=yes 但这给了我 ssh_exchange_identification:阅读:连接由对等方重置

从 VB gui 启动 VM 时出现黑屏并停在同一个地方

我卸载了 VirtualBox 和 Vagrant 两次,销毁并重新加载超过 15 次,但无论我使用什么盒子,仍然出现相同的错误。

那么,我尝试了以下方框 hashicorp/precise64 bento/ubuntu-18.04 Homestead 还有 1 个我删除了,不记得名字了 所有这些 baxes 都声称可以工作。

我尝试在 vagrantfile 中添加 port_forward 因为这似乎帮助其他成员解决了同样的问题但我最终得到了 2 个端口转发并且仍然停滞在同一个地方......

这是我的 bento/ubuntu-18.04 VM 上的日志 vagrant up --debug &> vagrant.log https://transferxl.com/08vvkdTr6YJ5B2

我尝试将 vagrant 文件简化到最低限度,但这没有帮助

目前我的 vagrant 文件如下所示:

Vagrant.configure("2") do |config|
    #berkshelf
    config.berkshelf.enabled = true

    #box
    config.vm.box = 'bento/ubuntu-18.04'
    config.vm.network :private_network, ip: '192.168.33.200'

    #network
    config.vm.network :forwarded_port, guest: 80, host: 8080

    #chef
    chef_repo_path = './chef'

    config.vm.provision :chef_solo do |chef|
        chef.cookbooks_path = 'chef/cookbooks'
        chef.data_bags_path = 'chef/data_bags'
        chef.environments_path = 'chef/environments'
        chef.roles_path = 'chef/roles'

        chef.environment = 'vagrant'
        chef.run_list = [
            'role[webserver]'
        ]
    end

end

-- 编辑

正如 Strom 在下面的评论中所说,如果我的 windows 用户名中的 space 是问题,我在 vagrant

中添加了以下内容
config.ssh.private_key_path = ["C:/Users/Utilisateur\ 1/.vagrant.d/insecure_private_key"]
config.ssh.insert_key = true

但那又回来了

vagrant destroy
==> default: Loading Berkshelf datafile...
==> default: Sharing cookbooks with VM
==> default: Running cleanup tasks for 'berkshelf'...
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
There are errors in the configuration of this machine. Please fix
the following errors and try again:

SSH:
* `private_key_path` file must exist: C:/Users/Utilisateur\ 1/.vagrant.d/insecure_private_key

所以我把它改成了

config.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key"]
config.ssh.insert_key = true

但是并没有解决我原来的问题

经过将近 4 天的时间,我终于开始工作了...我的硬盘坏了所以我不得不更换它并重新安装 windows 和我所有的东西。我做的第一件事就是再次尝试 vagrant 和 virtualbox。第一次尝试就成功了。我怀疑有什么问题 VirtualBox 和网络(指我的物理接口)。不幸的是,这就是我所能说的,因为我从来没有深入了解这个问题。如果像我一样,您尝试了所有方法但仍然遇到与我相同的问题,那么您应该检查一下您的网络。我不会告诉你重新安装 windows ... 那太疯狂了 ... 但是某个地方的东西坏了,现在一切都按预期工作。奇怪但真实!

我对 Vagrant (Homestead) 的解决方案总结挂在“SSH 身份验证方法:私钥”:

  1. vagrant box update(对我来说,到 v2.2.5)
  2. vagrant box add laravel/homestead(对我来说,升级宅基地到8.0.1)
  3. VirtualBox GUI:停止 Vagrant 机器,然后 "Remove" 它及其所有文件。
  4. vagrant up --provision

更长的解释

在没有进行任何已知系统更改的情况下,我的 Vagrant / Homestead 机器上的 SSH 突然停止工作。一整天尝试了很多东西。 vagrant up 将在 SSH auth method: private key 冻结而不会出现更多错误。

我不能vagrant destroy因为脚本需要SSH,错误:Trigger run failed An error occurred in the underlying SSH library that Vagrant uses 所以我不得不停止然后将其从 virtualbox GUI 中删除。

在上述步骤 1-4 之后,vagrant up 引导消息给出了这些更有见地的行:

laravel: Warning: Connection aborted. Retrying...
laravel:
laravel: Vagrant insecure key detected. Vagrant will automatically replace
laravel: this with a newly generated keypair for better security.
laravel:
laravel: Inserting generated public key within guest...
laravel: Removing insecure key from the guest if it's present...
laravel: Key inserted! Disconnecting and reconnecting using new SSH key...

==> laravel:机器已启动并准备就绪!

虽然作为我最初故障排除的一部分,我重新生成了密钥,但它们可能存在问题,新版本的 Vagrant(具有更新的 net-ssh)可能已经检测到并修复了。

Windows10

中的 Vagrant 和 Windows 管理程序平台功能似乎存在不兼容问题

我遇到了这个问题,这就是我让 Vagrant 和 WSL2 并肩工作的方式

我有以下环境:

  • BIOS 中启用了硬件虚拟化

  • Windows 10(发布预览频道的内幕计划)

    -- Windows 10 与 WSL 2 版本 10.0.19041 构建 19041

  • VirtualBox 6.1.12

    -- 已安装扩展包

  • Vagrant 2.2.9

这些是对我有用的设置:

  • Windows 管理程序平台:关闭
  • 虚拟机平台:开启
  • Windows Linux 的子系统:开

我这边的类似问题已通过禁用几个 Windows 功能(见图)得到解决。

TLDR:我为 Windows 安装了 Docker,它导致虚拟化和 VT-x 技术出现问题。

我禁用了:

  • 容器
  • Hyper-V
  • 虚拟机平台
  • Windows 管理程序平台
  • Windows Linux
  • 的子系统

删除这些后,我发现 Intel Processor Identification UtilityCPU-Z 都再次将我的 CPU 识别为 VT-xVT-x Extended Page Tables

我知道我的解决方案是核方法,但我还没有缩小我可以安全 re-enable 而不破坏 vagrantVirtualBox 的功能...只是给一个 heads-up :)