如何在Vagrant上配置期间执行命令作为另一个用户?

时间:2016-02-25 13:28:08

标签: linux vagrant root sudo vagrant-provision

Vagrant在提供期间以root执行我的脚本。但是我想在配置期间执行一些命令作为另一个用户。 这就是我现在正在做的事情:

  su - devops -c "git clone git://github.com/sstephenson/rbenv.git .rbenv"
  su - devops -c "echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.bash_profile"
  su - devops -c "echo 'eval "$(rbenv init -)"' >> ~/.bash_profile"
  su - devops -c "git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build"
  su - devops -c "echo 'export PATH=\"$HOME/.rbenv/plugins/ruby-build/bin:$PATH\"' >> ~/.bash_profile"
  su - devops -c "source ~/.bash_profile"

但我想让这更好,就像这样:

#become devops user here

git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

# back to the root user here

这可能吗?谢谢!

2 个答案:

答案 0 :(得分:3)

运行配置时,默认情况下,vagrant将以root用户身份运行,您可以通过将该配置设置为

来更改此行为
config.vm.provision "shell", privileged: false blablabla
然后

vagrant将使用定义为config.ssh.username的用户,如果未设置,则默认使用其流浪者用户

如果您的系统上有多个用户但仍想使用其他用户,我要做的就是编写脚本并以su -l newuser -c "path to shell script"

执行脚本

答案 1 :(得分:1)

如果您希望脚本与其余内容内联,您可以使用命令序列,如下所示。

sudo -u devops /bin/sh <<\DEVOPS_BLOCK
# Become devops user here
id
whoami
# Back to the root user here
DEVOPS_BLOCK