tl;dr
hosts
や group_vars
などに ansible_ssh_pass
を指定すると公開鍵認証でのsshがオフになるので、公開鍵認証したい場合はコメントアウトしましょう。
検証環境
- ansible 1.8.1 (pip インストール)
- Ubuntu 14.04
ansible 1.9でも同様の動作が発生する事が想定されます(その部分にソースコードに手が加わっていないため)
トラブル
いくつかのroleごとにユーザのパスワードを設定するplaybookを書いていた際に、sshのパスワードが変更される影響を考慮してhostsファイルに ansible_ssh_pass
を記載していました。
$ cat hosts
[webserver]
web1.local
web2.local
web3.local
[webserver:vars]
vars_file=web.yml
ansible_sudo_pass=foobar
ansible_ssh_pass=foobar
サーバ自体には公開鍵認証でアクセス出来るのですが、パスワードも明示しておくか…という気持ちで登録しておくと、公開鍵認証でエラー。
普通にsshすると公開鍵認証に成功していたので、認証している鍵自体に問題は無さそうでした。
理由
ansible_ssh_pass
を記載しているとパスワード以外の認証が無効化されるため。
ansibleによって生成されるsshコマンドのオプションの中に GSSAPIAuthentication=no
と PubkeyAuthentication=no
が付与されるんですね。だから公開鍵認証も通らなかったようです。
まとめ
不要なパラメータはわざわざ書かないようにしましょう!