我有很多系统使用通用用户名登录。大多数系统的密码也相同。我有一个包含所有系统的清单文件。对于密码不同的系统,我已将密码保存在主机名下,其余系统的密码保存在 group_vars 文件中。
在库存文件中:
hostname1 ansible_ssh_pass=pass1
hostname2 ansible_ssh_pass=pass2
hostname3
hostname4
group_vars 文件:
ansible_user: someuser
ansible_ssh_pass: pass3
我没有更高的权限。从另一个线程中,我能够弄清楚如何仅使用 passwd 来更改密码,而不使用其他实用程序。
shell: 'printf "%s\n" OldPass NewPass NewPass | passwd'
passwd 不支持“-p”选项。
我正在尝试找出一种方法来从 ansible 为每个主机选择 OldPass 值的地方获取 OldPass 值,这样我就不必运行这个剧本 n 次,并手动将 OldPass 放入 shell 命令中。
请就如何进行此事提供建议。
谢谢。
答案1
您可以直接使用变量:
$ ansible -c local -m shell \
-a "printf '%s\n' {{ ansible_ssh_pass }} {{ ansible_ssh_newpass }}" \
--extra-vars="ansible_ssh_pass=oldpass ansible_ssh_newpass=newpass" \
localhost
127.0.0.1 | SUCCESS | rc=0 >>
oldpass
newpass
在这个例子中,变量是ansible
从命令行输入的,在你的例子中,它们来自group_vars
。
您甚至可以定义一个默认值并为特定系统覆盖它:
$ ansible -c local -m shell \
-a "printf '%s\n' {{ ansible_ssh_pass | default('otherpass') }} {{ ansible_ssh_newpass }}" \
--extra-vars="ansible_ssh_newpass=newpass" \
localhost
127.0.0.1 | SUCCESS | rc=0 >>
otherpass
newpass