この記事はRelux Advent Calendar10日目の記事です。
サーバを増やす時やユーザを追加する時など、サーバの数やユーザ数が多ければ多いほどコマンドでの実行は辛い作業となります。
ユーザをAnsibleで管理していれば、各サーバに対してplaybookを実行するだけなのであまり手間がかかりません。
実行する内容
- (必要であれば)グループの作成
- ユーザの作成
- ログイン用の公開鍵の登録
- (必要であれば)sudoersへの追加
以上の内容を実行するplaybookを作成します。
作成するファイル
relux_developers というグループに所属する ohsuka というユーザを 172.16.100.1 というアドレスのサーバに作成する例です。
構成
hosts
roles/
┗ user/
┣ authorized_keys/
┃ ┗ ohsuka
┗ tasks/
┗ main.yml
site.yml
内容
[target]
172.16.100.1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaq4REfnEy7TFRfc33fE15GkNJuhRSk7FDdwcGI8Q4hxDbJHe/GNpfVVa9vq2yxN9bCioTYSrLzYlbbh19v+svxXp7PEK66dKDSOL+ZcYZxQOAPQIA1AFyJIyf/AvIubHNBNQvSuvH4CXcdZiBOTQNpNCWh/ABYg1jFDODVWV6EQAlCftyTz6XwjanKLxW0hy85DssXZ+UcpWx9x9T91LyvbHI2cHx/DqlRA++zgVkPgT+1yZ4BSZm8TDtqC1PWvDAB1Xls4OAaovkQep7CYIldVhR/FUNGcBpM/ACvTX2R1pgZR1Tn6xn4HP1eFYt8Wlwb6Y1wNNj0NweNQUGW/VYwMU+q6RenOdF8Pe293kWrpXS9pja36Pto4lmqqhaDoKWB+tTdID+dhGkjUPRC7VamxE0DXZ7TMALHq81vakgRp4FDBGcb73gCxbyDP8pRtECwRgUc2LvCY/XnnJo4FXYl3jZA51YfhU0nT7D8cneQOPiODo3kEgaDjeB3ShyTwDbwXbwHVH0HLvnCDnpd1Q5q68FBpLfJbwAf6djpdnYhNmP5cUzJUH/PQ1zMmVwG/viHaV6pnAfmbngU9Lq/roE5cOyBFnWJ1AgQ3i2KSmj0HM0jxa5pvw9AJVtme8F4MwvsaeooNAEZgxcThIESMe3pI1houpulI9TMyda80PX8w== ohsuka@localhost
- name: create group relux_developers
group:
name: relux_developers
state: present
- name: create user ohsuka
user:
name: ohsuka
state: present
group: relux_developers
shell: /bin/bash
- file:
path: /home/ohsuka/.ssh
owner: ohsuka
group: relux_developers
state: directory
mode: 0700
- name: set public key to login ohsuka
copy:
src: roles/user/authorized_keys/ohsuka
dest: /home/ohsuka/.ssh/authorized_keys
owner: ohsuka
group: relux_developers
mode: 0600
- name: add ohsuka to sudoers
lineinfile:
dest: /etc/sudoers
backup: yes
state: present
regexp: '^ohsuka'
line: 'ohsuka ALL=(ALL) NOPASSWD: ALL'
- hosts: all
sudo: true
roles:
- role: user
main.ymlの解説
groupモジュールでグループを作成します。
システム上にすでにそのグループが存在すれば何もしません。
userモジュールでユーザを作成します。
groupオプションで所属するグループを指定します。
shellオプションを指定しなかった場合には、システムのデフォルトのシェルがログインシェルとなります。
fileモジュールで ~/.ssh
ディレクトリを作成します。
sshdの仕様上、~/.ssh
のパーミッションは0700
(drwx------
)である必要があります。
copyモジュールで公開鍵を設置します。
公開鍵はroles/user/authorized_keys/
以下にユーザごとに置くようにしました。
sshdの仕様上、パーミッションは0600
(-rw-------
)である必要があります。
lineinfileモジュールでsudoersへの追記をします。
記述を間違えると最悪の場合誰もsudoできなくなるので、変更・追記する場合には壊れても良いような環境で一度試した方が安全です。
実行
ansible-playbook -i hosts site.yml