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