1. ホーム
  2. bash

[解決済み] 一時的な SSH トンネルをセットアップするための Bash スクリプト

2022-05-11 16:36:12

質問

Cygwinで、私はBashスクリプトをしたいです。

  1. リモート サーバーへの SSH トンネルを作成します。
  2. トンネルを使用するいくつかの作業をローカルで実行します。
  3. その後、トンネルをシャットダウンします。

シャットダウンの部分に困惑しています。

現在、私はいい加減な解決策を持っています。1 つのシェルで、私はトンネルを作成するために以下を実行します。

# Create the tunnel - this works! It runs forever, until the shell is quit.
ssh -nNT -L 50000:localhost:3306 [email protected]

そして、別のシェルウィンドウで、自分の仕事をする。

# Do some MySQL stuff over local port 50000 (which goes to remote port 3306)

最後に、終わったら、最初のシェルウィンドウを閉じて、トンネルを閉じます。

のように1つのスクリプトですべて行いたいのですが。

# Create tunnel
# Do work
# Kill tunnel

どのトンネルプロセスを殺すべきか知るにはどうしたらよいでしょうか?

どのように解決するのですか?

sshの'コントロールソケット'を使えば、きれいにできます。すでに実行中の SSH プロセスと通信し、その pid を取得したり kill したりするには、次のようにします。 以下のように「コントロールソケット」(-Mはマスター、-Sはソケット)を使用します。

$ ssh -M -S my-ctrl-socket -fnNT -L 50000:localhost:3306 [email protected]
$ ssh -S my-ctrl-socket -O check [email protected]
Master running (pid=3517) 
$ ssh -S my-ctrl-socket -O exit [email protected]
Exit request sent. 

my-ctrl-socketは実際に作成されるファイルであることに注意してください。

私はこの情報を OpenSSH メーリングリストの非常に RTFM な返答からです。 .