次の質問があります。
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を終了しませんが、トンネルはもう存在しません。
答え2
答えは予想より少し複雑です。
最後に、サーバー用の完全な初期化スクリプトを作成しました。
#!/bin/sh
# use start-stop-daemon to control zero-ui
set -e
# Must be a valid filename
NAME=zero-ui
PIDFILE=/home/user/$NAME.pid
DAEMON=/usr/bin/node
DAEMON_OPTS="/home/user/zero-ui/backend/bin/www"
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
export NODE_ENV=production
export ZU_SECURE_HEADERS=false
export ZU_SERVE_FRONTEND=true
export ZU_CONTROLLER_TOKEN=...
export ZU_DISABLE_AUTH=true
export ZU_DEFAULT_USERNAME=...
export ZU_DEFAULT_PASSWORD=...
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --quiet --pidfile $PIDFILE -m --exec $DAEMON --chdir /home/user/zero-ui/backend -- $DAEMON_OPTS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
echo "."
;;
*)
echo "Usage: "$1" {start|stop}"
exit 1
esac
exit 0
次に、次のスクリプトを使用して呼び出します。
#!/bin/sh
set -e
ssh -n -L 127.0.0.1:3333:localhost:4000 user@server ./start-stop-zeroui start &
firefox localhost:3333/app
ssh user@server ./start-stop-zeroui stop
fg
@larsksまたは他の人がより良い答えを提示した場合は、喜んで彼らの答えを受け入れ、それ以外の場合は数日以内に私の答えを受け入れます。
このアイデアにインスピレーションを与えた@larsksに親指を置いた。