課題
ansibleでOSのユーザーを作成する際、Linuxであればuser
モジュール、Windowsであればwin_user
モジュールを使用する。例えば次のように書けばよい。
-name: create linux user user: name: alice uid: 1010 group: admin password: "{{ user_pass }}" - name: create windows user win_user: name: bob password: "{{ user_pass }}" groups: - Administrators - Users
ただしパスワードの取り扱いがそれぞれ異なるので注意が必要となる。user
モジュールでは平文でパスワードを指定するとエラーになるため、事前にハッシュ化しなければならない。一方win_user
モジュールではハッシュ化しているとエラーになり、平文を受け付けている。ドキュメントには次のように記載されている。
Linux/Unix/POSIX: Enter the hashed password as the value. (userモジュール)
Optionally set the user’s password to this (plain text) value. (win_userモジュール)
したがって、面倒だが上の例ではuser_pass
変数で使用する値をOSごとに区別しなければならない。
解決方法
Linuxの場合
mkpasswd
コマンドでSHA512ハッシュにエンコードするのが一般的だと思う。
# コマンド実行後、PWを入力 mkpasswd --method=sha-512
出力されたハッシュ値をコピーして変数の値とする。Linuxグループを作って処理を分けることを想定し、group_vars/Linux/user_vault.yml
ファイル等に記載すればよい。
user_password: $6$...
Windowsの場合
平文をコード内に記載するのは避けるべきだろう。AnsibleでPWを秘匿するにはAnsible Vaultを使えば良い。Linuxと同様にWindowグループを作って処理を分ける想定であればgroup_vars/Windows/user_vault.yml
に暗号化したファイルを作成する。
# 暗号化したファイルを作成 (viエディタが開く) ansible-vault craete group_vars/windows/user_vault.yml # ---------- # 記載内容 (今回は適当にhoge123!を設定) user_password: hoge123! # ----------
暗号化した内容を確認したり編集したりすることもできる。
# 確認 ansible-vault view group_vars/Windows/user_vault.yml # 編集 ansible-vault edit group_vars/Windows/user_vault.yml
まとめ
AnsibleでOSアカウントのPWを設定する際、user
モジュールは事前にハッシュ化が必要。win_user
モジュールは平文で指定が必要。