Ciscoスイッチのポートを無効/有効にするために使用する簡単なPHPサイトを作成しました。php関数exec()を介して2つの引数(ポートとアクション)をbashスクリプトに渡します。デバッグのために、bashスクリプト内の最後にこれらの引数を設定しました。
私が呼び出しているphp関数の重要な部分は次のようになります。
function PortAction($port, $action){
echo "<hr /> Port:".$port."<br />Action:".$action;
chdir('/usr/local/icinga-1.7.0/videowand/');
echo exec('sh /usr/local/icinga-1.7.0/videowand/action2.sh 2>&1',$output, $return);
echo "Return / Output: ".$return;
print_r($output);
}
bashスクリプト「action2.sh」:
#!/bin/bash
/usr/libexec/rancid/clogin -c "conf t; int Fa0/1; shutdown" 192.168.6.6
apacheユーザーとしてbashスクリプトを手動で(または直接cloginコマンドでさえ)実行すると、すべてが期待どおりに機能し、ポートが無効になります。しかし、PHP関数を介して呼び出すとすぐに、次の出力が得られます。
配列([0]=>そのような変数はありません[1]=>( "env(HOME)"のトレースを読み取ります)[2]=>[3]内から呼び出されます=>"set password_file $ env(HOME)/。cloginrc "[4] =>(ファイル" / usr / libexec / rancid / clogin "行66)
そして、何も行われません。これは、パスワード入力に問題があることを示しています(私が見る限り)。このファイルのアクセス許可は正しいです。そうしないと、シェル内で直接機能しない可能性があります。-fスイッチを使用して.cloginrcパスを変更しようとしても、成功しませんでした。PHPセーフモード:オフ表示エラー:オン
telnet接続を開く必要があるため、スクリプトにはしばらく時間がかかります。これが、これを別のbashスクリプトに入れる理由です。