shell — ожидаемый скрипт не выполняется должным образом через переполнение стека

Среда

Centos 6,7

Plesk 12

Apache 2.2.15

PHP 5.4

Ожидаемый сценарий:

exp_internal 1
spawn /bin/su root
expect "Password: "send "supersecretthing\n"expect "$"send "service iptables start\n"expect eof
exit

У меня нет #! синтаксис, потому что я выполняю скрипт через expect /absoluteRoute/MyScript,

Когда я звоню expect /absoluteRoute/MyScript через Shell это круто. Делает так, как должно. Но если я попробую следующее через веб-браузер:

<?php
echo exec ('/usr/bin/expect /absoluteRoute/MyScript');
?>

Код PHP в конечном итоге отображает это:

spawn /bin/su root

Я прочитал другие вопросы, я создал /var/www/.ssh опция папки, но ничего.

Я хотел бы понять, почему я не могу выполнить ожидаемый скрипт через PHP. Да, скрипт имеет соответствующие разрешения и права собственности.

0

Решение

Я думаю, что возможно проблема связана с expect скрипт. Измени это так

spawn su root
expect "Password: "send "pwd\r"expect "\\\$"; # Matching literal dollar sign
send "service iptables start\r"expect "\\\$"; # Matching prompt again.
# After sending 'exit' only, we can expect 'eof'
send "exit\r"expect eof

Я проверил этот скрипт, и он хорошо выполняется с помощью php,

Замечания :

Альтернативно, чтобы соответствовать некоторому общему известному приглашению, вы можете определить переменную, такую ​​как

set prompt "#|>|%|\\\$ $"; # We escaped the `$` symbol with backslash to match literal '$'

Последний знак доллара представляет конец строки.

Пока используется ожидание, мы должны сопровождать флаг -re, чтобы указать это как регулярное выражение.

expect -re $prompt
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]