Среда
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. Да, скрипт имеет соответствующие разрешения и права собственности.
Я думаю, что возможно проблема связана с 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
Других решений пока нет …