who
su superuser <<BELUGA
mysuperpassword
BELUGA
who
$./test.sh
просто ожидает входа. Что я делаю неправильно? Существует ли способ автоматизировать это?
Вы хотите использовать "ожидать" команду для передачи Вашего имени пользователя и пароля.
Обратите внимание однако на это, что Вы хотите сделать там запахи как плохой подход. Возможно, мы можем halp Вы лучше, если Вы уточняете немного больше свой исходный problme, Вы хотите решить.
Я думаю, что было бы намного лучше устанавливать/использовать sudo с конфигурацией конфигурации, которая позволяет NOPASSWD для определенного действия, которое Вы пытаетесь автоматизировать.
Будет намного более безопасно позволить определенную команду через sudo затем, это должно было бы сохранить Ваш пароль root в текстовом файле где-нибудь.
Запущение скрипта как пользователь и наличие его обновляют свои полномочия базироваться, вероятно, плохая идея. Лучшее решение состояло бы в том, чтобы запустить скрипт как корень и иметь его, понижают его полномочия по мере необходимости:
#!/bin/sh
UN=user
whoami
sudo -u $UN whoami
Когда выполнено как корень (принятие user
действительный пользователь), вывод должен быть этим:
root
user
Однако, если Вы действительно хотите выполнить сценарий как пользователь и смочь выполнить команды как корень, существует 2 опции, о которых я знаю.
Использование sudo с сохраненным паролем:
#!/bin/sh
whoami
sudo -S -p "" whoami <<EOF
mysuperpassword
EOF
Который произведет (когда выполнено как 'пользователь'):
user
root
Используйте sudo без пароля.
Добавьте список команд, с которыми Вы хотите столкнуться /etc/sudoers
файл путем выполнения visudo
как корень. Например, для разрешения user
выполнять команды apache2ctl
и whoami
, добавьте следующее:
User_Alias SPECIAL = user
Cmnd_Alias SPECIAL_COMMANDS = /usr/sbin/apache2ctl, /usr/bin/whoami
SPECIAL ALL = NOPASSWD: SPECIAL_COMMANDS
Или если Вы действительно доверяете user
, если это - Вы, например, можно позволить пользователю выполнять любую команду без пароля:
user ALL=(ALL) NOPASSWD: ALL
Затем, когда следующий скрипт запущен user
:
#!/bin/sh
whoami
sudo whoami
Это произведет:
user
root