스크립트가 실행되는 동안 sudo가 만료되지 않도록하는 방법 [중복]

Dec 22 2020

때때로 한 번에 몇 시간 동안 스크립트를 실행해야하는데, 그 동안 일부 명령에는 sudo. 그러나 sudo주기적으로 비밀번호를 확인하고 다시 입력 하지 않으면 sudo: timed out reading password오류가 발생하여 때때로 모든 것이 깨집니다. sudo myscript.sh일부 명령은 없이 실행해야하므로 사용하고 싶지 않습니다 sudo.

sudo시스템의 나머지 부분을 변경하지 않고 스크립트의 전체 기간 동안 캐시 된 암호를 유지 하고 싶습니다 ( 이 1 개의 스크립트에 대해서만sudo 지속성 ).

sudo스크립트의 전체 기간 동안 그리고 1 개의 스크립트에 대해서만 마지막 으로 만드는 방법이 있습니까?

답변

KamilMaciorowski Dec 22 2020 at 13:53

가능성 : 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

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