• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpからsshトンネリングコマンドを発行すると応答しない。。)

phpからsshトンネリングコマンドを発行すると応答しない

このQ&Aのポイント
  • phpからsshトンネリングコマンドを発行すると応答がなくなってしまいます。apache上でphpを動作させており、コマンドを実行すると正常に終了し、転送機能も働きます。
  • phpからコマンドを呼び出す場合に制約があるのか、詳しくはわかりませんが、パスワードを聞かれないように設定しています。apacheを再起動するとトンネリングのプロセスが現れます。
  • phpのsshトンネリング機能を使いたいが、応答しない問題が発生しています。なにか対策方法をご教授いただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

なるほどssh経由でpostgresに接続しようと・・・・。  ところで、sshの起動に成功したとして、終了はどうするの?  あ、いや、成功はしてるんだと思うんスよ。これ(sshの起動とトンネル)。で、応答せんくなるのはsystem()が「sshの終了を待っている」からだ。詳しくは参考URLを参照の事。  ひょっとしたらpopen()でsshの制御ができるかも知れない。PHPのバージョンが4.3.0以上であれば、proc_open()も参照すると良いだろう。  ただ、このphpの出力が終わった後にsshやpg_connect()がどうなってるのか気になるよね。レスポンスもだいぶ悪くなりそうやし。もし私がこの手法を取るなら、デーモンとしてあらかじめsshトンネルを作っとくなぁ・・・・。 結論:トンネルは別口で張っておきましょう。

参考URL:
http://jp.php.net/manual/ja/function.system.php
hokuro777
質問者

補足

ご回答ありがとうございます。 参考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 で終了させています。うーん。無理やりだ。。 >結論:トンネルは別口で張っておきましょう。 トンネルは必要なときだけ張りたいんですよねぇ

関連するQ&A