LoginSignup
10
8

More than 5 years have passed since last update.

【Ansible】SSHログインがパスワード認証かつrootログイン不可環境におけるPlaybook

Posted at

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等と統合する場合はこれじゃ運用回りませんね.

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8