이것은 내 스크립트입니다. 다른 사용자로 로그인하여 다음을 수행하고 싶습니다 ls -lih
.
#!/bin/bash
su - testuser <<- _EOF_
123456 #password
_EOF_
ls -lih
스크립트를 실행할 때의 출력은 다음과 같습니다.
./script.sh
-bash: line 1: 123456: command not found
total 127M
262210 drwxr-xr-x. 9 mazimi mazimi 156K Feb 14 19:05 Desktop
262211 drwxr-xr-x. 2 mazimi mazimi 36K Feb 14 18:26 Downloads
278106 -rw-r--r-- 1 mazimi mazimi 64K Feb 14 22:30 ems.cfg
... # list of files
내 홈 디렉토리에 있지 ls -lih
않나요 testuser
? 어떻게 고쳐야 합니까?
답변1
코드에 몇 가지 문제가 있습니다.
su
비밀번호는 에서 읽는 것이/dev/tty
아니라 에서 읽어stdin
오므로 이와 같이 비밀번호를 리디렉션할 수 없습니다. 실제로su
기본값은 대상 사용자로 셸을 시작하는 것이므로 다음 명령을 실행하면 다음과 같습니다root
.su - testuser <<- _EOF_ 123456 #password _EOF_
성공할 것입니다
su
(루트는 이 작업을 수행하기 위해 비밀번호가 필요하지 않습니다). 하지만123456
사용자 쉘에 입력으로 전달됩니다. 따라서 스크립트를 실행할 때 다음과 같은 내용이 표시됩니다.-bash: line 1: 123456: command not found
루트가 아닌 사용자로 이 작업을 수행하려면 bahamt의 조언을 따르고
sudo
다른 사용자가 특정 명령에 암호 없이 액세스할 수 있도록 구성할 수 있는 를 사용해야 합니다.작동 하더라도
su
새로운 프로세스가 생성됩니다. 명령이 실행되기 전에su
명령이 종료되고 원래 계정으로 반환되었습니다ls
. 그래서 당신이 정말로 원하는 것은 :su - testuser <<EOF ls -lih EOF
답변2
내 생각엔 당신이 그것을 고칠 수 없다는 것을 알게 될 것 같아요. 내 생각엔 비밀번호가 su
읽혀진 것 같은데 /dev/tty
, 실제로 해당 마법 장치 파일로 리디렉션할 수는 없다고 생각합니다.
Linux를 사용하는 경우 su
읽기 콘텐츠를 사용하여 비밀번호를 확인할 수 있습니다 strace
.
답변3
당신이 정말로 사용하고 싶은 것은 입니다 sudo
.
당신은 시작하고 싶을 수도 있습니다여기.