对于要在目标Junos机器上复制文件的ansible playbook,我需要使用原始模块和sftp / scp。
目标机器(Junos)没有python,所以我在ansible端只有原始模块来运行命令。我一直在尝试sftp / scp都需要在提示符下输入密码,但是没有让它使用原始模块工作。
如果复制命令可以在一行中完成,那也可以,但目标机器也没有sshpass。所以,我希望得到任何解决方法,以便在ansible playbook的原始模块的提示符上提供密码。
这是来自Junos,sftp在提示密码后工作正常。
root@:~ # sftp <username>@host:/file/location/file destFile
<username>@host's password:
并且playbook具有相同的raw命令,但即使使用多个命令设置为raw(; / &&),也无法处理密码提示。
- name: "Copy config file on Junos"
# raw: sftp <username>@host:/file/location/file destFile && <password>
# raw: sftp <username>@host:/file/location/file destFile;<password>
raw: sftp <username>@host:/file/location/file destFile
register: disp
- name: "Print disp"
debug:
var: disp
简而言之,我如何操纵使用ansible的原始模块来允许在提示符下提供密码?
尝试使用expect和“delegate_to:host”。根据您的需求调整“响应”。
- name: Copy config file on Junos
expect:
command: scp destFile username@junos:/file/location/file
responses:
(?i)username@junos's password: "MySekretPa$$word"
delegate_to: host
似乎,没有这样的例子来处理原始模块的密码提示。
因此,决定以不同的方式做整个事情,使用从ansible主机到junos的期望复制文件。这是下面的工作.yml:
- hosts: 127.0.0.1
connection: local
gather_facts: no
tasks:
- name: Copy config file on Junos
expect:
command: scp srcFile <user>@junos:/dest/file/
responses:
(.*)Password: "<password>"
delegate_to: localhost