를 사용하여 로그인 쉘을 호출하려면을 sudo
사용하십시오 -i
. command가 지정되지 않으면 로그인 쉘 프롬프트가 표시되고 그렇지 않으면 명령 출력이 표시됩니다.
예 (로그인 쉘) :
sudo -i
예 (지정된 사용자가있는 경우) :
sudo -i -u user
예 (명령 사용) :
sudo -i -u user whoami
예 (인쇄 사용자 $HOME
) :
sudo -i -u user echo \$HOME
참고 : 백 슬래시 문자는 달러 기호가 대상 사용자의 쉘에 도달하고 호출하는 사용자의 쉘에서 해석되지 않도록합니다.
방금 strace 를 사용 하여 마지막 예제를 확인하여 정확히 무슨 일이 일어나고 있는지 알려줍니다. 출력 벨로우즈는 --login
bash를 명시 적으로 호출하는 것처럼 쉘이 지정된 명령으로 호출되고 있음을 보여 주지만 sudo 는 설정과 같은 자체 작업을 수행 할 수 있습니다 $HOME
.
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
나는 당신이 사용 -S
하고 있음을 알았고 그것이 일반적으로 좋은 기술이라고 생각하지 않습니다. 키보드에서 인증을 수행하지 않고 다른 사용자로 명령을 실행하려는 경우 SSH를 대신 사용할 수 있습니다. localhost
다른 호스트와 마찬가지로 작동하며 대화식 입력없이 작동하는 공개 키 인증을 제공합니다.
ssh user@localhost echo \$HOME
참고 : SSH 서버는 항상 SSH 클라이언트가 액세스 할 로그인 쉘을 작성하므로 SSH에는 특별한 옵션이 필요하지 않습니다.