How to fix Vagrant error: `private_key_path` file must exist:
How to fix Vagrant error: `private_key_path` file must exist:
我一直在使用 PuPHPet 创建虚拟开发环境。
昨天我为一个新盒子生成了一个配置文件。当我尝试使用 vagrant up
命令启动它时,我收到以下错误消息:
C:\xx>vagrant up
Bringing machine 'default' up with 'virtualbox'
provider... There are errors in the configuration of this machine.
Please fix the following errors and try again:
SSH:
* private_key_path
file must exist: P://.vagrant.d/insecure_private_key
我遇到了这个 question 并将 insecure_private_key 从 puphpet\files\dot\ssh 移动到与 Vagrantfile 所在的目录相同的目录。然而,这给出了同样的错误。
我也对错误消息中给出的目录感到困惑;
P://.vagrant.d/insecure_private_key
为什么提到 'P' 驱动器?
可以找到我的 Vagrantfile here。
感谢有关解决此错误的任何建议。
我不确定你的 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 访问权限,它就会生成另一个密钥来替换它。
我们更换它的原因是因为 Windows 没有所需的工具,这个新的 Vagrant 功能只适用于 OSX/Linux 主机。
我的方法适用于所有 OS,因为它在 VM 本身内生成 SSH 密钥。
所有这些都与您的问题半相关,但答案是如果未定义这些环境变量,则您的 Vagrant 安装有问题。
看起来是因为您可能执行了 vagrant destroy 删除了 insecure_private_key
。
但是 vagrant 文件会查找 puphpet\files\dot\ssh files
,如果它们在那里,它会查找 insecure_private_key。
delete (rename)
id_rsa
个文件在 puphpet\files\dot\ssh
这帮我修好了!
我通过硬编码 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"
]
您也可以只删除 puphpet 文件夹 rm -rf puphpet/files/dot/ssh/*
中的所有文件,当您 运行 vagrant provision 时 vm 应该会重新生成它们。
当您与队友分享您的 puphet 配置时,根据已接受的答案,硬编码 private_key_path 是不可取的。
我的主机是 windows,所以我添加了一个新的环境变量 VAGRANT_HOME,其值为 %USERPROFILE%,因为这是我的 /.vagrant.d 文件夹所在的位置。添加此变量时,只需确保关闭打开的命令提示符,以便应用该变量
希望对您有所帮助
添加 PunctuationMark 的答案,您还可以在 Vagrantfile 中设置 VAGRANT_HOME 环境变量:ENV['VAGRANT_HOME'] = ENV['USERPROFILE']
在 Vagrantfile 中编辑以下行对我有用。
PRIVATE_KEY_SOURCE = '~/.vagrant.d/insecure_private_key'
我一直在使用 PuPHPet 创建虚拟开发环境。
昨天我为一个新盒子生成了一个配置文件。当我尝试使用 vagrant up
命令启动它时,我收到以下错误消息:
C:\xx>vagrant up
Bringing machine 'default' up with 'virtualbox' provider... There are errors in the configuration of this machine. Please fix the following errors and try again:
SSH: *
private_key_path
file must exist: P://.vagrant.d/insecure_private_key
我遇到了这个 question 并将 insecure_private_key 从 puphpet\files\dot\ssh 移动到与 Vagrantfile 所在的目录相同的目录。然而,这给出了同样的错误。
我也对错误消息中给出的目录感到困惑;
P://.vagrant.d/insecure_private_key
为什么提到 'P' 驱动器?
可以找到我的 Vagrantfile here。
感谢有关解决此错误的任何建议。
我不确定你的 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 访问权限,它就会生成另一个密钥来替换它。
我们更换它的原因是因为 Windows 没有所需的工具,这个新的 Vagrant 功能只适用于 OSX/Linux 主机。
我的方法适用于所有 OS,因为它在 VM 本身内生成 SSH 密钥。
所有这些都与您的问题半相关,但答案是如果未定义这些环境变量,则您的 Vagrant 安装有问题。
看起来是因为您可能执行了 vagrant destroy 删除了 insecure_private_key
。
但是 vagrant 文件会查找 puphpet\files\dot\ssh files
,如果它们在那里,它会查找 insecure_private_key。
delete (rename)
id_rsa
个文件在 puphpet\files\dot\ssh
这帮我修好了!
我通过硬编码 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"
]
您也可以只删除 puphpet 文件夹 rm -rf puphpet/files/dot/ssh/*
中的所有文件,当您 运行 vagrant provision 时 vm 应该会重新生成它们。
当您与队友分享您的 puphet 配置时,根据已接受的答案,硬编码 private_key_path 是不可取的。
我的主机是 windows,所以我添加了一个新的环境变量 VAGRANT_HOME,其值为 %USERPROFILE%,因为这是我的 /.vagrant.d 文件夹所在的位置。添加此变量时,只需确保关闭打开的命令提示符,以便应用该变量
希望对您有所帮助
添加 PunctuationMark 的答案,您还可以在 Vagrantfile 中设置 VAGRANT_HOME 环境变量:ENV['VAGRANT_HOME'] = ENV['USERPROFILE']
在 Vagrantfile 中编辑以下行对我有用。
PRIVATE_KEY_SOURCE = '~/.vagrant.d/insecure_private_key'