在 shell 模块中使用 ssh-keyscan 不会在 Ansible 中产生任何输出

Using ssh-keyscan in shell module does not produce any output in Ansible

我正在尝试按照 添加使用 shell 模块和 ssh-keyscan 将密钥添加到我新创建的 EC2 实例的 known_hosts 文件.

在尝试按照该问题中列出的多种方式执行此操作后,我最终 运行 只是使用 shell 模块的 ssh-keyscan 命令,没有附加。我没有从这个任务中得到任何输出:

- name: accept new ssh fingerprints                                         
  shell: ssh-keyscan -H {{ item.public_ip }}
  args:
    executable: /bin/bash     
  with_items: "{{ ec2.instances }}"
  register: keyscan
- debug: var=keyscan

这里的调试在 stdoutstdout_lines 中没有显示任何内容,在 stderrstderr_lines

中也没有显示任何内容

注意:我在阅读 shell 模块默认为 /bin/shdash shell 在我的 Linux Mint VirtualBox 上。但是不管怎样都是一样的。

我已经用以下任务测试了 shell 命令,我在 stdoutstdout_lines:

中看到了正确的输出
- name: test the shell
  shell: echo hello
  args:
    executable: /bin/bash
  register: hello
- debug: var=hello

这是怎么回事? 运行 ssh-keyscan 在终端中(不是通过 Ansible)按预期工作。

编辑: 查看调试的 raw_params 输出显示 ssh-keyscan -H x.x.x.x 并将其复制并粘贴到终端中,按预期工作。

答案是它在第一次 时不起作用。在研究 another method 时,我偶然发现了允许重试任何命令的 ansible 中的 retries 关键字。我尝试了这个,并在它正在工作的重试循环中尝试了 2 次。