스크립트가 실행되는 동안 sudo가 만료되지 않게 만드는 방법

스크립트가 실행되는 동안 sudo가 만료되지 않게 만드는 방법

가끔 몇 시간 동안 스크립트를 실행해야 할 때가 있는데, 그 동안 일부 명령이 필요합니다 . 그러나 주기적으로 비밀번호를 sudo확인하고 다시 입력하지 않으면 전체 프로세스가 중단되는 오류가 발생합니다. 일부 명령을 실행해야 하기 때문에 사용하고 싶지 않습니다.sudosudo: timed out reading passwordsudo myscript.sh아니요 sudo.

sudo시스템의 나머지 부분을 변경하지 않고 스크립트 전체 기간 동안 캐시된 비밀번호가 스크립트 내에서 유지되기를 원합니다 ( sudo지속성오직이 1 스크립트의 경우).

sudo스크립트 전체 기간 동안 첫 번째 스크립트에만 이 작업을 수행할 수 있는 방법이 있습니까 ?

답변1

가능성: run script를 사용하세요 sudo myscript.sh. 이런 방식으로 실행 하면 안 되는 스크립트 내에서 명령을 실행하는 경우 sudo:

sudo -u "$SUDO_USER" foo args

(전체 스크립트가 없이 실행되는 경우 올바른 논리가 있을 수 있습니다 sudo).루트 사용자는 인증할 필요가 없으므로 sudo비밀번호를 입력하지 않고도 다른 사용자로서 명령을 실행할 수 있습니다..

스크립트의 크기(변경해야 할 변경 사항 수)와 전체 스크립트 실행에 대한 느낌에 따라 sudo이 아이디어가 마음에 들 수도 있고 마음에 들지 않을 수도 있습니다. 현재 접근 방식에서는 호이스팅되지 않은 코드가 sudo명시적 예외가 있는 기본 라인입니다. 내 접근 방식은 그 점을 뒤집습니다. 스크립트를 작성하고 테스트할 때는 더 많은 주의가 필요합니다. 나는 이것이 최선의 방법이 아니라는 것을 인정합니다. 여전히 만료 문제를 해결합니다 sudo.

개인적으로 저는 너무 복잡하지 않은(간단한 루프, 소수의 명령) 장기 실행 스크립트에 이 솔루션을 사용하겠습니다. 하지만 복잡한 스크립트를 다시 작성하기 전에 다시 생각해 볼 것입니다.


또 다른 접근 방식은 백그라운드에서 캐시된 자격 증명을 주기적으로 업데이트하는 것입니다. 기본적으로 이는 tty당입니다(참조:tty_tickets). 다음과 같이 진행하세요:

sudo -v                              # to enter your password once
while sleep 300; do sudo -v; done &  # adjust the interval if needed
myscript.sh

더 이상 필요하지 않은 백그라운드 작업을 종료하는 것을 잊지 마십시오. 스크립트 자체가 이러한 작업을 시작할 수 있습니다. 그런 다음 스크립트가 종료될 때 작업을 자동으로 종료하도록 스크립트의 일부 트랩을 원할 수 있습니다.

관련 정보