내 작업 흐름 중 상당수는 sudo -i
내 개인 사용자 이름이 할 수 없는 특정 작업을 실행할 수 있는 서비스 사용자로 sudo 대화형 세션( )을 사용하는 것과 관련됩니다. 이 작업을 수행할 때 PS1 변수와 기타 bash 세부 정보를 유지하고 싶습니다. 서비스 사용자의 를 수정할 수 없기 때문에 .bashrc
홈 디렉터리에 스크립트를 설정하여 원하는 방식으로 내보냈습니다. 예를 들어 내 워크플로는 다음과 같습니다.
ssh me@remote
sudo -i -u service_user
. /home/me/ps1.sh
*service user commands here*
exit
sudo 명령을 롤백하고 PS1 스크립트를 하나의 명령으로 소스화하고 싶습니다. 내 생각은 명령을 전달하는 이와 같은 것을 사용하는 것입니다. sudo -i -u service_user -c sh ". /home/me/ps1.sh"
문제는 대화형 모드에 머무르지 않고 명령이 실행되자마자 세션이 종료된다는 것입니다. 관리자에게 sudo를 통해 PS1 변수를 유지하기 위한 권한을 요청하는 것 외에 제가 할 수 있는 다른 작업이 있나요?
답변1
다음을 사용하는 대신 --rcfile
bash에게 파일을 읽도록 지시 할 수 있습니다 .ps1.sh
service_user
.bashrc
sudo -i -u service_user bash --rcfile /home/me/ps1.sh
그러면 실행 흐름은 다음으로 sudo
실행하는 것과 유사합니다 . 소스를 얻으려면 파일에서 이를 수행 할 수 있습니다 .bash -lc 'bash --rcfile /home/me/ps1.sh'
service_user
service_user
.bashrc
ps1.sh
in은 "대화형"이 아닙니다 -i
.sudo -i
로그인.profile
쉘(즉, 대상 사용자 또는 이에 상응하는 사용자를 처리하고 주어진 명령을 실행하는 쉘을 시작합니다 ). 이것이 바로 실행이 bash -l
실제 명령을 래핑하는 이유입니다. service_user
s가 중요 하지 .profile
않다면 다음과 같이 할 수 있습니다.
sudo -u service_user bash --rcfile /home/me/ps1.sh