как сопоставить мой распределенный скрипт оболочки с ansible - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в Ansible и пытаюсь "переписать" свои скрипты распределенной оболочки в Ansible.Обычно я обменивался ключами ssh с одного из моих серверов на несколько других (пользователь user1).И этот пользователь имеет право sudo (для выполнения sudo bash) на всех этих клиентах.Мне нужно выполнить несколько команд от имени второго пользователя (user2) на всех этих хостах.Итак, мой сценарий выглядит так:

hosts="hosts.txt"

while read line;
do
    ssh user1@${line} bash << EOF
    sudo bash << EOT
    su - user2 << EOS
    /path/to/command arg1 arg2
EOS
EOT
EOF
done < ${hosts}

Есть ли какой-нибудь способ сделать это?

Я обнаружил, что есть способ стать / становиться_пользователем, но это связано с sudo, иУ пользователя user2 нет прав sudo.

Является ли решение предоставить пользователю sudo права1 для выполнения / path / to / command как user2?Есть ли другой способ избежать добавления новых прав sudo?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я думаю, вам не следует разбивать строки, содержащие su и command , и предпочитать что-то вроде:

su - user2 -c '/path/to/command arg1 arg2'

If user2 нужна среда GNU / Bash, вы можете изменить свою строку на:

bash -c "su - user2 -c '/path/to/command arg1 arg2'"
0 голосов
/ 23 октября 2018

Просто в качестве подтверждения концепции, поместите хосты в свой hosts.txt в свой ответный инвентарь и попробуйте это со следующей пьесой:

---
- hosts:
    - all
  remote_user: user1

  tasks:
  - name: your task
    shell: '/path/to/command arg1 arg2'
    become: True
    become_user: user2
    register: output

  - name: DEBUG
    debug:
      var: output

Выполнение должно быть выполнено сansible-playbook your_playbook.yml.

Если ваш /etc/sudoers несколько уродлив, и это не работает, вы можете заменить задачу your task следующим:

  - name: your task
    shell: 'sudo bash -c "su - user2 -c \"/path/to/command arg1 arg2\""'
    register: output
...