Ansible のインストールと管理対象サーバへの接続設定メモ

Linux
Linux
スポンサーリンク

Ansible(アンシブル)は、サーバの構築作業などを自動化してくれる、オープンソースの構成管理ツールです。「シンプルと使いやすさ」を目標として、米レッドハット社が開発しています。また、Ansible は、管理対象サーバにエージェントのインストールが不要なことも大きな特徴です。そこで今回は、今さらではありますが、Ansibleのインストールと、Ansibleで管理対象サーバに接続できるまでの設定をメモしておきました。

環境

今回の環境は、Ansible をインストールして実行する「Ansible管理ホスト」と、Ansible で構成を管理される「管理対象サーバ」1台の簡単な構成です。

今回の環境の図

管理ホスト、管理対象サーバともにOSは、CentOS7.2です。rootユーザでログインできるところまでを手作業で設定しておきます。CentOS7.2インストールメモ

冒頭にも書きましたが、Ansibleはエージェントレスで動作しますので、管理対象サーバへの Ansibleのインストールは不要です。

Ansible のインストール

「Ansible管理ホスト」に、Ansibleをインストールします。

yum の EPELリポジトリをインストール

yum -y install epel-release

Ansible をインストール

yum -y install ansible

・バージョンの確認(2016年7月6日現在)
ansible --version

ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides

CentOSでは「/etc/ansible/」以下に、Ansible の関連ファイルが配置されます。

インベントリファイルの作成

Ansible は、インベントリファイル「/etc/ansible/hosts」に、記載されているサーバのみに処理を実行しますので、このファイルに、管理対象サーバのIPアドレスもしくはFQDNを入力しておきます。(ただし localhost はこのファイルに記載がなくても処理が実行されます)

オリジナルのインベントリファイルをバックアップ

mv -i /etc/ansible/hosts /etc/ansible/hosts.org

インベントリファイルを作成します。各種オプションも指定できますが、とりあえず管理対象サーバのIPアドレスのみ入力しておきます。
vi /etc/ansible/hosts

172.16.1.111

Ansible のデフォルトでは「/etc/ansible/hosts」が、インベントリファイルとして読み込まれますが、別の場所にインベントリファイルを作成して、「-i」オプションで指定することもできます。

インベントリファイルは、管理対象サーバをグループでまとめたり、正規表現のような書式で指定できるなど、書き方やオプションがたくさんあります。詳細は、公式マニュアル「How to build your inventory | Ansible Documentation」をご参照ください。

管理対象サーバの fingerprint の登録

Ansibleで管理対象サーバに接続する前に、一度SSHで管理対象サーバに接続して fingerprint を管理ホストの「known_hosts」に登録しておきます。

ssh root@172.16.1.111
 
The authenticity of host '172.16.1.111 (172.16.1.111)' can't be established.
ECDSA key fingerprint is 65:02:cb:ae:73:4e:3e:de:84:41:b3:13:e4:16:fc:fb.
Are you sure you want to continue connecting (yes/no)? yes

管理対象サーバの fingerprint が登録されていない場合は、ansible コマンドの実行時に以下のようなエラーが発生します。

172.16.1.111 | FAILED! => {
    "failed": true,
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}

fingerprint の登録を不要とする方法

セキュリティ的にオススメしませんが、Ansibleの設定ファイルに、SSHオプションを指定できますので、ssh_args に「-o StrictHostKeyChecking=no」を追加して回避する方法もあります。管理対象サーバが大量な場合は検討の価値がありますね。

vi /etc/ansible/ansible.cfg

#ssh_args = -o ControlMaster=auto -o ControlPersist=60s
 ↓
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no

(公式マニュアル)Bastion/Jumphost configuration | Ansible Documentation

SSH_CONFIG (5) | OpenSSH-6.9p1 日本語マニュアルページ

Ansible の接続テスト

pingモジュールを使って、Ansibleで管理対象サーバに接続できるかを確認します。

ansible 172.16.1.111 -m ping -u root -k
SSH password:

 
-m モジュールを指定
-u SSH接続に使うユーザを指定
-k 接続パスワードの入力を求める

以下の表示が返ってくれば接続テストOKです。

172.16.1.111 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

AWSのEC2など、初めから鍵認証が必要な場合は「--private-key=」で、秘密鍵を指定してあげます。

ansible 192.0.2.1 -m ping -u ec2-user --private-key=awskey.pem

 
「chmod 400 awskey.pem」とするのを忘れずに!「Failed to connect to the host via ssh.」エラーが発生します。

終わりに

他の構成管理ツールも触ってみましたが、「シンプルと使いやすさ」のキャッチコピー通り、Ansible が一番使いやすく感じました。特にエージェントレスなのが、他の構成管理ツールには無い魅力ですね。

次回は、Ansible でユーザを追加する Playbook を作成してみたいと思います。

コメント

タイトルとURLをコピーしました