第一台机器后 Ansible Ping 挂起

第一台机器后 Ansible Ping 挂起

我有3台虚拟机:

  • ansible主机:192.168.0.103
  • 应用程序1:192.168.0.105
  • 应用程序2:192.168.0.106

现在我已验证该操作对 app1 有效,对 app2 也同样有效。ssh -i ansible_id_rsa [email protected]

我定义了一个 inventory.yml 文件,内容如下:

app:
  hosts:
    vm01:
      ansible_host: 192.168.0.105
      ansible_ssh_private_key_file: ~/.ssh/ansible_id_rsa
    vm02:
      ansible_host: 192.168.0.106
      ansible_ssh_private_key_file: ~/.ssh/ansible_id_rsa

在此之后,我尝试运行ansible app -i inventory.yml -m ping但它在返回第一台机器的成功消息后挂起,按下回车键会出现如下所示的红色错误文本。

1

当我用 运行它时-vvvv,我注意到其中有一行read header failed: Broken pipe。目前它似乎对 app2 失败了,但如果我从库存文件中删除 app1,我也会收到 app2 的成功消息。

这里可能出了什么问题?

更新:

在内部,它运行以下命令,这就是引发管道破裂错误的原因,但并不确定该怎么办。

ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/home/vagrant/.ssh/ansible_id_rsa"' -o KbdInteractiveAuthentication=no -o Prefe
rredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/vagrant/.ansible/cp/3605020054"' 192.168.0
.105 '/bin/sh -c '"'"'rm -f -r /home/vagrant/.ansible/tmp/ansible-tmp-1661084339.4252737-8700-269402406490478/ > /dev/null 2>&1 && sleep 0'"'"''

更新 2:

因此建议我在 ansible.cfg 文件中添加一些属性,现在如下所示:

[ssh_connection] 
host_key_checking=no 
pipelining=yes 
ssh_args=-o ControlMaster=auto -o ControlPersist=10m -o StrictHostKeyChecking=no 

有了这个:

  • 启动后第一次,第一台机器通过,第二台机器失败,原因是 python 解释器存在问题
  • 此后每次都适用,

但是,在任何地方指定 python 解释器(anisble.cfg 或 inventory.yml)都会导致它每次在除第一台机器之外的所有机器上失败。

不太清楚为什么会发生这种情况!

答案1

感谢@Zeitounator,解决方案是:

  1. 使用无密码的 ssh 密钥或将密码添加到 ssh-agent

  2. 使用-K并添加密码到保险库中的库存文件或使用-b无需密码即可提升权限

这样做可以使其一次性运行,而无需停止或提示输入。

相关内容