如何在vagrant base(baseline)框中包含和引用自定义ssh密钥? (的virtualbox)

时间:2014-08-17 13:04:41

标签: ssh vagrant virtualbox vagrantfile

在vagrant文​​档中,我没有找到关于如何在使用“vagrant package”时从同一基线框中包含的Vagrantfile引用包含文件的提示。有人可以帮忙吗?

详细信息:

从零开始为vagrant创建新的基线框时,您可以自由使用标准的vagrant不安全ssh密钥或创建自定义新密钥。我做了最后一件事。当我使用我的Vagrantfile和另外一行时,这个新的基线框可以正常使用我的自定义键:

config.ssh.private_key_path = "custom_key_file"

现在我决定将我的基线框分发给我的团队成员。那没问题。只需输入:

vagrant package --output custom.box

所有其他团队成员都会将“custom_key_file”复制到项目根目录,并使用此内容创建“Vagrantfile”(使用版本控制系统完成):

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "custombox"
    config.ssh.private_key_path = "custom_key_file"
end

完成后,每个团队成员都会输入以下内容,以便快速轻松地获取基于custom.box的虚拟机:

vagrant box add custombox custom.box
vagrant up

工作正常。

现在我想在分发之前稍微调整我的基线框。我想要包含“custom_key_file”和“Vagrantfile.pkg”,内容如下:

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

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "custombox"
    config.ssh.private_key_path = "custom_key_file"
end

要创建调整的基线框,请输入:

vagrant package --output custom2v.box --vagrantfile Vagrantfile.pkg --include custom_key_file

当我提取custom2v.box时,我可以看到有这棵树:

C:.
│   box-disk1.vmdk
│   box.ovf
│   Vagrantfile
│
└───include
        custom_key_file
        _Vagrantfile

“include / _Vagrantfile”包含我的Vagrantfile.pkg的内容。我可以按如下方式添加该框:

vagrant box add custombox2v custom2v.box

到一个新项目,现在很容易为流浪者启用它。只需添加“Vagrantfile”,如下所示:

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "custombox2v"
end

但是当我做的时候:

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: custom_key_file

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

原因是Vagrant的load order and merging of its configs.

您想要发生的是Vagrant使用位于邮箱存档内的私钥。

运行" up"是Vagrant将你的配置与其他几个配置合并在它的" load&合并"路径。

所以在最后你有一个大配置的方式:

config.ssh.private_key_path = "custom_key_file"

所以Vagrant会在与您的Vagrant文​​件相同的文件夹中查找custom_key_file,这就是您收到错误的原因。

检查this answerthis issue,了解如何配置Vagrant以相对于框的Vagrantfile查找密钥。