2016-12-08 2 views
1

Мне нужно запустить две или несколько команд в качестве другого пользователя в Linux. Например, используя «root», мне нужно sudo для другого пользователя и сделать что-то вроде «cd/tmp /; ls -ltr».Как запускать несколько команд при использовании sudo в качестве другого пользователя

Если я это сделаю: «sudo -i -u john.smith whoami» без двойных кавычек, это скажет мне, что я john.smith.

Теперь я хочу развернуть это, сделав whoami, сменив каталоги и выполнив команду ls, используя «root» для sudo как john.smith.

+1

Вы можете уточнить, что вы хотите? –

+2

Сделать сценарий и запустить его? – Iluvatar

+0

Извините, я должен был уточнить, что хочу попробовать это, не написав сценарий. В конце концов я хочу обновить команду «на лету» с помощью нашего планировщика автоматизации без необходимости входа на сервер и обновления сценария. Таким образом, другие могут сделать то же самое, если я недоступен. – Huey

ответ

1

Bash поддерживает флаг -c, который позволяет указать команду для запуска в качестве аргумента командной строки - в основном встроенный сценарий Bash. Это означает, что вы можете легко объединить несколько команд в один вызов bash, который затем легко sudo -ed: (. Другие языки оболочки имеют ту же функцию)

sudo -i -u john.smith bash -c 'whoami ; cd /tmp/ ; ls -ltr' 

или

sudo -i -u john.smith \ 
    bash -c ' whoami 
      cd /tmp/ 
      ls -ltr 
      ' 

+0

Это именно то, что мне нужно. Благодаря! – Huey

+0

@ Huey: Добро пожаловать! – ruakh

0

Вы можете создать небольшой файл сценария оболочки и запустить его с помощью sudo.

Другая вещь, которую я часто использую в Ubuntu, заключается в том, чтобы сделать «sudo su» - это дает мне корневую оболочку, и я исхожу оттуда.

Смежные вопросы