2013-04-23 3 views
1

다른 컴퓨터 또는 동일한 컴퓨터의 ssh를 사용하여/root/scripts /에있는 perl 스크립트를 PHP에서 실행해야합니다. 것은 단지 그 파일을 excecute 뿌리 계정으로 PHP 로그를 만드는 방법을 모르겠다.root가 필요한 perl 스크립트를 어떻게 실행할 수 있습니까?

사용자 $로/root/scripts /에 액세스 할 수 없으므로 excec 또는 system을 사용하여 호출 할 수 없습니다. 나는 sudo su에 로그인 할 때 ssh를 사용 해보려고 노력했다. 그리고 패스워드를 줄 때 멈춘다.

<?php 
include('Net/SSH2.php'); 


$ssh = new Net_SSH2('IP'); 
if (!$ssh->login('user', 'password')) { 
exit('Login Failed'); 
}else{ 
echo ("login suscess"); 
} 
echo $ssh->read(']$'); 

echo $ssh->write("sudo su\n"); 

echo $ssh->read('user:'); 
//the code normally runs if I dont write the lines below 

$ssh->write('password\n');//here I try to get ssh the root pass but php wont respond after this 
echo $ssh->read('user]#');//normally this would work to show the root prompt but I don't know what happens 


?> 

난 당신이 여기 좀 도와 수 있기를 바랍니다 :

나는 여기에 코드를 둡니다.

+1

이미 루트 로그인을 사용하고, 간부 sudo는 SU : 여기에 그 처리 방법의 phpseclib의 사이트에 예제가? – bwoebi

+0

죄송합니다. 사용자가있는 곳에 루트를두고 있다는 것을 알지 못해 죄송합니다. 질문을 작성하기 전에 테스트에 불과했기 때문에 사용자를 다시 잊어 버렸습니다. –

+0

ssh를 통한 원격 루트는 거대한 보안 구멍입니다. 일반 사용자로 로그인 한 다음 특정 사용자에게 특정 스크립트에 대한 sudo 액세스 권한을 부여하는 것이 훨씬 낫습니다. –

답변

1

보통 sudo는 웹 서버 사용자가 암호 인증없이 스크립트를 실행할 수 있다고 말합니다. 당신은 /etc/sudoers에 다음과 같은 줄을 추가해야합니다 :

www-data ALL=(ALL:ALL) NOPASSWD: /root/scripts/script.pl 

이 암호를 입력 할 필요없이 www가 데이터 사용자가 sudo를 통해 script.pl을 수행 할 것입니다.

그때 정말 많은 일을하지 않는 호출) $하고 ssh> 쓰기 (교체 아웃 Echo'ing

exec('sudo /root/scripts/script.pl'); 
+0

나는 exec ('whoami')를 실행하여 아파치를 반환했다. 아파치로 WWW 데이터를 repalace해야한다고 생각하니? –

+0

예. 'www-data'를'apache'로 바꾸십시오.이 경우 – hek2mgl

+0

덕분입니다! –