是否有一种方法可以忽略由Ansible做出的SSH真实性检查?例如,当我刚刚安装了一个新服务器时,我必须回答这个问题:

GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?

我知道这通常是一个坏主意,但我将它合并到一个脚本中,该脚本首先在我的云提供商创建一个新的虚拟服务器,然后自动调用我的ansible playbook来配置它。我希望在脚本执行过程中避免任何人为干预。


当前回答

两个选项-第一个,正如你在自己的回答中所说,是将环境变量ANSIBLE_HOST_KEY_CHECKING设置为False。

第二种设置方法是将它放在ansible.cfg文件中,这是一个非常有用的选项,因为你可以全局设置(在系统或用户级别,在/etc/ansible/ansible.cfg或~/.ansible.cfg),或者在与你正在运行的playbook相同目录的配置文件中设置。

要做到这一点,在这些位置之一创建ansible.cfg文件,并包括以下内容:

[defaults]
host_key_checking = False

您还可以在那里设置许多其他方便的默认值,比如是否在剧本开始时收集事实,是否合并在多个地方声明的哈希值,或者用另一个替换哈希值,等等。在Ansible文档中有一大堆选项。


编辑:关于安全性的说明。

SSH主机密钥验证对于持久主机来说是一个有意义的安全层——如果您多次连接到同一台机器,那么在本地接受主机密钥是很有价值的。

对于存活时间较长的EC2实例,在初始创建实例时只运行一次任务并接受主机键是有意义的:

- name: Write the new ec2 instance host key to known hosts
  connection: local
  shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

对于动态启动并在playbook执行后立即删除的实例,检查主机密钥没有安全价值,但是对于持久机器,检查主机密钥有安全价值。因此,您应该根据不同的逻辑环境对主机密钥检查进行不同的管理。

默认情况下启用检查(在~/.ansible.cfg中) 禁用针对临时实例运行的playbook工作目录中的主机密钥检查(./ansible.cfg与playbook一起用于针对流浪虚拟机的单元测试,用于短期ec2实例的自动化)

其他回答

你可以在运行playbook时将它作为命令行参数传递:

ansible-playbook玩。yml——ssh-common-args='-o StrictHostKeyChecking=no'

尼克贝利亚

对于那些使用jenkins运行playbook的人,我刚刚在运行ansible-playbook之前添加了环境变量ANSIBLE_HOST_KEY_CHECKING = False 例如这个:

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv

两个选项-第一个,正如你在自己的回答中所说,是将环境变量ANSIBLE_HOST_KEY_CHECKING设置为False。

第二种设置方法是将它放在ansible.cfg文件中,这是一个非常有用的选项,因为你可以全局设置(在系统或用户级别,在/etc/ansible/ansible.cfg或~/.ansible.cfg),或者在与你正在运行的playbook相同目录的配置文件中设置。

要做到这一点,在这些位置之一创建ansible.cfg文件,并包括以下内容:

[defaults]
host_key_checking = False

您还可以在那里设置许多其他方便的默认值,比如是否在剧本开始时收集事实,是否合并在多个地方声明的哈希值,或者用另一个替换哈希值,等等。在Ansible文档中有一大堆选项。


编辑:关于安全性的说明。

SSH主机密钥验证对于持久主机来说是一个有意义的安全层——如果您多次连接到同一台机器,那么在本地接受主机密钥是很有价值的。

对于存活时间较长的EC2实例,在初始创建实例时只运行一次任务并接受主机键是有意义的:

- name: Write the new ec2 instance host key to known hosts
  connection: local
  shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

对于动态启动并在playbook执行后立即删除的实例,检查主机密钥没有安全价值,但是对于持久机器,检查主机密钥有安全价值。因此,您应该根据不同的逻辑环境对主机密钥检查进行不同的管理。

默认情况下启用检查(在~/.ansible.cfg中) 禁用针对临时实例运行的playbook工作目录中的主机密钥检查(./ansible.cfg与playbook一起用于针对流浪虚拟机的单元测试,用于短期ec2实例的自动化)

我找到答案了,你需要将环境变量ANSIBLE_HOST_KEY_CHECKING设置为False。例如:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...

使用名为validate_certs的参数来忽略ssh验证

- ec2_ami:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

通过这样做,它忽略了ssh验证过程