hananana007なんでもブログ

日々思うことや、仕事のことなど書いていきます。

Ansibleでユーザーを追加する

Ansibleの勉強を兼ねてユーザー作成を自動化してみたいと思います。 まだAnsibleを勉強し始めたばかりなのでシンプルなplaybookしか書けませんが、とりあえず期待した動作をしたのでメモしておきます。

一般ユーザを作成するケースとsudoができる運用ユーザーを作成するケースの2つを試してみました。 最初に何も考えずにパスワードを指定すると、/etc/shadowファイルにそのまま追記されてログインすることができませんでした。Hash化したパスワードを指定する必要があるという事を知るまで結構時間がかかりました。Linuxが苦手だとAnsibleを覚えるのに時間がかかりそうです。頑張ります。

作業環境

項目 バージョン
Ansible 2.9.14
Python Python3.6.8
Ansible Server OS CentOS 8
Target OS CentOS 7

インベントリファイル(共通)

1台の仮想マシンを対象にしたいと思います。

[webserver]
web01 ansible_host=192.168.33.10 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

sudoユーザを追加する場合

追加するユーザーをwheelグループに追加したいと思います。

---
- name: Create users from import file.
  hosts: webserver
  gather_facts: false
  become: yes
  vars_files:
          - user-list.yml
  tasks:
    - name: Create users
      user:
        name: "{{ item.name }}"
        password: "{{ item.password }}"
        groups: "{{ item.groups }}"
        update_password: on_create
      with_items:
        - "{{ add_users }}"

vars_filesで指定したuser-list.yml

---
add_users:
  - { name: 'admin01', groups: 'wheel', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }
  - { name: 'admin02', groups: 'wheel', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }
  - { name: 'admin03', groups: 'wheel', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }

成功しました。admin01でSSHした後にsudoできました。wheelに追加されていることを確認。

# ansible-playbook -i inventory.ini user-add.yml

PLAY [Create users from import file.] ************************************************************************************************

TASK [Create users] ******************************************************************************************************************
changed: [web01] => (item={'name': 'admin01', 'groups': 'wheel', 'password': '$6$S8NVqsK3Nyej3iEy$rnwIOB7vC2YQw5TrmZwACWqURex6JCDxAATVmbIVd85JpUqIwRjOx6CZOTEOZNMaVlN5tiDHUDvM9uWp/9n02.'})
changed: [web01] => (item={'name': 'admin02', 'groups': 'wheel', 'password': '$6$r/3W/4BofcAA7uP2$MNuPJdiDQCgqej4TmboKql7mM/9rWpSAIP.q9MAznl.sNxtlJdrWVWRKxC9lbupzMx1k0EwM.YOYmYGqCrxK7/'})
changed: [web01] => (item={'name': 'admin03', 'groups': 'wheel', 'password': '$6$HTmLLDLP6Lx1j/LP$PZ2zG0e2e056KBMx7g/YQ9TFrwtc5KxBB26wCY5ukQjct1cCbkkMB0tyQ490okCiI/ys5fyAPtwRzm4g9gagO0'})

PLAY RECAP ***************************************************************************************************************************
web01                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

一般ユーザーを追加する場合

userモジュールのgroupsパラメータを削除して、user-list.ymlでもgroupsを削除しています。

---
- name: Create users from import file.
  hosts: webserver
  gather_facts: false
  become: yes
  vars_files:
          - user-list.yml
  tasks:
    - name: Create users
      user:
        name: "{{ item.name }}"
        password: "{{ item.password }}"
        update_password: on_create
      with_items:
        - "{{ add_users }}"

vars_filesで指定したuser-list.yml

---
add_users:
  - { name: 'user01', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }
  - { name: 'user02', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }
  - { name: 'user03', password: "{{ 'Passw0rd' | password_hash('sha512') }}" }

とりあえずこれで動きました。 パスワードをベタ書きしなくても良い方法があるようですが、まだ私には早いと思います。そのうち試してみたいと思います。