我不知道为什么,但Vagrant似乎没有从其自动生成的私钥创建公钥。所以我试图在up
命令之后创建它:
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--cpus", 1]
vb.customize ["modifyvm", :id, "--memory", 512]
end
config.trigger.after :up do |trigger|
vagrant_priv_key = ".vagrant/machines/default/virtualbox/private_key"
trigger.run = {
inline: "ssh-keygen -y -f #{vagrant_priv_key} > #{vagrant_priv_key}.pub"
}
end
end
上面运行Vagrantfile
失败:
...
default: Too many arguments.
==> default: Trigger run failed
==> default: A script exited with an unacceptable exit code 1.
经过一番调查后,我发现I / O重定向不适用于inline
shell设置,使用path
shell设置有效,但我不想为这个简单的命令创建一个文件。
Turns out run
选项执行shell子进程,我应该在bash会话中运行脚本:
config.trigger.after :up do |trigger|
vagrant_priv_key = ".vagrant/machines/default/virtualbox/private_key"
trigger.run = {
inline: "/bin/bash -c 'ssh-keygen -y -f #{vagrant_priv_key} > #{vagrant_priv_key}.pub'"
}
end