Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

skokado
しがないエンジニア。
https://portfolio.skokado.me/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away