レガシーChefが動かなくてLinuxユーザー追加できなくて困った。
ということでAnsibleで場当たり的に解決したので備忘録。
Inventory file
hosts に ユーザーを追加するサーバーの情報と、SSHの接続設定を記載します。
hosts
[web]
xxx.xxx.xxx.xxx # ユーザーを追加したいサーバーのIP
[all:vars]
ansible_ssh_user={{ SSHするユーザー名 }}
ansible_ssh_private_key_file=~/.ssh/{{ 秘密鍵 }}
playbook
playbook.yml に実際にユーザー追加の処理を記載した playbook を作成します。今回作るユーザーはパスワード無しで sudo できるようにします。
playbook.yml
- hosts: all
sudo: true
vars:
username: {{ 追加するユーザーの名前 }}
password: {{ MD5ハッシュ化したパスワード }}
tasks:
- name: add a new user
user: name={{ username }} password={{ password }} state=present
- name: no password sudoable
lineinfile: dest=/etc/sudoers.d/{{ username }} line="{{ username }} ALL=(ALL) NOPASSWD:ALL" create=yes owner=root group=root mode=0440
- name: mkdir .ssh
file: dest=/home/{{ username }}/.ssh/ state=directory owner={{ username }} group={{ username }} mode=700
- name: add authorized keys
file: dest=/home/{{ username }}/.ssh/authorized_keys state=touch owner={{ username }} group={{ username }} mode=600
- name: copy publickey
copy: src=~/.ssh/{{ 公開鍵 }} dest=/home/{{ username }}/.ssh/authorized_keys
実行
$ ansible-playbook -i hosts playbook.yml -u {{ SSHするユーザー名 }}
PLAY [all] *********************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [xxx.xxx.xxx.xxx]
TASK [add a new user] **********************************************************************************************
changed: [xxx.xxx.xxx.xxx]
TASK [no password sudoable] ****************************************************************************************
changed: [xxx.xxx.xxx.xxx]
TASK [mkdir .ssh] **************************************************************************************************
changed: [xxx.xxx.xxx.xxx]
TASK [add authorized keys] *****************************************************************************************
changed: [xxx.xxx.xxx.xxx]
TASK [copy publickey] **********************************************************************************************
changed: [xxx.xxx.xxx.xxx]
PLAY RECAP *********************************************************************************************************
52.196.24.246 : ok=6 changed=5 unreachable=0 failed=0
こんな感じの結果になればきっとうまくいっているはず。最後に追加したユーザーでSSHできるか確認しましょう。
$ ssh {{ 追加されたユーザーの名前 }}@xxx.xxx.xxx.xxx
参考
- https://qiita.com/komitomo/items/e78855fa1ccee1737ac7
- https://blog.5000164.jp/2015/11/28/ansible-sudo/
- https://blog.pinkumohikan.com/entry/use-sudo-command-without-password
おわり
🙌