ssh接続に成功したりしなかったりする問題は結局解決しないままなんですが、
OpenSSHがだめならparamikoを使えば良いじゃない
ということで、paramikoで試してみました。
ansible hoge.huga.com -m ping -i hosts -c paramiko -k SSH password: <- 秘密鍵のパスフレーズを入力 hoge.huga.com | SUCCESS => { "changed": false, "ping": "pong" }
こっちはあっさり成功!
何回か試しましたが、100%つながります。
ただし、ここの記事によると、paramikoを使うとOpenSSHより遅いらしいので、ansible.cfgに
RHEL6系でansibleを使うならrecord_host_keysをFalseにすると速くなる - still deeper
record_host_keys=False
を指定しておきます。あと-c paramikoとかも毎回指定するのも面倒なので、まとめてansible.cfgには次のように指定しておきます。
[defaults] ask_pass=True transport=paramiko [paramiko] record_host_keys=False
これでもっかいpingを打ってみると
ansible hoge.huga.com -m ping -i hosts -c paramiko -k SSH password: <- 秘密鍵のパスフレーズを入力 hoge.huga.com | SUCCESS => { "changed": false, "ping": "pong" }
うむ。問題無し
パフォーマンスを考えると、そのうちparamikoからOpenSSHに乗り換えたくなるかもしれませんが、そんな大規模ノードの管理に使うつもりは無いので当面はこれでやってみます。