linux - 如何/在何处为 Vagrant shell 供应商提供 sudo 密码?

标签 linux shell vagrant sudo

我正在尝试构建一个将由 install.sh 提供的 Vagrant box (CentOS) shell 脚本。该脚本将做几件事,其中第一件事是在 /opt 下创建正确的目录结构。这样我的服务就可以安装在那里并做其他事情,比如在那里写日志。

所以我的 Vagrant 项目(到目前为止)包括:

my-app-vagrant/
    Vagrantfile
    install.sh

在哪里install.sh看起来像:

mkdir /opt/myapp
mkdir /opt/myapp/bin        # Where we will install binary to (later in this script)
mkdir /opt/myapp/logs       # Where the binary will write logs to

现在二进制文件不需要需要提升的权限才能运行(它是通过命令行参数配置的,将日志写入其中)。然而,我只是希望它生活在/opt之下具有上述目录结构,至少对于这台特定的机器。

问题是 /opt属于root .这意味着我需要运行这些 mkdirssudo , 为脚本提供 sudo 的密码,然后调整目录权限,以便在应用程序运行时,它有权运行并将日志写入我的预期目的地(同样是 /opt/myapp/logs )。所以我调整了 install.sh看起来像这样:

mkdir /opt/myapp
mkdir /opt/myapp/bin
mkdir /opt/myapp/logs

chmod -R 777 /opt/myapp     # Now when the app runs as a normal non-privileged user, we can run + write logs

而且我知道我可以通过 echo <rootPswd> | sudo -S sh install.sh 为脚本提供密码(其中 <rootPswd> 是正确的根密码)。

现在我正试图弄清楚如何在 Vagrant 配置 VM 时让它正常运行/工作

我的 Vagrant 文件如下所示:

Vagrant.configure(2) do |config|
    config.vm.provision "shell", path: "install.sh"

    config.vm.box = "centos7"
    config.vm.box_url = "https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box"

    config.vm.network "private_network", ip: "10.0.1.2"

    config.vm.provider "virtualbox" do |vb|
        vb.memory = "2048"
    end
end

但我坚持的是:如何将整个“echo <rootPswd> | sudo -S sh install.sh”概念扩展到 Vagrant?根据他们的文档,有一个 privileged 我可能可以使用的选项,但它设置为 true反正默认情况下。

但是他们的文档中没有任何地方解释如何/在何处提供 sudo应该使用的密码(至少从目前为止我能找到的密码来看)。

所以我问:

  • 我如何提供 sudo Vagrant VM 的 shell provisioner 安装脚本的密码?和
  • 我在哪里可以找到 sudo 的内容?即使考虑到我正在尝试使用的基本 Vagrant 盒子,密码也是如此?

最佳答案

事实证明(对于几乎所有 Vagrant boxes)vagrant 用户列在 /etc/sudoers 中,ALL= (ALL) NOPASSWD:ALL 权限,指示 Linux 永远向该用户询问“sudo 密码”。

因此,您无需为您的特权用户提供 sudo 密码。

关于linux - 如何/在何处为 Vagrant shell 供应商提供 sudo 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755522/

相关文章:

linux - 如何使用 awk 查找一行或多行中具有相同值的行并添加这些值

linux - 可以让 awk 使用 `exit 2` 退出 bash 脚本吗?

linux - 使用命令行在启动后重定向进程的 STDERR/STDOUT?

linux - 清理ubuntu服务器上的备份文件

python - 我真的需要在 Django 中使用 virtualenv 吗?

dns - 如何从主机访问Consul DNS接口(interface)?

linux - VirtualBox Ubuntu 安装错误 : upgrade BIOS or use force_addr=0zaddr

linux - 在 Tegra Tx1 上安装 CUDA 并获取 bashrc 后,它将找不到 NVCC

ubuntu - 使用单个脚本文件启动两个 mochiweb 服务器

linux - While 循环/if else 循环读取和验证 IP 地址