ライブラリをPHP
使用して、動的シェル コマンドを SSH 経由でサーバーに渡しています。ssh2
私が渡しているコマンドは次のとおりです(これは単なる例であり、コマンドは動的でユーザーが生成したものです)。
$command = 'ls -al
free -m';
改行に注意してください。ユーザーは改行とタブを含む完全な bash スクリプトを入力できるため、これは必須です。次に、次の手順を実行して、ssh2 ライブラリで実行する実際のコマンドを作成します。
$command = str_replace("'", "\'", $command);
$command = 'echo $\'' . $command . '\' | bash';
最終的なコマンドは次のとおりです。
echo $'ls -al
free -m' | bash
上記のコマンドはシェルで直接実行されますが、ssh2 を使用して PHP から実行すると、次のようになります。
ls: invalid option --
Try `ls --help' for more information.
だから私は、特殊文字がいくつかあるに違いないか、ドル記号がエスケープされていないのではないかと思ったので、次のようにしました。
print_r(bin2hex($command));
結果は次のとおりです。
6563686f2024276c73202d616c0d0a66726565202d6d27207c2062617368
ただし、16 進数を ascii に変換すると、正しいコマンドが返されます (上記とまったく同じ)。
何がこれを引き起こしているのでしょうか?