vagrant - Vagrant 是否创建/etc/sudoers.d/vagrant 文件,还是需要手动添加才能使用ansible sudo_user?

标签 vagrant ansible

一些 ubuntu 云镜像,例如这个: http://cloud-images.ubuntu.com/vagrant/precise/20140120/precise-server-cloudimg-amd64-vagrant-disk1.box

有文件/etc/sudoers.d/vagrant,内容为 vagrant ALL=(ALL) NOPASSWD:ALL

其他盒子,比如这个 https://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-13.10_chef-provisionerless.box

没有它,因此使用 sudo_user 的 ansible 命令不起作用。

我可以添加文件:

- name: ensure Vagrant is a sudoer
  copy: content="vagrant ALL=(ALL) NOPASSWD:ALL" dest=/etc/sudoers.d/vagrant owner=root group=root
  sudo: yes

我想知道 Vagrant 是否应该做一些事情,因为这个任务 在真实(非 Vagrant )机器上运行 ansible playbook 时不适用。

最佳答案

Vagrant 需要对虚拟机进行特权访问,可以使用 config.ssh.username = "root",或更常见的是通过 sudo 。 Bento Ubuntu 盒子目前configure它直接到/etc/sudoers。

我不知道 ansible 的 sudo_user 的作用或含义,但我猜你的配置覆盖了/etc/sudoers。在这种情况下,您确实需要确保不会丢失 Vagrant 对虚拟机的 sudo 访问权限。或者使用 sudoers.d 构建您自己的基础框。

顺便说一句,如果您创建/etc/sudoers.d/文件,您还应该将其模式设置为 0440 或至少某些较旧的 sudo 版本拒绝应用它。

关于vagrant - Vagrant 是否创建/etc/sudoers.d/vagrant 文件,还是需要手动添加才能使用ansible sudo_user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415160/

相关文章:

docker - 从Docker容器中访问 Vagrant 的虚拟机

将变量传递给嵌套剧本的 Ansible 最佳实践?

linux - Ansible 文件模块错误 - chown 失败 : failed to look up user

ssh - "Could not resolve hostname"Ansible

ansible - 将变量从就地渲染的 jinja2 模板包含到剧本中,无需中间文件

ruby - 通过vagrant设置虚拟机IP

vagrant - 使用 Vagrant Docker 提供程序从 boot2docker 转发端口

php - Vagrant+Ubuntu 14.04+Nginx+HHVM = 缓慢+崩溃

vagrant - 如何设置vagrant环境变量VAGRANT_DEFAULT_PROVIDER?

global-variables - 如何在任务中获取当前角色名称