次の質問があります。
Webインターフェイスを介してデータを提供するSSHを介してアクセスできるリモートシステムがあります。
OpenSSH LocalForwardingを使用してトンネルを開き、リモートサーバーを起動できます。
ssh [email protected] -L 127.0.0.1:3333:localhost:4000 ./start.sh
その後、他の端末(またはGUI)で次のようにブラウザを起動できます。
firefox localhost:3333/whatever
私のアプリが提供するコンテンツにアクセスできます。
使用後に[CTRL-C]のみを入力すると、start.sh
サーバー、接続、トンネルが閉じます。
今まではそんなに良くなった。
問題は、ブラウザがシャットダウンしたときにトンネルが閉じるようにすべてを結合するスクリプトを書くことは可能ですか?
より正確にはスクリプトが欲しい。
- トンネルを開き、リモートサーバーを起動します(上記のように)。
- 正しいポートでブラウザを自動的に開きます(任意に作成できます)(firefoxは可能ですが必須ではありません)。
- ブラウザの実行中にトンネルを実行し続けます。
- ブラウザがシャットダウンした場合(別の開いているウィンドウがある可能性があることを知っていますが、これはポイントを超えています)、
SIGHUP
server()にシグナルを送信する必要がありますstart.sh
。 - リモートサーバーがシャットダウンしたら、トンネルを閉じる必要があります(上記の設定では自動的に実行する必要があります)。
トンネルを守りたいそしてサーバーは厳密に必要な時間内に稼働して実行されるため、手動でシャットダウンする必要がある場合に発生する可能性がある「終了を忘れる」ことはありません。
どうすればいいですか?
ベストアンサー1
あなたの質問にほとんどのステップを説明しているようです。これはあなたが要求したものとほぼ同じです。
#!/bin/sh
# start ssh in the background, and record the pid in $ssh_pid.
ssh -n -L 127.0.0.1:3333:localhost:4000 [email protected] ./start.sh &
ssh_pid=$!
# start firefox. we're not running it in the background, so the
# script blocks here until firefox terminates.
firefox localhost:3333/whatever
# kill the ssh process
kill $ssh_pid
リモートサーバーがシャットダウンしたら、トンネルを閉じる必要があります(上記の設定では自動的に実行する必要があります)。
リモート./start.sh
コマンドが終了すると終了しますssh
。この場合、このスクリプトはFirefoxを終了しませんが、トンネルはもう存在しません。