如何在一个任务中链接两个Ansible模块

时间:2014-08-31 04:52:42

标签: ansible

我需要在Ansible中实现一些我无法从哪里开始的东西。

我需要

  1. 非root用户身份登录 remote_user :jane)
  2. 登录后将用户切换为root(此用户无法从SSH登录)
  3. 然后从 root 切换到其他用户( nginx_user )以避免密码
  4. 使用Ansible
  5. 中的命令模块执行自定义命令

    我有step2和step3的原因是因为如果我从 jane 切换到 nginx_user ,系统会要求输入密码。如果我从root切换,则不需要密码输入。另一个事实是 nginx_user 没有密码,如果您只是在系统要求输入密码时按Enter键,则无法进行身份验证。

    我开始这样的事情,假设 remote_user 设置为 jane

    - name: Task name
      sudo_user: root
      sudo: yes
      # Need to switch to **nginx_user** before executing this command below
      command: cp /var/www/a /var/www/b   
    

    问题是,在帐户切换到root后,我需要将用户更改为 nginx_user 才能执行命令,有没有办法在Ansible中执行此操作?

    更新

    命令模块只是一个例子,我可能需要在我的情况下使用其他模块,但它需要你先切换到 nginx_user ,所以我无法攻击bash命令。

1 个答案:

答案 0 :(得分:0)

这项任务的通常方法如下:

您的远程用户(我建议仅为ansible任务提供额外用户)应该有无密码的sudo:

jane ALL=NOPASSWD: ALL

使用sudo_user:nginx_user保持您的任务不变。

- name: Task name
  sudo_user: nginx_user
  sudo: yes
  command: cp /var/www/a /var/www/b   

在这种情况下,Ansible会执行类似sudo su nginx_user的操作,并且由于您的远程用户具有无密码的sudo,因此无需密码。