在 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
这里的调试在 stdout
和 stdout_lines
中没有显示任何内容,在 stderr
和 stderr_lines
中也没有显示任何内容
注意:我在阅读 shell
模块默认为 /bin/sh
即 dash
shell 在我的 Linux Mint VirtualBox 上。但是不管怎样都是一样的。
我已经用以下任务测试了 shell 命令,我在 stdout
和 stdout_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 次。
我正在尝试按照 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
这里的调试在 stdout
和 stdout_lines
中没有显示任何内容,在 stderr
和 stderr_lines
注意:我在阅读 shell
模块默认为 /bin/sh
即 dash
shell 在我的 Linux Mint VirtualBox 上。但是不管怎样都是一样的。
我已经用以下任务测试了 shell 命令,我在 stdout
和 stdout_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 次。