我有一个包装器中的shell provisioner
连接到用户为vagrant
的盒子
{
"environment_vars": [
"HOME_DIR=/home/vagrant"
],
"expect_disconnect": true,
"scripts": [
"scripts/foo.sh"
],
"type": "shell"
}
其中,脚本的内容是:
whoami
sudo su
whoami
奇怪的是,输出仍然是:
==> virtualbox-ovf: Provisioning with shell script: scripts/configureProxies.sh
virtualbox-ovf: vagrant
virtualbox-ovf: vagrant
为什么不能切换到root用户?如何以root用户身份执行语句?注意,我不想引用像sudo "statement |foo"
这样的所有语句,而是像用sudo su
演示的那样全局切换用户
发布于 2018-01-31 19:06:59
您应该覆盖execute_command。示例:
"provisioners": [
{
"execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
"scripts": [
"scripts/foo.sh"
],
"type": "shell"
}
],
发布于 2018-01-31 15:59:20
sudo su <<HERE
ls /root
whoami
HERE
也许有更好的答案?
发布于 2019-11-05 16:56:11
假设您正在使用的shell配置器是一个bash脚本,您可以将我的技术添加到您的脚本中。
function if_not_root_rerun_as_root(){
install_self
if [[ "$(id -u)" -ne 0 ]]; then
run_as_root_keeping_exports "$0" "$@"
exit $?
fi
}
function run_as_root_keeping_exports(){
eval sudo $(for x in $_EXPORTS; do printf '%s=%q ' "$x" "${!x}"; done;) "$@"
}
export EXPORTS="PACKER_BUILDER_TYPE PACKER_BUILD_NAME"
if_not_root_rerun_as_root "$@"
对"$@"
here on StackOverflow有一个很好的解释。
https://stackoverflow.com/questions/48537171
复制相似问题