首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打包程序无法以sudo身份执行shell配给程序

打包程序无法以sudo身份执行shell配给程序
EN

Stack Overflow用户
提问于 2018-01-31 15:55:48
回答 3查看 14.6K关注 0票数 11

我有一个包装器中的shell provisioner连接到用户为vagrant的盒子

代码语言:javascript
复制
{
  "environment_vars": [
    "HOME_DIR=/home/vagrant"
  ],
  "expect_disconnect": true,
  "scripts": [
    "scripts/foo.sh"
  ],
  "type": "shell"
}

其中,脚本的内容是:

代码语言:javascript
复制
whoami
sudo su
whoami

奇怪的是,输出仍然是:

代码语言:javascript
复制
==> virtualbox-ovf: Provisioning with shell script: scripts/configureProxies.sh
    virtualbox-ovf: vagrant
    virtualbox-ovf: vagrant

为什么不能切换到root用户?如何以root用户身份执行语句?注意,我不想引用像sudo "statement |foo"这样的所有语句,而是像用sudo su演示的那样全局切换用户

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-31 19:06:59

您应该覆盖execute_command。示例:

代码语言:javascript
复制
  "provisioners": [
    {
      "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
      "scripts": [
        "scripts/foo.sh"
      ],
      "type": "shell"
    }
  ],
票数 10
EN

Stack Overflow用户

发布于 2018-01-31 15:59:20

一个可能的答案似乎是:https://unix.stackexchange.com/questions/70859/why-doesnt-sudo-su-in-a-shell-script-run-the-rest-of-the-script-as-root

代码语言:javascript
复制
sudo su <<HERE
ls /root
whoami
HERE

也许有更好的答案?

票数 1
EN

Stack Overflow用户

发布于 2019-11-05 16:56:11

假设您正在使用的shell配置器是一个bash脚本,您可以将我的技术添加到您的脚本中。

代码语言:javascript
复制
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有一个很好的解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48537171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档