가끔 몇 시간 동안 스크립트를 실행해야 할 때가 있는데, 그 동안 일부 명령이 필요합니다 . 그러나 주기적으로 비밀번호를 sudo
확인하고 다시 입력하지 않으면 전체 프로세스가 중단되는 오류가 발생합니다. 일부 명령을 실행해야 하기 때문에 사용하고 싶지 않습니다.sudo
sudo: timed out reading password
sudo 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
더 이상 필요하지 않은 백그라운드 작업을 종료하는 것을 잊지 마십시오. 스크립트 자체가 이러한 작업을 시작할 수 있습니다. 그런 다음 스크립트가 종료될 때 작업을 자동으로 종료하도록 스크립트의 일부 트랩을 원할 수 있습니다.