以特定用户身份运行Ansible任务


23

我正在尝试以与运行剧本的用户不同的用户身份运行特定的Ansible任务。我的.yml文件如下所示:

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

运行此任务向我展示了该whoami命令返回的用户与我在任务中定义的用户不同(精确地,该用户返回的hosts文件名为ubuntu)。

我也尝试定义如下任务:

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

但是然后我得到了' Missing sudo password'错误,尽管sudoers文件中有一行显示someusername ALL=(ALL) NOPASSWD:ALLsudo在远程计算机上发出命令,因为someusername并没有要求我输入密码。

因此,如何以其他用户(不是hosts文件或root他自己定义的用户)身份运行特定任务?

Answers:


19

您误解了这两个设置:

  • remote_user是Ansible设置,用于控制Ansible用于连接的SSH用户:ssh ${REMOTE_USER}@remotehost

  • someusername ALL =(ALL)NOPASSWD:ALL是sudo配置,允许用户someusername在没有密码的情况下在任何主机中执行所有命令。它不允许任何人发出命令someusername

理想情况下,您将以正确的用户身份直接登录,这remote_user就是全部。但是通常,您只能以管理用户身份(例如ubuntu)登录,而必须以另一用户sudo命令的身份(比如scrapy)。然后,您应该留给remote_user登录的用户,并在作业中添加以下ansible属性:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh

1
我懂了。非常感谢您澄清这一点!但是,如何以特定用户身份运行特定任务呢?
2015年

1
请注意,remote_user默认值是本地计算机中的当前用户-实际上就像ssh一样。
Capi Etheriel

好的,但是使用这样的设置,我仍然会收到' Missing sudo password'错误。有没有一种方法可以避免要求该特定用户输入密码?
2015年

我想我找到了答案,将行添加到sudoers:中ubuntu ALL=(someusername) NOPASSWD: ALL,但是我必须考虑其背后的安全性...除了将此行添加到sudoers中,还有其他方法吗?
2015年

1
正确的方法是让您的远程用户直接登录。
Capi Etheriel

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.