AnsibleのSSH設定について

Ansibleがバージョンを上げた所為か今までのやり方だとSSHのコネクションエラーになるようになって、どうも–ask-pass の引数付きにするとパスワードいれて処理ができる事はわかったんだけど、スマートじゃない。

という事で調べた。

結論としては、varsファイルに

・ansible_ssh_user

・ansible_ssh_pass

・ansible_sudo_pass

の3つを書いておきましょう。でした。

最初に呼び出すsite.yml内で変数定義してもいいんだけど、group_varsディレクトリ内にhostsファイルで書くグループ名のyamlに書くのがいいかなって思う。

例えばhostsファイルに

`Ansibleがバージョンを上げた所為か今までのやり方だとSSHのコネクションエラーになるようになって、どうも–ask-pass の引数付きにするとパスワードいれて処理ができる事はわかったんだけど、スマートじゃない。

という事で調べた。

結論としては、varsファイルに

・ansible_ssh_user

・ansible_ssh_pass

・ansible_sudo_pass

の3つを書いておきましょう。でした。

最初に呼び出すsite.yml内で変数定義してもいいんだけど、group_varsディレクトリ内にhostsファイルで書くグループ名のyamlに書くのがいいかなって思う。

例えばhostsファイルに

`

とか書いてグループ名が「dev」の場合に

-playbook\

|

|–dev.yml

|

|–group_vars\

|   |

|   |–dev.yml

|

|–roles\※内容略

|

|–site.yml

みたいな感じで書く。

group_varsのdev.ymlには上記のようなansible_xxx_xxxを変数定義しておくとグループに対してssh接続の時に定義された値が使われる。これにより–ask-passの指定が必要なくなった。

問題は1つあって、group_varsのdev.ymlは公開したくない場合多いよねって事。

なので更に、ここでいうdev.ymlはansible-vaultコマンドを使って暗号化する。もしくはバージョン管理に含めない運用を行うって事が必要になる。暗号化する場合も復号に使うキー? ソルトみたいなもん?を書いたファイルを作る必要があって、それがないと暗号と復号ができないんだけど、そのファイルをバージョン管理に含めないって運用にするなら、最初からdev.ymlを含めないでも一緒かなって思う。

ansible-playbookを実行する時に復号のために–vault-passの引数とそのファイルパスを渡さないといけないってのも–ask-pass使うのと大差ないじゃんってなるから暗号化は必要な案件だけでいいかな。

hostsファイルにhostの後に引数オプション的にansible_ssh_passとか書けばいいのだけれども、それもなんだかなー

って事で、今後はgroup_varsもしくはglobalに認識されるような変数を定義するファイルにssh接続情報は書こうかと考えている。