避免Ansible的SSH连接错误设置

避免Ansible的SSH连接错误的设置选项是什么?

概括

当您在Managed Node上首次使用SSH时或指纹发生变化时,OpenSSH的检查功能会显示警告,可能导致ansible无法执行。为了避免这种情况,以下是需要进行的设置。

行动环境

CentOS 6: Ansible 2.1

出现警告信息的情况。

在以下情况下,将显示警告消息。

Managed NodeにSSHで接続したことがなく、~/.ssh/known_hostsにfingerprintが無いとき。

sshでの接続時、以下のようなメッセージが表示されます。

The authenticity of host ‘XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)’
can’t be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)?

ansibleやansible-playbookを実行時、以下のようなメッセージが表示されます。

Using a SSH password instead of a key is not possible
because Host Key checking is enabled and sshpass does not support this.
Please add this host’s fingerprint to your known_hosts file to manage this host.

Managed Nodeのサーバ更改後、初めてSSHで接続した時。
(=IPアドレスの変更はないが物理やOSが変更された)
(=fingerprintが変わり~/.ssh/known_hostsと値が一致しなくなった)

sshでの接続時、以下のようなメッセージが表示されます。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ansibleやansible-playbookを実行時、以下のようなメッセージが表示されます。

SSH encountered an unknown error during the connection.
We recommend you re-run the command using -vvvv,
which will enable SSH debugging output to help diagnose the issue

避免的方式 de

ansible.cfgのssh_argsの設定
/etc/ansible/ansible.cfgの[ssh_connection]のブロックに以下の設定を記載する。

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

設定の意味

デフォルト設定
ControlMaster,ControlPersistはデフォルトの設定のままなので割愛。
StrictHostKeyChecking=no
ホストのデータベースファイル(デフォルトでは~/.ssh/known_hosts)に存在しないときに確認なしに接続する。
fingerprintは確認なしにホストのデータベースファイルに記録されていく。

UserKnownHostsFile=/dev/null
ホストのデータベースファイル。(デフォルトでは~/.ssh/known_hosts)
データベースファイルを常に空(/dev/null)にすることで、Managed Nodeのサーバ更改時など、fingerprintが変わった時に、データベースファイルを整合性が取れずエラーとなってしまうのを回避する。

問題点

インベントリファイルに記載されているサーバは、すべて信頼できることが前提となる。

其他避免方式 (Tā de

    1. 手工通过SSH连接

 

    1. 对所有目标服务器和用户进行SSH连接。

问题点
目标多的话很麻烦。
当指纹发生变化时需要处理(需要修改~/.ssh/known_hosts)。

设置ansible执行用户的SSH配置
在执行ansible的控制机用户的SSH配置中,禁用指纹检查。

设置(示例)

$ vi ~/.ssh/config
Host 192.168.0.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

问题点
所指定的目标和范围都是可信任的前提。
在ansible执行时以外的普通SSH连接也会受到这个设置的影响。

ansible.cfg的host_key_checking设置
在ansible.cfg中,有一个与StrictHostKeyChecking相当的设置项host_key_checking。
此设置在Ansible官方文档(Docs >> Getting Started >> Host Key Checking)中有介绍。

设置(示例)将host_key_checking = False添加到[defaults]块中

$ vi /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False

问题点
依然会对~/.ssh/known_hosts中注册的值进行检查,所以当指纹发生变化时会报错,需要处理(修改~/.ssh/known_hosts)。

结束。

从安全角度来看,最好的做法是提前通过SSH连接并创建known_hosts文件,而不是回避这个过程。
然而,当指纹发生变化时,比如服务器更改或硬件更换,会有多少人意识到需要更新known_hosts呢?相当大比例的人可能会遇到错误并进行调查后才会意识到这一点。

根据安全性和操作需求,最终需要选择适当的设置方法。

以上

广告
将在 10 秒后关闭
bannerAds