3

私のサーバーに、あなたの名前を尋ねる script.sh があるとします。スクリプトを実行すると、次のように表示されます。

what is your name?

次に、名前を入力すると、次のように出力されます。

hello name! 

php exec を使用して、そのようなスクリプトを実行することは可能ですか? つまり、スクリプトを実行して、さまざまな質問に答えます。

私がはっきりしていることを願っています。私が実際にやろうとしているのは、開発サーバーから「git pull」コマンドを自動化することですが、ユーザー名/パスワードを要求し続けます。それを避けるためにssh証明書ログインを使用できることは知っていますが、私の質問はまだ残っています。exec() を使用して、スクリプトから今後の質問に答えることができますか?

4

3 に答える 3

4

あなたの場合のより良い解決策は、認証に SSH キーを使用することです。しかし、 PHP Expectでこれをやってのけることができるかもしれません。

ini_set("expect.timeout", -1);
ini_set("expect.loguser", "Off");

$stream = expect_popen("git pull");

while (true) {
    switch (expect_expectl ($stream, array (
            array ("username:", USERNAME),
            array ("password:", PASSWORD),
    ))) {
        case USERNAME:
            fwrite ($stream, "usename\n");
            break;
        case PASSWORD:
            fwrite ($stream, "secret\n");
            break;

        case EXP_TIMEOUT:
        case EXP_EOF:
            break 2;

        default:
            die ("Error has occurred!\n");
    }
}

fclose ($stream);
于 2012-11-29T18:53:24.833 に答える
1

あなたの質問のために:あなたができることの1つは、より複雑な相互作用が必要な場合にパイプexec( "echo'hello world' | some_command")を使用するように求められているものを明確に知っている場合、popen()を見てください。popenを使用すると、プロセスへのストリームアクセスが可能になるため、fread / fwriteなどを使用できます。ただし、ほとんどのssh実装では、特別なAPIを使用してインタラクティブな入力をチェックするため、これらは機能しません。そこでできることは、キーを使用するか、ssh-agentを調べることです。

于 2012-11-29T18:56:12.957 に答える