管理するサーバが大量に増えてきたので、いちいち各サーバに入って運用して・・・
が非常にめんどくさくなってきたので、本格的にAnsibleを利用したシステムを構築中です。
その中で些細な問題が発生したので備忘として書き留めておきます。
事象
Ansibleをインストールして、インベントリファイルを設定して、テストとしてlsコマンドを実行しようとしたところ、RSA key fingerprint 云々と表示されてyes/noを聞かれてしまいました。
RSA key fingerprint is ****************************************** Are you sure you want to continue connecting (yes/no)?
単純にそのサーバからssh接続をしたことがなかったため鍵がないですよ、と怒られているだけとは分かったのですが、いちいち1台ずつログインしていくのはめんどくさい。
どうにかして解決方法がないかを調べました。
解決方法
ansible.cfg の設定変更
以下の設定ファイルをいじることでansibleの設定変更をすることができます。
/etc/ansible/ansible.cfg
上記のファイルをエディターで開いて、[ssh_connection]ブロックに以下を追記
[ssh_connection] ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
ControlMaster=auto | SSHマルチプレキシングを有効にする。 有効にしておくと、初回接続時にリモートホスト毎にソケットを準備して、次回からはそのソケットを利用して接続しにかかるようになるみたい。 |
ControlPersist=60s | ↑で準備されたソケットを保持する時間。 デフォルト60秒なのでそのままにしておく |
StrictHostKeyChecking=no | known_hostsに存在しないホストに接続する場合、チェックをしないで接続するようになる |
UserKnownHostsFile=/dev/null | known_hostsファイルの指定を外す。 Ansibleがknown_hostsを書き換えないようにする処理 |
これによってknown_hostsに記載されていない場合や整合性が取れない場合も無視してSSHできるようになります。
・・・セキュリティレベルはもちろん低下しているので、接続サーバの役割や求められるセキュリティレベルを確認してから設定するとよいでしょう。
できれば対象サーバ全台に一回SSHして鍵登録しておくのが一番良いのですが、なんせ1000台ぐらいのサーバに一個ずつ入っていくのがめっちゃしんどい・・・
そういうスクリプトを組めばいいだけかもしれませんが・・・
expectとかで・・・
参考サイト
AnsibleのSSH接続エラーの回避設定 - Qiita
AnsibleのSSH接続エラーの回避設定概要Managed NodeにSSHで一度も接続をしたことが無い時や、fingerprintが変わった時、OpenSSHのチェック機能により警告が表示さ…
コメント