0

对于在目标Junos机器上复制文件的 ansible 剧本,我需要使用原始模块和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 的原始模块进行操作以允许在提示符上提供密码?

4

2 回答 2

1

尝试使用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
于 2019-04-25T06:43:28.067 回答
0

似乎没有这样的例子来处理原始模块的密码提示。

因此,决定以不同的方式做整个事情,例如使用从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
于 2019-04-26T13:50:47.910 回答