Ansible1.2.1及其之后的版本都会默认启用公钥认证.

公钥认证就是如果之后的某一台客户端和之前登录过的某一台主机IP相同,那么在“known_hosts”中有了不同的key,这时会提示一个错误信息直到被纠正为止。

在使用Ansible时,可能不想遇到那样的情况,如果有个主机没有在“known_hosts”中被初始化将会导致在交互使用Ansible或定时执行Ansible时对key信息的确认提示。如果想要禁用这个行为的话,可以关闭公钥认证,而且公钥认证会比较慢,也是提高效率的一个方法

1
2
# 认证提示:
"msg": "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."

关闭ssh首次连接的公钥认证提示

方法1
编辑ansible.cfg配置文件:

1
2
# 用来禁止ssh的指纹key字串检查
host_key_checking = False

或者直接设置环境变量:export ANSIBLE_HOST_KEY_CHECKING=False

方法2
可以使用-o参数将StrictHostKeyChecking设置为no,使用ssh连接时避免首次连接时让输入yes/no部分的提示。通过查看ansible.cfg配置文件,发现如下行:

1
2
3
4
5
[ssh_connection]
# ssh arguments to use
# Leaving off ControlPersist will result in poor performance, so use
# paramiko on older platforms rather than removing it
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s

修改配置文件:

1
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no