Модуль Ansible raw – как обрабатывать запрос пароля на SFTP/SCP?

Чтобы ansible playbook скопировал файл на целевой компьютер Junos, мне нужен модуль raw и sftp/scp.

На целевой машине (Junos) нет Python, поэтому у меня есть только необработанный модуль на стороне ansible для запуска команд. И я пробовал sftp/scp, оба требуют ввода пароля в приглашении, но не заставляли его работать с использованием модуля raw.

Если бы команду копирования можно было выполнить в одной строке, это тоже сработало бы, но на целевой машине также нет sshpass. Итак, я надеюсь получить обходной путь, чтобы пароль можно было указать в приглашении из raw модуля ansible playbook.

Это от Junos, sftp работает нормально после ввода пароля по запросу.

root@:~ # sftp <username>@host:/file/location/file destFile
<username>@host's password:

И в плейбуке есть та же команда для 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 

Короче говоря, как я могу манипулировать с помощью raw модуля ansible, чтобы разрешить ввод пароля в приглашении?


person SaifAhmed    schedule 25.04.2019    source источник


Ответы (2)


Попробуйте использовать 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
person Vladimir Botka    schedule 25.04.2019
comment
Но при этом файл будет скопирован на локальный хост, а не на устройство Junos. - person larsks; 25.04.2019
comment
Ты прав. Я пропустил правильное направление. Вероятно, scp и delegate_to: host выполнят эту работу. Я исправил свой ответ. Спасибо. - person Vladimir Botka; 25.04.2019
comment
На самом деле, это бы сработало, если бы в Junos был питон. - person SaifAhmed; 25.04.2019
comment
@SaifAhmed: scp не зависит от python. python не требуется в Junos для scp destFile username@junos:/file/location/file. Ты пытался? - person Vladimir Botka; 25.04.2019
comment
@VladimirBotka да, это правда. Но я не имел в виду scp/sftp, я имел в виду ожидаемое на самом деле. - person SaifAhmed; 25.04.2019
comment
@SaifAhmed: expect делегирован host. Ты пытался? - person Vladimir Botka; 25.04.2019

Кажется, нет такого примера для обработки запроса пароля с помощью модуля raw.

Таким образом, решил сделать все по-другому, используя expect скопировать файл с ansible host на 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
person SaifAhmed    schedule 26.04.2019