Назад | Перейти на главную страницу

Команда оболочки Ansible не работает под sudo, когда она должна быть успешной

У меня есть задача Ansible на основе https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2 которая продолжает терпеть неудачу, когда должна быть успешной.

Раньше я выполнял роль с ansible_ssh_user=root, но недавно перешел на использование пользователя без полномочий root, который имеет права sudo без пароля, а затем вызывает become в моих пьесах.

Однако теперь задача Ansible не выполняется, хотя я указал become=true. Tarsnap уже установлен, но задача все равно возвращается stderr: /bin/sh: tarsnap: command not found. Я думаю это из-за чего-то вокруг sudo что я не совсем понимаю.

Когда я вручную ssh на сервер как этот пользователь без полномочий root и запускаю sudo tarsnap --version | grep 1.0.35 --color=never, Я получил sudo: tarsnap: command not found. Но если я использую SSH как root, эта же команда дает мне tarsnap 1.0.35. Точно так же, когда я бегу sudo -i tarsnap --version | grep 1.0.35 --color=never (Обратите внимание ), Я получил tarsnap 1.0.35.

Я использую CentOS 7.

1) Почему результаты разные для sudo против sudo -i?

2) Как мне исправить мою задачу Ansible?

Укажите на tarsnap с полностью определенным путем или явно укажите PATH, чтобы он мог найти tarsnap. Вы можете найти отсутствующий элемент пути, войдя в систему как root и выполнив which tarsnap

Вы не упоминаете, какой вариант Linux вы используете, поэтому имейте в виду, что / bin / sh вполне может не совпадать с / bin / bash (например, ~ / .bashrc и ~ / .bash_profile могут не читаться ).

sudo -i предоставит вам «интерактивную» оболочку. Вы должны увидеть страницу руководства для bash (если вы действительно используете bash), чтобы узнать, что такое интерактивныйmeans (ie. which files are consulted). I think you'll find thatсудо -iwill read in ~/.bashrc, while justсудо(without-i`) не будет.