2710
php

```

    <?php    
    exec('sh read.sh', $output);
    print_r($output);
    
```

read.sh

```

     #!/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               
     " 
    
```

上記のコードのように 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 な操作ができなくなります。

```

    spawn ssh -t test
    
```

としてみて下さい(`-t` オプションを追加)。これは ssh プロセスに強制的にpseudo tty(擬似端末)を割り当てます。
CC BY-SA 3.0
2014-12-27T16:27:15.587
2710
2014-12-27T16:27:15.587
2708
answer