ansibleのhost_key_checkingが効いてないみたいなので、別の方法で解決してみます。
状況
- mac上にvagrantでansibleサーバとansibleの適用先サーバを起動する。
- ansibleサーバのCentoOSはv7.1、ansibleのバージョンはv1.9.1。
- ansible適用サーバは最初CentOS7だったが、先日CentOS6.5に変更した。
- sshでPermission deniedが発生。
というものです。
このPermission deniedの正体は、sshする時にknown_hostsにキー情報が保存されますが、これが以前作ったキーと違うよ、というものです。
所謂↓こんなやつです。
[vagrant@ansible ansible-playbook-sensu]$ ssh vagrant@192.168.33.21 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is cd:8f:67:bc:1b:05:3b:bf:d2:9b:fd:66:4a:cd:22:e8. Please contact your system administrator. Add correct host key in /home/vagrant/.ssh/known_hosts to get rid of this message. Offending RSA key in /home/vagrant/.ssh/known_hosts:1 RSA host key for 192.168.33.21 has changed and you have requested strict checking. Host key verification failed.
これを解決するために、ansibleには「host_key_checking」という設定が用意されています。
Configuration file — Ansible Documentation
Getting Started — Ansible Documentation
このドキュメントに従い、ansible.cfgに以下のように設定します。
[defaults] host_key_checking = False
host_key_checkingをしない設定にしているにも関わらず、以下のように以前と鍵が違うエラーが発生します。
[vagrant@ansible ansible-playbook-sensu]$ ansible-playbook -i development ./site.yml -vvvv PLAY [sensu] ****************************************************************** GATHERING FACTS *************************************************************** <192.168.33.21> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.21> REMOTE_MODULE setup <192.168.33.21> EXEC sshpass -d4 ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.33.21 /bin/bash -l -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1432734759.42-39423567902999 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1432734759.42-39423567902999 && echo $HOME/.ansible/tmp/ansible-tmp-1432734759.42-39423567902999' fatal: [192.168.33.21] => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). while connecting to 192.168.33.21:22 It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue. TASK: [sensu-server | Stop firewalld] ***************************************** FATAL: no hosts matched or all hosts have already failed -- aborting PLAY RECAP ******************************************************************** to retry, use: --limit @/home/vagrant/site.retry 192.168.33.21 : ok=0 changed=0 unreachable=1 failed=0
これは-vvvvオプションで詳細を表示しているわけですが、なんかUserKnownHostsFile=/dev/null無しにsshしてるのですよねえ・・・
対応策
ansible.cfgに「ssh_args = -o UserKnownHostsFile=/dev/null」を追加してしまいます。
[defaults] host_key_checking = False executable = /bin/bash -l [ssh_connection] ssh_args = -o UserKnownHostsFile=/dev/null
ansible.cfgをこのように設定して実行すると、以下のように「UserKnownHostsFile=/dev/null」オプションが追加され、Permission deniedが発生しなくなります。
[vagrant@ansible ansible-playbook-sensu]$ ansible-playbook -i development ./site.yml -vvvv PLAY [sensu] ****************************************************************** GATHERING FACTS *************************************************************** <192.168.33.21> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.21> REMOTE_MODULE setup <192.168.33.21> EXEC sshpass -d4 ssh -C -tt -vvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o Port=22 -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.33.21 /bin/bash -l -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556 && echo $HOME/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556' <192.168.33.21> PUT /tmp/tmpOfvLL7 TO /home/vagrant/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556/setup <192.168.33.21> EXEC sshpass -d4 ssh -C -tt -vvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o Port=22 -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.33.21 /bin/bash -l -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556/setup; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1432735289.47-264382925338556/ >/dev/null 2>&1' ok: [192.168.33.21]

- 作者: 若山史郎
- 発売日: 2014/07/30
- メディア: Kindle版
- この商品を含むブログ (2件) を見る

- 作者: 宮下剛輔
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る

Jenkins、Chef、Redmine、Dockerで業務効率アップ 10倍速の開発・運用ツール (日経BPムック)
- 作者: 日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2015/05/14
- メディア: ムック
- この商品を含むブログ (2件) を見る