只有在必要时才能自动询问密码

时间:2014-02-19 21:18:26

标签: ansible

因此ansible-playbook--ask-pass--ask-sudo-pass。有没有办法让ansible先没有密码尝试ssh,然后只有在无密码登录失败时才提示输入密码?同样,可以在没有密码的情况下首先尝试sudo,然后只在不起作用的情况下提示?

仅供参考我有一个小的shell功能试图通过反复试验来解决这个问题,但我希望这样的事情能够被纳入ansible。

get_ansible_auth_args() {
  local base_check="ansible all --one-line --inventory-file=deploy/hosts/localhost.yml --args=/bin/true --sudo"
  ${base_check}
  if [[ $? -eq 0 ]]; then
    return;
  fi
  local args="--ask-pass"
  ${base_check} ${args}
  if [[ $? -eq 0 ]]; then
    export ANSIBLE_AUTH_ARGS="${args}"
    return;
  fi
  local args="--ask-pass --ask-sudo-pass"
  ${base_check} ${args}
  if [[ $? -eq 0 ]]; then
    export ANSIBLE_AUTH_ARGS="${args}"
    return;
  fi
}

1 个答案:

答案 0 :(得分:1)

如果我在下面显示ask_passssh_args,那么ansible应该在开头一次要求您输入密码,并在公钥验证不起作用时使用该密码。

[defaults]
ask_pass      = True

[ssh_connection]
ssh_args = -o PubkeyAuthentication=yes -o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s

这仍然不是完整的解决方案:Catch being(AFAIK)ansible使用sshpass,因此从一开始就收集的密码将是它将使用的唯一密码,如果你使用它将无法使用为不同的机器使用不同的密码。 : - )

我能想到的唯一其他黑客攻击是用你自己的脚本替换/usr/bin/ssh(或你的openssh使用的ssh使用的ssh),如果需要的话,它会包含从某个平面文件中读取密码的逻辑。怀疑ansible会隐藏tty所以你的脚本将无法从stdin“读取”密码。