テックブログ

技術ネタ

Ansibleでユーザ追加

こんにちは當間です
前回はpingでAnsibleの動作確認だけで終わってしまいました
せっかくのAnsibleなので今回はユーザ追加を行ってみましょう

hostsには接続するサーバ名をblog2としておき、接続IP、ユーザ、利用するssh-key等の細かい接続設定は~/.ssh/config辺りに書いておきます
例としてhogeユーザを追加するplaybookを書きます

$ vi site.yml
##################################################
---
- hosts: target
  vars:
    - username: hoge
  tasks:
    - name: Add User
      user: name={{ username }}
##################################################

hostsで接続先グループをtargetと指定、targetには現在blog2しか記載がないのでblog2への接続になります
targetグループにblog3,blog4と追加しておけば3台同時に対象とする事もできます

さっそく実行してみましょう

$ ansible-playbook -i hosts site.yml

PLAY [target] ******************************************************************

TASK [setup] *******************************************************************
ok: [blog2]

TASK [Add User] ****************************************************************
fatal: [blog2]: FAILED! => {"changed": false, "cmd": "/usr/sbin/useradd -m hoge", "failed": true, "msg": "[Errno 13] 許可がありません", "rc": 13}

NO MORE HOSTS LEFT *************************************************************
        to retry, use: --limit @site.retry

PLAY RECAP *********************************************************************
blog2                      : ok=1    changed=0    unreachable=0    failed=1

useraddコマンドでエラーになってしまいました
どうやら現在ssh接続しているユーザではuseraddコマンドを実行する権限が足りないようです
become: yesとしてsudoで処理するようにplaybookに付け足しましょう

$ vi site.yml
##################################################
---
- hosts: target
  vars:
    - username: hoge
  tasks:
    - name: Add User
      user: name={{ username }}
      become: yes
##################################################

再実行です

$ ansible-playbook -i hosts site.yml

PLAY [target] ******************************************************************

TASK [setup] *******************************************************************
ok: [blog2]

TASK [Add User] ****************************************************************
fatal: [blog2]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "sudo: パスワードが必要です\r\n", "msg": "MODULE FAILURE", "parsed": false}

NO MORE HOSTS LEFT *************************************************************
        to retry, use: --limit @site.retry

PLAY RECAP *********************************************************************
blog2                      : ok=1    changed=0    unreachable=0    failed=1

sudo実行時にパスワードが必要な為、自動実行処理が失敗したようです
ansible実行時に-Kオプションを使って、sudoパスワードをプロンプトから入力しておきましょう

$ ansible-playbook -i hosts site.yml -K
SUDO password:

PLAY [target] ******************************************************************

TASK [setup] *******************************************************************
ok: [blog2]

TASK [Add User] ****************************************************************
changed: [blog2]

PLAY RECAP *********************************************************************
blog2                      : ok=2    changed=1    unreachable=0    failed=0

成功しました!
ひとまずhogeユーザの追加はできましたが、パスワード設定やssh-key設定がまだなのでこのユーザではログインができません。
userモジュールのオプションでpasswordやgenerate_ssh_keyを使えば目的が達成できそうです。
ただpasswordオプションは「crypted password」ということで一工夫必要なので、次回また記載させて頂きます。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください