- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpからsshトンネリングコマンドを発行すると応答しない。。)
phpからsshトンネリングコマンドを発行すると応答しない
このQ&Aのポイント
- phpからsshトンネリングコマンドを発行すると応答がなくなってしまいます。apache上でphpを動作させており、コマンドを実行すると正常に終了し、転送機能も働きます。
- phpからコマンドを呼び出す場合に制約があるのか、詳しくはわかりませんが、パスワードを聞かれないように設定しています。apacheを再起動するとトンネリングのプロセスが現れます。
- phpのsshトンネリング機能を使いたいが、応答しない問題が発生しています。なにか対策方法をご教授いただけませんか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
なるほどssh経由でpostgresに接続しようと・・・・。 ところで、sshの起動に成功したとして、終了はどうするの? あ、いや、成功はしてるんだと思うんスよ。これ(sshの起動とトンネル)。で、応答せんくなるのはsystem()が「sshの終了を待っている」からだ。詳しくは参考URLを参照の事。 ひょっとしたらpopen()でsshの制御ができるかも知れない。PHPのバージョンが4.3.0以上であれば、proc_open()も参照すると良いだろう。 ただ、このphpの出力が終わった後にsshやpg_connect()がどうなってるのか気になるよね。レスポンスもだいぶ悪くなりそうやし。もし私がこの手法を取るなら、デーモンとしてあらかじめsshトンネルを作っとくなぁ・・・・。 結論:トンネルは別口で張っておきましょう。
補足
ご回答ありがとうございます。 参考URLから: バックグラウンドで実行 したままにしたい場合には、プログラムの出力をファイルまたは他の出 力ストリームにリダイレクトする必要があることにも注意して下さい。 出力を" > /dev/null 2>&1"にしたら動くようになりました。。。 終了については $ret = system("echo \$!"); とかでプロセスIDをもらって。。killしようかと思ったのですが、取れませんでした。。 今は ps ax | grep usr/bin/ssh | grep 【ポート番号】| grep -v grep | awk '{ print $1 }' | xargs kill -9 で終了させています。うーん。無理やりだ。。 >結論:トンネルは別口で張っておきましょう。 トンネルは必要なときだけ張りたいんですよねぇ