PHP调用Expect脚本(Works通过SSH运行脚本,但是用PHP调用)

时间:2017-01-15 20:54:39

标签: php ssh centos httprequest expect

我有一个UBNT Toughswitch,我正试图用我的手机用PHP和脚本远程关闭poe power。我用UBNT mFi的类似脚本做到这一点。如果我通过SSH连接到服务器(w / root,我只设置用户)并在其所在的位置运行它,脚本工作正常。我检查了脚本和php代码上的所有R / W / E框,以防它是一个php权限问题。所以这是脚本:

PHP使用http get请求调用脚本:

    <?php

    system ( "./tsport3-24-off.sh" );

    ?>

    <script type="text/javascript">

    window.close();

    </script>

这是期望脚本:

    #!/usr/bin/expect
    set timeout 30

    spawn ssh shane@$ip
        expect {
            "*assword:*" {
                send "$password\r"
                expect {
                    "*assword:*" {
                            close
                            continue
                            }
                    "*#*" {
                        send "grep -v 'switch.port.3.poe=48' /var/tmp/system.cfg > /var/tmp/tmpsystem.cfg; mv /var/tmp/tmpsystem.cfg /var/tmp/system.cfg\r"
                        expect {
                            "*not found*" {
                                    close
                                    }
                            "*#*" {
                                send "save && reboot\r"
                                interact
                                }
                            }
                        }
                    }
                }
            }

它将通过一切,直到保存&amp;&amp;重启部分,并在通过php调用时不会这样做。通过SSH,它工作正常。我还尝试使用2个不同的命令保存并重新启动,以防它不喜欢&amp;&amp;和隔离它到一个单独的脚本中以确保它就在它的位置。就像php一样拒绝发送save&amp;&amp;由于某些原因重新启动,例如权限问题,但它通过ssh将其发送到其他设备,因此对我来说没有意义。这个是关闭端口3上的poe 24v。我有其他人打开(24/48)并重新启动所有工作没有PHP,但没有PHP。

1 个答案:

答案 0 :(得分:0)

不是100%的答案,但它确实有效。

如果我添加另一个保存&amp;&amp;像这样重启:

    expect "*#*"
    send "save && reboot/r"
    expect "*#*"
    send "save && reboot/r"

当php脚本运行时,它不会出错,如果我正常运行它可能会发生错误,但这无论如何都不是我的意图。认为这是一个时间问题,或者当它被php运行时,它会在某处获得额外的