sudo 대화형 세션을 시작하고 초기 명령을 제공할 수 있습니까?

sudo 대화형 세션을 시작하고 초기 명령을 제공할 수 있습니까?

내 작업 흐름 중 상당수는 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

다음을 사용하는 대신 --rcfilebash에게 파일을 읽도록 지시 할 수 있습니다 .ps1.shservice_user.bashrc

sudo -i -u service_user bash --rcfile /home/me/ps1.sh

그러면 실행 흐름은 다음으로 sudo실행하는 것과 유사합니다 . 소스를 얻으려면 파일에서 이를 수행 할 수 있습니다 .bash -lc 'bash --rcfile /home/me/ps1.sh'service_userservice_user.bashrcps1.sh

in은 "대화형"이 아닙니다 -i.sudo -i로그인.profile쉘(즉, 대상 사용자 또는 이에 상응하는 사용자를 처리하고 주어진 명령을 실행하는 쉘을 시작합니다 ). 이것이 바로 실행이 bash -l실제 명령을 래핑하는 이유입니다. service_users가 중요 하지 .profile않다면 다음과 같이 할 수 있습니다.

sudo -u service_user bash --rcfile /home/me/ps1.sh

관련 정보