2014-04-07

ようやく Ansible 始めたけど右も左も分からない初心者なので、忘れないようにメモっておきます。

ssh 接続に関する情報をどこに記述すればいいのか?

方法 1: .ssh/config に記述する

ssh コマンドが参照する .ssh/config ファイルに、ssh 接続に必要な情報を記述する方法です。

Host hoge.example.com
    HostName     hoge.example.com
    User         deployguy
    IdentityFile ~/.ssh/id_rsa.hoge.example.com

普段お使いの .ssh/config を Ansible にそのまま流用・活用することができるため、 開発者ごとにサーバへのログインアカウントが異なる場合に適している方法と言えるでしょう。

一方で、Ansible 自体のバージョン (1.2 以前) や OS にインストールされている OpenSSH のバージョン (具体的には、 ControlPersist をサポートしていないちょっと古いバージョン) によっては、 ssh コマンドではなく Paramiko という Python 製の SSH クライアント (?) が使われるようで、 その場合には .ssh/config が参照されませんので、注意が必要です。

上記の条件に当てはまる場合で、Paramiko ではなく ssh コマンドを使いたいときは、 以下のように Inventory ファイルで ansible_connection パラメータに ssh を指定すれば いいようです。

[server-hoge]
hoge.example.com  ansible_connection=ssh

方法 2: Ansible の Inventory ファイルに記述する

ansible-playbook コマンドのオプション -i で指定する Inventory ファイルに、 接続設定を記述する方法です。

[server-hoge]
hoge.example.com  ansible_ssh_user=deployguy  ansible_ssh_private_key_file=~/.ssh/id_rsa.hoge.example.com

各開発者の .ssh/config に依存しないことと、方法 1 にあったような Ansible / OpenSSH のバージョンによる ssh 接続手段の違いを意識する必要がないため、この Inventory ファイルをリポジトリで共有することで環境依存・属人的な状態を小さく保つことが出来るでしょう。

一方で、ログインアカウントの情報を Inventory ファイルに記述する必要があるため、開発者ごとにサーバへのログインアカウントが異なる場合にはこの方法はあまり向きません。

参考文献