通过ansible创建非交互式samba用户

时间:2017-06-26 14:50:53

标签: ansible samba

虽然在shell中输入

时可以使用以下命令
echo -ne "myser\nmypass\n" | smbpasswd -a -s myuser

以下任务在ansible中失败

  - name: add dms samba user
    command: echo -ne "myuser\nmypass\n" | smbpasswd -a -s myuser
    notify: restart samba

它不会产生任何错误,但不会创建用户。

ansible 2.3.0.0

上使用Ubuntu 16.0.4.

4 个答案:

答案 0 :(得分:4)

如上所述,管道不能使用命令模块。我过去曾使用过类似的东西来创建Samba用户:

- name: Configure Samba users.
  shell: >
    (pdbedit --user={{ item.username }} 2>&1 > /dev/null)
    || (echo '{{ item.password }}'; echo '{{ item.password }}')
    | smbpasswd -s -a {{ item.username }}
  register: smbpasswd
  changed_when: "'Added user' in smbpasswd.stdout"
  with_items: "{{ samba_users }}"
  loop_control:
    label: "{{ item.username }}"

只有在用户不存在的情况下才会运行该任务。因此,更改密码不会适用于此示例。

答案 1 :(得分:0)

命令模块不支持管道传输。使用shell模块来做这样的事情。

请参阅:

答案 2 :(得分:0)

请使用Ansible Playbook尝试此方法:

- name: set Samba passwords for each user
  shell: "printf '{{ item.passwd }}\n{{ item.passwd }}\n' | smbpasswd -a {{ item.name }}"
  with_items:
  - "{{ users }}"
  tags: smbpasswd

请注意,您需要将包含users:的变量文件映射到以下格式:

users:
- name: userName
  passwd: myClearTextPassword

请注意,要支持smbpasswd,您将以明文形式传递此密码。此外,注意到这只是一个需要包含在您的剧本中的任务。

答案 3 :(得分:0)

另一个使用字典列表的变体:

ad_users: [
             { username: john.doe, password: P4ssw0rd*, givenname: John, surname: Doe, mail: john.doe@domain, ou: "OU=Department,OU=Division" },
             { username: jane.doe, password: P455w0rd*, givenname: Jane, surname: Doe, mail: jane.doe@domain, ou: "OU=Department,OU=Division" },
             ]


- name: Add user to AD
  command: samba-tool user create {{ item.username }} {{ item.password }} --given-name='{{ item.givenname }}' --surname='{{ item.surname }}' --mail-address={{ item.mail }} --userou='{{ item.ou }}'
  loop: "{{ ad_users }}"

请记住保管敏感数据。