Запустите sudo как определенный пользователь без пароля
Я использовал следующую команду в моем скрипте
sudo su - user -c bash <<EOF
cp /home/test.txt /opt/
EOF
Если я использую sudo su - user
на терминале Unix не спрашивает мне пароль, но если я пытаюсь запустить скрипт, терминал спрашивает мне пароль, и если я удаляю часть EOF, остальная часть кода запускается, когда я покидаю сеанс. Я хочу выполнить команду в пользовательском режиме sudo, но терминалу не нужно спрашивать пароль.
Если я использую
sudo su - user <<EOF
code
EOF
У меня ошибка в.bash_profile: слишком много аргументов
4 ответа
Я хочу выполнить команду в пользовательском режиме sudo, но терминалу не нужно спрашивать пароль.
Сценарий, который вы испытываете, вызван кэшированием учетных данных пользователей для sudo, которые позволяют sudo поддерживать сеанс, и любая дальнейшая команда sudo не запрашивает пароли.
Проверь это:
Откройте новый терминал и запустите sudo whatever
затем закройте его, откройте еще один новый терминал и запустите sudo whatever
, вы увидите, что sudo
просит пароль каждый раз...
Если вам все еще нужно это сделать, у вас есть следующие варианты:
Предотвращать sudo
постоянно запрашивать пароль:
бежать sudo visudo
и искать линию root ALL=(ALL) ALL
затем добавьте строку
username ALL=(ALL) NOPASSWD: ALL
затем сохраните и выйдите.
Примечание. Это угроза безопасности.
Или предотвратить sudo
постоянно запрашивать пароль только для конкретного скрипта:
бежать sudo visudo
и искать линию root ALL=(ALL) ALL
затем добавьте строку
username ALL=NOPASSWD: path_to_the_script
затем сохраните и выйдите
Введите пароль внутри скрипта, запустив sudo
команда как это:
sudo -S <<< "password" command
Примечание: это тоже риск для безопасности.
Я думаю, вам нужно выполнить вашу команду от имени другого пользователя. Это может быть ваш ответ: Запустите сценарий оболочки как другой пользователь, который не имеет пароля
sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"'
Это цитата из ссылки. Возможно, вам лучше:
sudo -H -u otheruser bash <<EOF
cp /home/test.txt /opt/
EOF
ОБНОВЛЕНИЕ: Вы можете захотеть создать определенное правило sudo для запуска определенной команды без пароля (в файле /etc/sudoers -помните, чтобы использовать visudo для его редактирования-):
otheruser ALL=NOPASSWD: /full/path/to/your_command.sh
(конечно, вам нужен root-доступ для редактирования sudoers, надеюсь, вы сможете это сделать). И создайте скрипт под названием your_command.sh
это содержит вашу логику. Затем вам будет разрешено запустить его без пароля:
sudo -H -u otheruser your_command.sh
Я знаю, что это не "однострочная команда", но она безопасна, так как допускает только одну конкретную команду без пароля. И это не требует пароля, конечно!
Что сработало для меня, так это:
sudo passwd -d <username>
эта команда удалила пароль для указанного пользователя.
Тогда не используйте sudo, тогда он не будет запрашивать пароль, но вы будете авторизованы как root!