【问题标题】:How to fix Vagrant error: `private_key_path` file must exist:如何修复 Vagrant 错误:`private_key_path` 文件必须存在:
【发布时间】:2015-06-22 18:17:19
【问题描述】:

我一直在使用PuPHPet 创建虚拟开发环境。

昨天我为一个新盒子生成了一个配置文件。当我尝试使用 vagrant up 命令启动它时,我收到以下错误消息:

C:\xx>流浪

使用“virtualbox”将机器“默认”提升 provider... 这台机器的配置有错误。 请修正以下错误,然后重试:

SSH: * private_key_path 文件必须存在:P://.vagrant.d/insecure_private_key

我遇到了这个 question 并将 insecure_private_key 从 puphpet\files\dot\ssh 移动到与 Vagrantfile 所在的目录相同的目录中。但是,这会产生相同的错误。

我也对错误消息中给出的目录感到困惑;

P://.vagrant.d/insecure_private_key

为什么提到“P”驱动器?

我的 Vagrantfile 可以在here找到。

感谢有关解决此错误的任何建议。

【问题讨论】:

  • 你能分享你的Vagrantfile吗?
  • 已更新。

标签: ssh vagrant vagrantfile puphpet vagrant-windows


【解决方案1】:

我通过硬编码到 insecure_private_key 文件的路径来替换到 insecure_private_key 的路径来解决问题。

所以它来自:

config.ssh.private_key_path = [
    customKey,
    "#{ENV['HOME']}/.vagrant.d/insecure_private_key"
]

收件人:

config.ssh.private_key_path = [
    customKey,
    "C:/Users/My.User/.vagrant.d/insecure_private_key"
]

【讨论】:

    【解决方案2】:

    看起来是因为您可能执行了 vagrant destroy 删除了 insecure_private_key

    但是 vagrant 文件查找 puphpet\files\dot\ssh files,如果它们在那里,它会查找 insecure_private_key。

    delete (rename)id_rsapuphpet\files\dot\ssh 中的文件

    这为我修好了!

    【讨论】:

    • 删除(重命名)puphpet\files\dot\ssh 中的 id_rsa 文件对我有用!
    【解决方案3】:

    您也可以删除 puphpet 文件夹 rm -rf puphpet/files/dot/ssh/* 中的所有文件,当您运行 vagrant provision 时,vm 应该重新生成它们。

    【讨论】:

      【解决方案4】:

      当您将您的 puphet 配置分享给您的队友时,根据公认的答案,不建议对 private_key_path 进行硬编码。

      我的主机是 Windows,所以我添加了一个新的环境变量 VAGRANT_HOME,其值为 %USERPROFILE%,因为这是我的 /.vagrant.d 文件夹所在的位置。添加此变量时,只需确保关闭打开的命令提示符,以便应用该变量

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        我不确定你的 Vagrant 安装有什么问题,但是这一行:

        vagrant_home = (ENV['VAGRANT_HOME'].to_s.split.join.length > 0) ? ENV['VAGRANT_HOME'] : "#{ENV['HOME']}/.vagrant.d"

        是设置稍后在这里使用的变量:

        config.ssh.private_key_path = [
          customKey,
          "#{vagrant_home}/insecure_private_key"
        ]
        

        发生这种情况的原因是,从 Vagrant 1.7 开始,它会为您拥有的每个 VM 生成一个唯一的私钥。我认为这是一个错误,如果 Vagrant 检测到它之前生成了唯一密钥,它会完全忽略用户定义的 private_key_path

        PuPHPet 在这里所做的是让 Vagrant 生成其唯一的 SSH 密钥,然后一旦 VM 启动并具有 SSH 访问权限,它就会进入并生成另一个密钥来替换它。

        我们之所以替换它是因为这个新的 Vagrant 功能仅适用于 OSX/Linux 主机,因为 Windows 没有所需的工具。

        我的方式适用于所有操作系统,因为它会在 VM 本身内生成 SSH 密钥。

        所有这些都与您的问题半相关,但答案是如果尚未定义这些环境变量,您的 Vagrant 安装就会出现问题。

        【讨论】:

        • 感谢您的信息。我确实升级了我的 Vagrant 版本,但无济于事。
        【解决方案6】:

        添加到标点符号的答案,您还可以在 Vagrantfile 中设置 VAGRANT_HOME 环境变量:ENV['VAGRANT_HOME'] = ENV['USERPROFILE']

        【讨论】:

          【解决方案7】:

          在 Vagrantfile 中编辑以下行对我有用。

          PRIVATE_KEY_SOURCE      = '~/.vagrant.d/insecure_private_key'
          

          【讨论】:

            猜你喜欢
            • 2014-09-20
            • 2019-10-21
            • 2021-12-13
            • 1970-01-01
            • 1970-01-01
            • 2013-01-31
            • 1970-01-01
            • 2016-09-30
            • 1970-01-01
            相关资源
            最近更新 更多