我是Ansible的新手。我搜索并阅读了Ansible的文档。但是我找不到解决问题的方法。
我的问题-
在我的Ansible剧本中,我正在运行一个命令,由于该命令,系统要求我输入密码。我不确定如何在该提示中输入密码。 我可以将密码另存为var,但不确定如何在该promt中输入密码。
任何指向文档的链接将受到高度赞赏。
答案 0 :(得分:1)
您通常可以只将expect
自变量用于stdin
或command
模块,而不用弄乱shell
:
- name: Do a thing
command:
cmd: myapp --flags --and --things
stdin: "{{ the_password }}"
- name: Do a thing
shell:
cmd: myapp --flags --and --things
stdin: "{{ the_password }}"
这对于许多应用程序都应该有效,但是有些应用程序将从控制tty读取而不是标准输入(如果它们具有tty)。对于这些,您可以在setsid
下运行它们,以防止它们拥有控制tty,因此它们从stdin读取:
- name: Do a thing
command:
cmd: setsid myapp --flags --and --things
stdin: "{{ the_password }}"
(这是假设您在Linux下运行,我不知道该如何在Windows / Mac上使用)
答案 1 :(得分:0)
您应该考虑使用期望模数。在这里,我有一个例子
- name: Executing RCU
expect:
command: >
"{{ oracle_common }}/bin/rcu -silent -createRepository -connectString {{ connection_string }}
-dbUser {{ db_user }} -dbRole {{ db_role }} -schemaPrefix {{ schema_prefix }}
-useSamePasswordForAllSchemaUsers {{ same_password|lower }} {{ list_components }}"
responses:
'Enter the database password': "{{ db_password }}"
'Enter the schema password': "{{ schema_password }}"
timeout: 1200 # Expect timeout by default is 30s. Here, I am using 20 minutes as RCU is slow
no_log: yes
register: rcu_output
# RCU-6016 means the schemas with given prefix are in the database
failed_when: "'ERROR - RCU' in rcu_output.stdout and 'CAUSE - RCU-6016' not in rcu_output.stdout"
changed_when: false
在前面的示例中,执行的命令要求输入数据库密码,该密码是通过使用Expect传递的。而且,它使用no_log:是,以避免打印密码。
有关Expect模块的文档可用here
我使用的示例可用here
您应该对机器有所期待才能使用期望。