2710


php

[code]

    <?php    
    exec('sh read.sh', $output);
    print_r($output);
    
[/code]

read.sh

[code]

     #!/bin/sh                       
     /usr/bin/expect -c "
     set timeout 10         
     spawn ssh test
     expect \"passphrase\" {
     send \"pass\r\"   
     expect \"Last login\"  
     send \"ls\r\"          
     expect \"$\"           
     send \"exit\r\"
     }                      
     interact               
     " 
    
[/code]

上記のコードのように phpからexecでシェルを実行して、 sshで接続した先でlsをし、その結果をphpで受け取りたいです。

しかしコードの結果は

spawn ssh test

という、戻り値になってしまっています。 read.shを直接実行すると、意図したlsの結果が返却されます

sshの接続や、実行権限などは確認済みです。

なにか原因やコツなどわかるかたいましたらご教授ください。 宜しくお願いします。

環境 さくらVPS php 5.5 apache2.2


CC BY-SA 3.0
2014-12-27T16:08:13.637
2708
2014-12-27T16:27:15.587
5839
question
php
phpからshellのexpectを実行したい


PHP からシェルスクリプトを実行しますと tty(端末)が割り当てられません。そのため、interactive な操作ができなくなります。

[code]

    spawn ssh -t test
    
[/code]

としてみて下さい(`-t` オプションを追加)。これは ssh プロセスに強制的にpseudo tty(擬似端末)を割り当てます。


CC BY-SA 3.0
2014-12-27T16:27:15.587
2710
2014-12-27T16:27:15.587
2708
answer