0

私の場合は、ssh でシェルスクリプトを実行する PHP shell_execに似ていますが、同じではありません。

状況:2台のサーバー間でsshキーを交換し、www-dataユーザーに切り替えて、パスワードなしでSSHを介して2台目のサーバーに接続しました。

テスト 1: ssh user@10.8.0.6 Documents/run.sh リストをシェルで実行すると正常に動作する

テスト 2: PHP ファイルに単純な PHP Exec を配置すると、正常に動作します。配列を返し、Retval は 0 です

テスト 3: exec を「大きな」PHP スクリプトに入れて呼び出すと、Retval 255 (致命的なエラー ?!?!?) が発生します。

そのため、なぜ機能しないのか、現時点ではよくわかりません。retval 255 の詳細を調べてみましたが、うまくいきませんでした。

違いは、PHP5 と PHP5 cli のどこかにあるはずです。しかし、OpenVPN を使用する前は、通常の Apache 呼び出しでも問題なく動作していました。

4

1 に答える 1

3

ジェネリック

問題の診断の最初のレベルは、shell_exec2>&1 を追加して同じコマンドを生成することにより、より有益なエラーを取得しようとしています。

$retval = shell_exec("/path/to/ssh ... 2>&1");

と検査$retval

アップデート

「ホスト キーの検証に失敗しました」は、~/.ssh/known_hostsApache を実行しているユーザーの に別のキーが含まれていることを意味します。ホスト名と IP キーの両方のファイルをチェックインします。ピンチでは、両方を削除し、ユーザーとしてログインし、www-data手動で接続してキーを元に戻します。

ホスト名で接続している場合、DHCP または別の VPN トンネルが稼働しているために IP が変更され、探しているホストではない可能性もあります。

SSH の場合、-vvv非常に詳細なオプションを指定して実行し、キロバイト単位の出力を解析してknown_hostsファイルのソースを検索することができます。shell_exec次のような診断コマンドにも役立ちます。

$ret = shell_exec('set');

HOME変数の値を表示します。

于 2012-10-22T08:50:23.580 に答える