Я использую fabri c в python для создания удаленной оболочки и выполнения определенных команд на удаленном хосте. Оболочка использует разрешения root, но некоторые команды нужно запускать от имени другого пользователя. У меня есть следующий код:
from fabric import Connection, Config
sudo_config = Config(overrides={'sudo': {'password': linux_pass}})
c = Connection(host, connect_kwargs={"password": linux_pass}, config=sudo_confing)
first_start = c.sudo('''su spluser -c bash -c "/opt/splunk/bin/splunk start --accept-license --seed-passwd PASSWORD"''')
print(first_start.stdout.strip())
, который возвращает ошибку
bash: / opt / splunk / bin / splunk start: нет такого файла или каталога
Я считаю, что происходит то, что параметры команды accept-license и seed-passwd неправильно интерпретируются как параметры для команды bash.
Я также пробовал использовать
runuser -u spluser -- "/opt/splunk/bin/splunk start --accept-license --seed-passwd PASSWORD"
, но столкнулись с аналогичными проблемами.
Как это можно реализовать?
Изменить: я также пробовал следующее
c.sudo("/opt/splunk/bin/splunk start --accept-license --seed-passwd PASSWORD", user='spluser')
, но все равно нет игральные кости.