Se entendi seu problema corretamente e você não se importa com os riscos de segurança, é possível instalar o sudo, adicionar "www-data" (o www-data é um usuário padrão usado pelo nginx / apache) ao arquivo sudoers com todos permissão e nenhuma senha necessária e usá-lo para executar um comando como outro usuário.
Você pode fazer assim:
Instale o sudo:
apt-get install sudo
Em seguida, adicione o usuário à configuração:
nano /etc/sudoers
Adicione isto na última linha:
www-data ALL=(ALL) NOPASSWD: ALL
E finalmente você pode editar seu php para executar um comando com o sudo:
shell_exec('sudo -u testuser /var/www/html/copy.sh');
@Editar
Consegui fazê-lo funcionar no meu servidor. Basta seguir estes passos e também deve funcionar para você.
-
Tente substituir seu código PHP por isso:
<?php echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser echo "<pre>"; echo file_get_contents("ltylog.txt"); echo "<pre>"; ?>
-
Certifique-se então de que www-data tenha acesso ao arquivo copy.sh:
Você pode dar um 777 chmod assim:
chmod 777 /var/www/html/copy.sh
ou você pode fazer o arquivo pertencer ao usuário www-data (usado pelo apache):
chown www-data:www-data /var/www/html/copy.sh
mas se você escolher usar a segunda opção, certifique-se de que o www-data ainda possa executar o arquivo aplicando o chmod assim:
chmod 755 /var/www/html/copy.sh
-
Torne o arquivo executável:
chmod +x /var/www/html/copy.sh
-
altere o código copy.sh para isto:
rsync -rzv -e 'ssh -p 199' test.txt [email protected]:/home/testuser/txt ssh [email protected] -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
-
Finalmente, certifique-se de que o testuser tenha acesso aos seguintes arquivos:
- / home /
- / home / testuser /
- /home/testuser/lty.sh
- /home/testuser/ltylog.txt
Se você não se importa com segurança, você pode simplesmente digitar isso no console de um servidor remoto
chmod 777 -R /home/
Ou você pode verificar cada arquivo manualmente para garantir que as permissões estejam definidas corretamente.