TL;DR
SSHログインが鍵認証ではなくパスワード認証の環境向け記事
- 人が手動でログインしてオペレーションする用途のユーザ: パスワード認証
- プログラム実行する際の実行ユーザ: 鍵認証
- 本記事の制約事項
- 共通ユーザのパスワードはサーバ毎に共通
- rootユーザのパスワードはサーバ毎に別(共通でも可)
上記のような環境下におけるAnsible専用のSSHユーザを作成しなくても良いという内容.
構成
playbook-dir
|-- ansible.cfg
|-- group_vars
| |-- host1.yml
|-- host2.yml
|-- ...
|-- inventory
|-- roles
| `-- common
| `-- tasks
| `-- main.yml
`-- site.yml
コマンド
$ ansible-playbook -i inventory site.yml -u user-name -k
SSH password: (user-name のログインパスワード)
site.yml
- hosts: all
become: true
become_method: su
roles:
- common
要件に応じて個別にカスタマイズする.
一般ユーザでのログイン後にroot権限が必要な場合にbecome_method: su
でrootユーザスイッチする.
roles/common/tasks/main.yml
メインの処理はこれに記述する. 割愛.
inventory
[host1]
192.168.0.1
[host2]
192.168.0.2
[host3]
...
サーバ毎に異なるrootパスワードを設けている場合、後述するパスワード記述ファイルと合わせてホスト名毎にセクションを分けてインベントリを記載する必要がある.
共通パスワードならセクションを分けても分けなくてもどちらでも良い.
group_vars/host1.yml
ansible_su_pass: ***
サーバ毎のrootパスワードを平文で記述する.
共通パスワードならall.yml
で良い(はず).
平文が気になる場合はvaultなどで暗号化すれば良い(はず... 未検証).
以上
弊社環境はログイン用一般ユーザ(個別)をLDAP管理にしているため、LDAPユーザのパスワードのみで全サーバへの共通ジョブを実行できてます.
自動実行したりJenkinsやrundeck等と統合する場合はこれじゃ運用回りませんね.