我想使用vagrant来设置开发者机器。由于机器将与内部服务器通信,我认为它们设置的开发人员在主机上具有相同的用户名是个好主意。我在配置步骤中无法弄清楚如何处理这个问题。
我的简单Vagrantfile如下所示:
VAGRANT_COMMAND = ARGV[0]
Vagrant.configure(2) do |config|
user = ENV['USER']
config.vm.box = "ubuntu/trusty64"
config.vm.provision :shell, :path => "bootstrap.sh", :args => user
config.ssh.username = user
config.ssh.password = "heimskringla"
config.vm.synced_folder "~/src/", "/home/" + user + "/src"
config.vm.provision "file", source: "~/.gitconfig", destination: "/home/" + user + "/.gitconfig"
config.vm.provision "file", source: "~/.ssh", destination: "/home/" + user + "/.ssh"
end
bootstrap.sh从主机获取$ USER作为输入。如果Vagrant机器中不存在该用户,则会创建该用户并将其添加到/etc/sudoers.d。
如果我从一个干净的平板开始并在此上运行“Vagrant up”,它会立即开始使用$ USER,并且由于它还不存在,安装失败。
作为测试,我尝试过这样做:
if VAGRANT_COMMAND != "up"
config.ssh.username = user
config.ssh.password = "changeme"
end
然后bootstrap.sh中的配置工作。用户已创建,我的软件包已安装。但是,当它到达文件和同步文件夹配置时,由于权限问题而失败。
由于权限,无法通过SCP将文件上传到来宾VM 错误。这通常是因为SSH用户没有权限 写入目的地位置。或者,用户正在运行 主机上的Vagrant可能没有读取文件的权限。
我已经尝试在bootstrap.sh的底部做“su $ USER”,但这显然不是它的工作方式。
任何人都知道如何满足我的需求?
编辑:可能的解决方案
我决定不努力改变Vagrant,并试图使用流浪者用户。现在我有以下Vagrantfile:
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision :shell, :path => "vagrant/bootstrap.sh"
config.vm.synced_folder "~/src/", "/home/vagrant/src"
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
config.vm.provision "file", source: "~/.ssh", destination: ".ssh-from-host-machine"
config.vm.provision "file", source: "vagrant/.bash_aliases", destination: ".bash_aliases"
config.vm.provision :shell, privileged: false, :path => "vagrant/bootstrap_late.sh"
end
bootstrap.sh安装所需的软件包,bootstrap_late.sh为vagrant用户进行必要的安装。这包括添加ssh配置,使其在与服务器通信时使用$ USER。