sudo 루프가 포함된 스크립트에 비밀번호를 반복적으로 제공하려면 어떻게 해야 합니까?

sudo 루프가 포함된 스크립트에 비밀번호를 반복적으로 제공하려면 어떻게 해야 합니까?

다음을 포함하는 스크립트가 있습니다.

while true
  sudo mycmd
  sleep 10000
  [ ... ] ; break
end

bash에서 스크립트를 실행할 때 sudo mycmd.

"예 또는 아니오"라는 질문에 대한 대답으로 표준 입력으로 yes | somecommand반복적으로 제공될 수 있다는 것을 기억했습니다 . 스크립트에 비밀번호를 반복적으로 제공하는 방법을 알고 싶습니다.yessomecommand

감사해요.

답변1

암호를 sudo명령에 파이프로 연결할 수 있지만 이는 전혀 안전하지 않으므로 가능하면 피해야 합니다.

echo 'hunter2' | sudo -S mycmd

더 나은 접근 방식은 전체 스크립트를 실행 sudo하고 비밀번호를 한 번만 요구하는 것입니다.

비밀번호 사용을 완전히 피하는 것도 가능 sudo하지만 이 역시 보안상의 이유로 권장되지 않습니다. 이는 명령을 /etc/sudoers사용하여 파일을 업데이트 visudo하고 그룹의 모든 사용자에 대해 이와 같은 행을 포함함으로써 수행할 수 있습니다 wheel.

%wheel ALL=(ALL) NOPASSWD: ALL

단일 사용자에 대해서만 비활성화하려면 %wheel해당 사용자의 사용자 이름으로 전환하세요.

답변2

물어:

스크립트에 비밀번호를 반복적으로 제공하려면 어떻게 해야 합니까?

그리고에바트의 답변간단한 접근 방식이 시연됩니다.

ewatt가 언급한 것처럼 "Sudo mycmd" 규칙과 함께 "NOPASSWD" 플래그를 사용하면 비밀번호를 완전히 묻는 것을 피할 수 있습니다.

또는 스크립트에 비밀번호를 하드코딩하지 않으려면 다음 설정을 통해 이 특정 명령에 대한 비밀번호를 다음 재부팅 때까지 캐시할 수 있음을 sudo에 알립니다.타임스탬프 시간 초과음수 값입니다. 여기서는 명령에 대한 별칭을 정의하고(/tmp/mycmd.sh를 임의로 대체) Defaults이를 정의에 사용합니다.

Cmnd_Alias MYCMD = /tmp/mycmd.sh
Defaults!MYCMD timestamp_timeout=-1
tim ALL = MYCMD

아니면 당신할 수 있다사용자 수준 시간 초과 기본값을 설정합니다.

Defaults:tim timestamp_timeout=-1

...이것은 의미합니다당신의타임스탬프는 다음과 같습니다.어느sudo 명령은 다음에 재부팅할 때까지 캐시됩니다.

또는 모든 명령과 사용자를 시간 초과할 수 있지만 특정 상황에서는 여전히 가능합니다.주인:

Defaults@thishost timestamp_timeout=-1

이러한 방식으로 timestamp_timeout을 설정하면 sudo가 비밀번호를 처음 입력한 후 비밀번호를 캐시할 수 있습니다.

스크립트의 각 루프 중에 비밀번호를 입력하지 않기 위해 이러한 옵션 중 하나를 구현 Defaults하지만 별도의 활동에 대해 비밀번호를 입력하는 안전망을 선호하는 경우 run은 sudo -ksudo에게 타임스탬프를 "종료"(또는 재설정)하라는 메시지가 표시되도록 지시합니다. 다음 번 입력을 위해. sudo에 인증할 때마다 이 "캐시"..."재설정" 프로세스가 다시 시작됩니다.

"다음 재부팅까지"가 너무 길면 10000초(분 단위)보다 큰 값, 즉 166보다 큰 "충분"으로 설정하세요! -- 각 주기마다 비밀번호를 확인하고 입력할 수 있습니다.

관련 정보