Как запустить заданную пользователем команду на заданных пользователем хостах в ansible playbook?

#ansible #user-input #ssh-keys #ansible-inventory

#ansible #пользовательский ввод #ssh-ключи #ansible-инвентаризация

Вопрос:

 ---
- name: Adding the host server
  hosts: localhost

  vars_prompt:
    - name: "Server"
      prompt: "Server IP"
      private: no

    - name: "User"
      prompt: "Username"
      default: "Ubuntu"
      private: no

    - name: "Passwd"
      prompt: "Password"
      private: yes
      encrypt: "sha512_crypt"

    - name: "IdFile"
      prompt: "Identity file path(~/.ssh/id_rsa.pub)"
      private: no
      when: Passwd is undefined

    - name: "cmd"
      prompt: "Which command you want to run 1.ls -l 2.Top 3.uptime."
      private: |-
        no


  tasks:
    - name: Add host server
      add_host:
        name: "{{ Server }}"
        ansible_ssh_user: "{{ User }}"
        ansible_ssh_private_key_file: "{{ IdFile }}"
      when: IdFile is defined

    - name: Add host server
      add_host:
        name: "{{ Server }}"
        ansible_ssh_user: "{{ User }}"
         ansible_ssh_pass: "{{ Passwd }}"
      when: Passwd is defined

    - name: check OS name
      shell: uname -a
      delegate_to: "{{ Server }}"

- hosts: "{{ Server }}"
#below are for testing only.
  tasks:
    - name: Execute a command using the shell module
      become: true
      #become_user: root
      shell: uname -a

    - name: check OS name
      shell: uname -a
      delegate_to: "{{ Server }}"
  

Это выдает ошибку ниже:
фатальный: [localhost]: НЕДОСТУПЕН! => {«изменено»: false, «сообщение»: «Ошибка аутентификации»., «недоступно»: true}

Может ли кто-нибудь один раз проверить приведенный выше код и предложить изменения?

Комментарии:

1. Я могу использовать SSH без пароля с того же сервера только через скрипт, который не позволяет мне запускать команды на удаленном хосте. Поскольку я новичок в ansible, даже небольшая помощь будет оценена.

2. Похоже, у вас проблема с подключением к серверу. Пожалуйста, запустите свой сборник воспроизведения с -vvvv , чтобы просмотреть журналы подключений, вы можете обнаружить проблему там.

3. Привет, Зигарн, это выполняется без каких-либо ошибок на вашем компьютере? проверенные журналы соединений здесь выглядят хорошо.

4. Я могу заставить это работать, да. Но я заметил несколько проблем: when на основе другого запрошенного параметра var не работает, Passwd всегда будет определен и не пустой (даже больше, когда вы его шифруете), ansible_ssh_pass должно быть четкое значение пароля (поэтому попробуйте без шифрования), будьте осторожны, чтобы использовать expanduser фильтр на IdFile при хранении в ansible_ssh_private_key_file , чтобы иметь абсолютный путь (не уверен, что это обязательно, но для безопасности), IdFile пример неверен, поскольку он показывает путь к файлу с открытым ключом (просто удалите .pub )

5. [ПРЕДУПРЕЖДЕНИЕ]: Не удалось сопоставить предоставленный шаблон хоста, игнорируя: I.P