Выполнение скриптов, используя больше пользователей

StackOverflow https://stackoverflow.com/questions/3657440

  •  01-10-2019
  •  | 
  •  

Вопрос

Я пишу сценарий Bash, который называет множество других сценариев.
Несколько сценариев должны быть выполнены как user_1, но несколько как user_2.
Сценарии следует вызывать в строгой последовательности. Я начинаю свой скрипт как user_1 и использую SU много раз, чтобы стать user_2. В эти времена SU требует пароля, поэтому я должен повторно навестить это много раз. Я хотел бы избежать этого, но не имеет параметра пароля.
Sudo и ожидания не установлены.

Это было полезно?

Решение 4

Я решил проблему с использованием SSH. Я создал ключ аутентификации для user_1 и опубликовал пользователь2. Пароль больше не нужен.

ssh -l user_1 hostname  "command_1; command_2"

Другие советы

  • Сделайте вилку (используя '&') для user_1 и для user_2. Они должны общаться (аналогично клиенту-серверу), используя «файл блокировки» (семафор). Например, user_1 что-то делать что-то и проверка пользователя_2 - это «файл блокировки» в то время как ... сон петля

  • Может быть, это глупо, но вы можете использовать ssh user@localhost Конечные клавиши

Если у вас есть ZSH, я думаю, что вы можете сделать это легко - что-то вроде:

#!/bin/zsh
coproc user1_script
su user2
do_stuff
echo "your_turn" >&p
read MY_TURN
do_more_stuff
echo "your_turn" >&p
read MY_TURN
...

user1_script:

#!/bin/zsh
read MY_TURN
do_stuff
echo your_turn
read MY_TURN
do_more_stuff
...

Если вы застряли, и у ZSH это стоит попробовать в любом случае.

Вы можете работать как root. Звучит рискованно? Не если вы осторожны и предшествуете каждой команде с SU и добавьте имя пользователя так:

SU -C 'Script1' user_1 && su -c 'script2' user_2

Это будет (при условии, что вы начнете в качестве root) Измените пользователя в user_1, прежде чем запустить скрипт1, а затем вернуться к root, затем измените в user_2 для запуска script2. Все, не просящие несколько паролей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top