웹 애플리케이션(php)이 다른 서버에서 스크립트를 실행해야 한다는 요구 사항이 있습니다. 루트를 통해 Apache 사용자를 Sudo하고 Apache 사용자로 원격 스크립트를 실행합니다. 원격 시스템의 스크립트가 올바르게 실행되었습니다. 그러나 웹 브라우저의 요청에 따라 실행되는 PHP 스크립트를 통해 실행하면 올바르게 실행되지 않습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
- 루트를 통해 로그인
Apache의 sesu 액세스 권한 변경
sudo /usr/sbin/visudo Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh apache ALL=(ALL) NOPASSWD:WEBREMOTE
아파치 사용자에게 sudo
sudo -u apache -s
원격으로 스크립트 실행
sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
원격 컴퓨터의 로그를 보면 쉘 스크립트가 정상적으로 실행됩니다.
PHP의 exec를 통해 동일한 스크립트를 실행하려고 하면 코드가 실행되지 않습니다.
<?php $shellcmd = "sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh $test_param & > /dev/null"; $ret = exec($shellcmd); echo "<br />"; echo "shellcmd result: [$ret]"; $ret2=shell_exec($shellcmd); echo "<br />"; echo "shellcmd result: [$ret2]"; ?>
생성된 PHP는 exec 또는 exec_shell을 통해 빈 결과만 반환하며 test_shell.sh 내의 로그는 원격 시스템에서 실행되지 않습니다. PHP 페이지에서도 오류가 발생하지 않습니다. 여기에 설정이 누락되어 있습니까?