Как я могу поддерживать sudo в сценарии bash?

Если я запустил этот скрипт, как я могу передать ему права суперпользователя? Я написал это только для установки новых машин с основами. Я не хочу запускать каждую команду с повышенными разрешениями, но команды, которые имеют sudo я хочу запускать с ними.

Как некоторые команды запускаются с помощью sudo а другие запускаются как обычный пользователь?

 #!/bin/sh # If Linux, install nodeJS if $(uname) = 'Linux'; then export IS_LINUX=1 # Does it have aptitude? if -x "which apt-get"; then export HAS_APT=1 # Install NodeJS sudo apt-get install --yes nodejs fi # Does it have yum? if -x "which yum" ; then export HAS_YUM=1 # Install NodeJS sudo yum install nodejs npm fi # Does it have pacman? if -x "which pacman" ; then export HAS_PACMAN=1 # Install NodeJS pacman -S nodejs npm fi fi # If OSx, install Homebrew and NodeJS if $(uname) = 'Darwin' ; then export IS_MAC=1 if test ! "$(which brew)" then echo "================================" echo " Installing Homebrew for you." echo "================================" ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" export HAS_BREW=1 elif -x 'which brew' ; then export HAS_BREW=1 brew update fi # Install NodeJS brew install --quiet node fi # Does it have python? if -x "which python" ; then export HAS_PYTHON=1 if -x "which pip" ; then pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U export HAS_PIP=1 fi fi # Does it have node package manager? if -x "which npm" ; then export HAS_NPM=1 else echo "NPM install failed, please do manually" fi # Does it have ruby gems? if -x "which gem" ; then export HAS_GEM=1 fi 

Остальная часть сценария bash (который я не включал для длины) устанавливает пакеты из массива с использованием npm, apt, yum, brew или pacman, в зависимости от машины. Он устанавливает только простые вещи, такие как git , wget и т. Д.

One Solution collect form web for “Как я могу поддерживать sudo в сценарии bash?”

В первый раз вызывается пароль sudo . Затем, в зависимости от конфигурации, если он вызывается в течение N минут (по умолчанию 5 минут IIRC), вам не нужно снова вводить пароль.

Вы могли бы сделать что-то вроде:

 sudo echo >/dev/null || exit 1 

или, возможно, что-то вроде:

 sudo -p "Become Super: " printf "" || exit 1 

в начале скрипта.

Если вы хотите запретить кому-либо делать sudo ./your_script вы должны также проверить EUID ( bash ):

 if [[ $EUID -eq 0 ]] then printf "Please run as normal user.\n" >&2 exit 1 fi 

или что-то вроде:

 if [ "$(id -u)" = "0" ] ... 

В любом случае также проверьте, какая оболочка вы таргетируете. Т.е.

и т.п.


Чтобы «сохранить его в живых», можно сделать что-то вроде :

 while true; do sleep 300 sudo -n true kill -0 "$$" 2>/dev/null || exit done & 
  • Может ли программа, выполняемая sudo-сервером NOPASSWD, использовать sudo для получения доступа root?
  • Запуск локальных скриптов на нескольких серверах с использованием пользователя sudo через скрипт
  • Ubuntu: невозможно скопировать файл в каталог, созданный с использованием тех же учетных данных
  • Почему эта команда ssh не работает? (cat ./file | ssh <user @ host> "cat | sudo -t -t 'cat> / root / location / file'")
  • Разрешить обычному пользователю использовать mount без SUDO или FSTAB
  • Как ОС знает, что команде требуется sudo?
  • rsync как другой пользователь
  • Ошибка аутентификации su, ошибка sudo
  • Как переключить пользователя без ссылок на старый?
  • Снять демона с помощью sudo?
  • Могу ли я создать суперпользователя * super *, чтобы у меня действительно был пользователь, который может лишить права root?
  • Linux и Unix - лучшая ОС в мире.