我有一个系统,它有一个基于旋转令牌的 sudo 密码,该密码每 30 秒左右更改一次。 我正在使用 Ansible 进行权限升级。 我知道我可以传递
--ask-su-pass
选项 - 但我遇到的问题是在询问密码时是一回事 - 但当 Ansible 实际尝试 sudo 时它会发生变化。
有没有办法在
sudo
-ing时得到提示?
---
- name: Install & Setup Docker
hosts: ece
become: true
tasks:
- name: Install Required Packages
yum:
name:
- "yum-utils"
- "device-mapper-persistent-data"
- "lvm2"
state: latest
register: yum_result
- debug:
var: yum_result
verbosity: 2
当我跑步时会发生什么:
玩【安装和设置 Docker】
任务[收集事实] ****************************************************** ****************************************************** ****************************************************** *** 致命:[xxxx]:失败! => {“已更改”:错误,“module_stderr”: “与 xxxx 的共享连接已关闭。 ”,“模块标准输出”: “sudo:需要密码 ", "msg": "模块故障 看 stdout/stderr 获取确切的错误", "rc": 1} 要重试,请使用:--limit
很明显我需要
sudo
的密码。 问题是 sudo 密码是一个轮换密码,所以每 30 秒左右就会改变一次
我可以使用
--ask-su-pass
标志来输入 sudo 密码 - 但当我第一次使用它时,我得到:
致命:[xxxx]:失败! => {"msg": "sudo 密码不正确"}
因为自从我输入密码以来密码已更改。 试图弄清楚我是否可以在尝试在远程系统上输入
sudo
密码时收到提示
稍微基于 在变量中使用 Ansible
--ask-become-pass
,为什么 Ansible 会忽略 ansible_become_password
变量?和
pause
模块 – 暂停 playbook 执行,一个最小的示例 playbook
---
- hosts: test
gather_facts: false
become: false
tasks:
- name: --ask-become-pass
pause:
prompt: "Password:"
echo: false
register: password
- shell:
cmd: id
register: result
become: true
vars:
ansible_become_password: "{{ password.user_input }}"
- debug:
var: result.stdout
实现您正在寻找的功能,从而产生的测试输出
ansible-playbook --ask-pass become.yml
SSH password:
PLAY [test] *****************************************************
[--ask-become-pass]
Password: (output is hidden):
TASK [--ask-become-pass] ****************************************
ok: [test.example.com]
TASK [shell] ****************************************************
changed: [test.example.com]
TASK [debug] ****************************************************
ok: [test.example.com] =>
result.stdout: uid=0(root) gid=0(root) groups=0(root) <omitted>