Ansible更新sshd配置文件

时间:2018-06-01 08:13:09

标签: unix ssh ansible

我正在编写一个Ansible游戏,以便在100多台Unix服务器中自动创建新用户。我在创建用户并分配密码的地方找到了正确的部分。但是我们的组织强化策略要求,无论何时添加新用户,都必须在" AllowUsers" sshd_config文件的参数。我是Ansible的新手,并不知道如何完成这项工作。

这里"允许用户" sshd_config文件的一部分。

AllowUsers root user1 user2 user2

添加新用户" testuser"

之后应该如何
AllowUsers root user1 user2 testuser

2 个答案:

答案 0 :(得分:1)

我搜索了如果用户已经在列表中就不会做任何事情的解决方案。这就是它在Ansible中的工作方式。我的解决方案首先会搜索用户,只有在用户不在列表中时,它才会被添加。

tasks:
- name: Check if bamboo user already is in SSHD AllowUsers list
  command: grep -P '^[ \t]*AllowUsers[ \t]+([-\w ]+[ \t]+)*bamboo([ \t]+.+)*$' /etc/ssh/sshd_config
  register: allow_users_exists
  changed_when: no
  ignore_errors: yes

- name: Allow bamboo user SSH login
  lineinfile:
    regexp: ^[ \t]*AllowUsers([ \t]+.*)$
    line: AllowUsers bamboo\1
    dest: /etc/ssh/sshd_config
    backrefs: yes
    validate: sshd -t -f %s
  when: allow_users_exists.rc != 0
  notify:
    - reload sshd

handlers:
- name: reload sshd
  service:
    name: sshd
    state: reloaded

在这种特殊情况下,我正在搜索静态用户“ bamboo”。您可以改用这样的变量:

command: grep -P '^[ \t]*AllowUsers[ \t]+([-\w ]+[ \t]+)*{{ username | regex_escape() }}([ \t]+.+)*$' /etc/ssh/sshd_config

line: AllowUsers {{ username }}\1

结果

在:

AllowUsers ubuntu #sdfd

出局:

AllowUsers bamboo ubuntu #sdfd

在:

AllowUsers ubuntu

出局:

AllowUsers bamboo ubuntu

在:

AllowUsers ubuntu bamboo

出局:

AllowUsers ubuntu bamboo

答案 1 :(得分:0)

与lineinfile模块匹配行的regexp说“^ AllowUsers。+”并用新用户名构造行。一些示例

- command: grep "^AllowUsers " /etc/ssh/sshd_config
  register: old_user_list
- lineinfile:
     regexp: "^AllowUsers .+"
     line: "{{ old_user_list.stdout }} {{new-user-name}}"
  when: old_user_list.rc == 0