web-dev-qa-db-ja.com

sshトンネリング後のローカルでのコマンドの実行

スクリプトファイルがあります./run_app.shこれには次のものが含まれます:

ssh -L 8888:localhost:8888 ubuntu@address
./run_website.sh   # it should be executed locally

ただし、リモートマシンで2行目を実行しようとします。実は自分のパソコンで走らせたいです。何か案が?

2
Super Hornet

こんにちは、スーパーユーザーへようこそ。

ssh -L 8888:localhost:8888 ubuntu@addressの後、スクリプトはリモートサーバー上にあります。

フラグ-fNsshに渡すことができます(-fforkをバックグラウンドに、-Nコマンドを実行しない)。

次に、トンネルが確立された後、スクリプトはマシンの次の行で実行を再開します

欠点は、スクリプトが終了した後でも、ssh接続がバックグラウンドに残ることです

回避策は、-Nフラグを破棄し、リモートサーバーでsleep 10を実行することです。

ssh -f -L 8888:localhost:8888 ubuntu@address sleep 10

このように、トンネルが使用されていない場合、run_website.shが終了したとき、またはスクリプトがトンネルを使用しない場合(つまり、何らかの理由で失敗した場合)に10秒後に、トンネルは自動的に切断されます。

これは明らかに、run_website.shがトンネルを使用していることを前提としています。

トンネルを自動的に終了する必要がない場合は、先に進んで-fNを使用してください。

ssh -fN -L 8888:localhost:8888 ubuntu@address

必要に応じて、後でsshプロセスを強制終了できます。

5
Mr Shunz