Bash 스크립트에서 sudo를 유지하는 방법은 무엇입니까?

Bash 스크립트에서 sudo를 유지하는 방법은 무엇입니까?

이 스크립트를 실행하면 슈퍼유저 권한을 어떻게 전달합니까? 나는 새로운 기계를 설정하는 데 필요한 기본 사항을 익히기 위해 이 글을 쓰고 있습니다. 높은 권한으로 모든 명령을 실행하고 싶지는 않지만 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

답변1

처음 전화를 걸면 sudo비밀번호를 묻는 메시지가 표시됩니다 . 그러면 구성에 따라 N분(기본값 5분 IIRC) 내에 호출되면 비밀번호를 다시 입력할 필요가 없습니다.

다음을 수행할 수 있습니다.

sudo echo >/dev/null || exit 1

아니면 다음과 같은 것일 수도 있습니다.

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

스크립트 시작 부분에.

다른 사람이 이를 방지하려면 sudo ./your_scriptEUID(세게 때리다):

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 &

관련 정보