如何忽略ansible SSH真实性检查?


银环蛇
2025-03-11 12:06:37 (28天前)
  1. 有没有办法忽略由SSH进行的SSH真实性检查


Ansible
</跨度>
?例如,当我刚刚设置一个新服务器时,我必须对这个问题回答“是”:

收集事实 - 连接(是/否)?

我知道这通常是一个坏主意,但我将其合并到一个脚本中,首先在我的云提供商处创建一个新的虚拟服务器,然后自动调用我的

ansible
</跨度>
配置它的剧本。我想在脚本执行过程中避免任何人为干预。

6 条回复
  1. 0# 不见你 | 2019-08-31 10-32



    转发

    nikobelia



    对于那些使用jenkins来运行游戏书的人,我在运行ansible-playbook之前添加了我的jenkins作业,他的环境变量ANSIBLE_HOST_KEY_CHECKING = False
    例如:




    1. export ANSIBLE_HOST_KEY_CHECKING=False
      ansible-playbook playbook.yml \
      extra-vars=”some vars…” \
      tags=”tags_name…” -vv

    2. </code>

  2. 1# 一生浮华 | 2019-08-31 10-32



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




    ansible-playbook play.yml —ssh-common-args=’-o StrictHostKeyChecking=no’


  3. 2# NetworkAttachedStorage | 2019-08-31 10-32



    更改

    host_key_checking



    false

    对于所有主机是一个非常糟糕的主意。



    你想要忽略它的唯一一次是“第一次接触”,这两项任务将完成:



    1.   - name: Check known_hosts for {{ inventory_hostname }}
    2. local_action: shell ssh-keygen -F {{ inventory_hostname }}
      register: has_entry_in_known_hosts_file
      changed_when: false
      ignore_errors: yes

      • name: Ignore host key on first run
        when: has_entry_in_known_hosts_file == 1
        set_fact:
        ansible_ssh_common_args: ‘-o StrictHostKeyChecking=no




    因此,如果我们没有主机密钥,我们只关闭主机密钥检查

    1. known_hosts


    文件。


  4. 3# 蜡笔小辛 | 2019-08-31 10-32



    两个选项 - 第一个,正如您在自己的答案中所说,是设置环境变量

    ANSIBLE_HOST_KEY_CHECKING

    为假。



    设置它的第二种方法是将它放在一个ansible.cfg文件中,这是一个非常有用的选项,因为你可以全局设置它(在系统或用户级别,在

    /etc/ansible/ansible.cfg

    要么

    ~/.ansible.cfg

    ),或在与您正在运行的playbook相同的目录中的配置文件中。



    要做到这一点,做一个

    ansible.cfg

    在其中一个位置提交文件,并包含以下内容:




    1. [defaults]
      host_key_checking = False

    2. </code>


    您还可以在那里设置许多其他方便的默认值,例如是否在播放开始时收集事实,是否合并在多个位置声明的哈希值或将其替换为另一个,等等。这里有很多选项

    这里

    在Ansible文档中。





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



    SSH主机密钥验证是一个有意义的安全层

    持久主机

    1. - 如果您多次连接到同一台计算机,则在本地接受主机密钥很有价值。



    对于寿命较长的EC2实例,通过任务运行接受主机密钥是有意义的

    只有一次

    在初始创建实例时:



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


    在动态站起来的实例上检查主机密钥并在Playbook执行后立即删除没有安全价值,但检查持久性机器的主机密钥有安全价值。因此,您应该按逻辑环境不同地管理主机密钥检查。




    • 默认情况下启用保留检查(in

      ~/.ansible.cfg




    • 在工作目录中禁用针对临时实例运行的剧本的主机密钥检查(

      ./ansible.cfg

      用于针对流浪汉VM的单元测试的剧本,短期ec2实例的自动化)


  5. 4# 林老爷的日常 | 2019-08-31 10-32



    我找到了答案,你需要设置环境变量

    ANSIBLE_HOST_KEY_CHECKING



    False

    。例如:




    1. ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook

    2. </code>

登录 后才能参与评论