PHP exec期望与SCP一起编写脚本

时间:2013-12-29 21:11:38

标签: php ssh cygwin expect scp

我在C:\ WampServer \ www \ dnsmasq \ php \ dnsmasq.php上有一个PHP脚本:

function uploadConfig() {
    exec('C:\cygwin64\bin\expect -f /home/Dave/bin/scp.expect asdf', $output, $exitCode);
    print_r($output);
    print($exitCode);
}

在/home/Dave/bin/scp.expect上调用脚本:

#!/usr/bin/expect -f

set password [lindex $argv 0]

spawn /usr/bin/scp /home/Dave/bin/test root@192.168.1.1:/etc/test

expect {
    -re ".*yes.*no.*" {
        exp_send "yes\r"
        exp_continue
    }
    -re ".*password.*" {
        exp_send "$password\r"
    }
}

interact

要上传的文件包含一行:

Testing

运行uploadConfig函数会在页面上产生以下输出:

Array ( [0] => spawn /usr/bin/scp /home/Dave/bin/test root@192.168.1.1:/etc/test [1] => root@192.168.1.1's password: ) 0 

该文件出现在/ etc / test服务器上,但它是空白的,即它不包含单词“Testing”。

我可以在cygwin shell中运行expect脚本,并使用内容上传文件:

$ expect -f /home/Dave/bin/scp.expect asdf

当我尝试从PHP执行此操作时,我不确定失败点在哪里。

1 个答案:

答案 0 :(得分:3)

您可以根据需要使用interact,猜测是什么,以交互方式与衍生的应用程序进行交互。

如果你想生成一个程序,向它发送一些数据,并等待它完成,改为使用expect eof