首页 > 解决方案 > sleep 0 在 shell 脚本中做了什么,如果它在 ansible SSH 配置中用于在每个命令之后附加,它会做什么?

问题描述

在 shell 脚本中做了什么sleep 0?我阅读了 sleep 的手册页,上面写着“延迟指定的时间”,参数 NUMBER 以 SECONDS 指定这个时间(默认情况下)。

但我看到 ansible 使用sh -c 'echo ~ec2-user && sleep 0'从每个任务开始。此外,它会在它触发的每个远程命令的末尾使用它。

我没有在手册页上发现任何关于 sleep 0 的特殊情况,并且基于sleep命令的功能,让 sleep 0 没有任何意义。

sleep我服务器上的命令来自GNU coreutils 8.22

在研究了一段时间之后,我学到了一些东西,

  1. 这是给 ansible 的 SSH 配置,
  2. 每次使用 SSH 执行任务时,它都使用 -C 和多个选项运行 SSH。这些不是剧本或任务的一部分。
  3. 我在这里的 ansible 页面上查找了 ansible 配置。检查了所有文件和环境变量,但没有发现与 ssh 相关的内容
  4. 检查/etc/ssh/ssh_config没有我在 SSH 中看到的 ansible 正在执行的所有参数/参数
  5. 在清单中也提到了主机,就像这样 ansible_host=localhost ansible_user=ec2-user

例如,当 ansible 执行任何任务时,在开头的日志行:

 <localhost> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ec2-user"' -o C
onnectTimeout=120 -o ControlPath=/home/ec2-user/.ansible/cp/6bc5a26ee4 localhost '/bin/sh -c '"'"'echo ~ec2-user && sleep 0'"'"''
<localhost> (0, '/home/ec2-user\n', '')
<localhost> ESTABLISH SSH CONNECTION FOR USER: ec2-user

我正在执行由一个团队编写的 ansible 剧本,该团队中没有我可以与之交谈的人。我正在努力寻找 Ansible 在哪里使用它在每个 SSH 中使用的所有这些参数,以及为什么要使用它sleep 0

标签: bashshellsshansible

解决方案


推荐阅读